2014-10-07  Andreas Kling  <akling@apple.com>

        Use more Ref and PassRef for Gradient.
        <https://webkit.org/b/137490>

        Codify the fact that CanvasGradient always has an internal WebCore::Gradient
        and make GraphicsContext gradient setters take PassRef, exposing some
        unnecessary null checks.

        Reviewed by Christophe Dumez.

        * WebCore.exp.in:
        * html/canvas/CanvasGradient.h:
        (WebCore::CanvasGradient::gradient):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::create):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContext.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintProgressBar):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::useStrokeStyleToFill):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):

2014-10-07  Martin Hock  <mhock@apple.com>

        Defer resolution of viewport size.
        https://bugs.webkit.org/show_bug.cgi?id=137376
        rdar://problem/18558094

        Reviewed by Benjamin Poulain.

        ViewportConfiguration should resolve the viewport size on configuration update.

        * dom/Document.cpp:
        (WebCore::Document::processViewport): Defer resolution of viewport size.
        * dom/ViewportArguments.cpp:
        (WebCore::finalizeViewportArguments): Deleted.
        * dom/ViewportArguments.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::updateConfiguration): Resolve viewport size.
        (WebCore::ViewportConfiguration::viewportArgumentsLength): Resolves width or height based on viewport arguments.
        * page/ViewportConfiguration.h:

2014-10-07  Pratik Solanki  <psolanki@apple.com>

        [iOS] WebKit1 clients crash in DiskCacheMonitor::tryGetFileBackedSharedBufferFromCFURLCachedResponse()
        https://bugs.webkit.org/show_bug.cgi?id=137495
        <rdar://problem/18495034>

        Reviewed by Andreas Kling.

        Retain/release the CFCachedURLResponseRef object otherwise we could access a deleted object
        and crash on the web thread.

        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::DiskCacheMonitor):

2014-10-07  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderText / RenderTextFragment
        https://bugs.webkit.org/show_bug.cgi?id=137476

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for RenderText / RenderTextFragment, and
        clean up the surrounding code.

        No new tests, no behavior change.

        * WebCore.exp.in:
        Export symbol for RenderInline::linesBoundingBox() as it is used by
        RenderInline::orderBoundingBox() which is inlined and now called in
        WebRenderNode.mm.

        * WebCore.xcodeproj/project.pbxproj:
        Make RenderInline.h header as Private so that it can be included by
        WebRenderNode.mm, similarly to RenderText.h.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::passwordFieldValue):
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::getLengthForTextRange):
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode textHeight]):
        (-[DOMNode findExplodedTextNodeAtPoint:]):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        * dom/Position.cpp:
        (WebCore::hasInlineBoxWrapper):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        (WebCore::Position::isCandidate):
        (WebCore::Position::rendersInDifferentPosition):
        (WebCore::searchAheadForBetterMatch):
        (WebCore::Position::getInlineBoxAndOffset):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * dom/Range.cpp:
        (WebCore::Range::textRects):
        (WebCore::Range::textQuads):
        (WebCore::Range::getBorderAndTextQuads):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::debugRenderer):
        * editing/TextIterator.cpp:
        (WebCore::hasVisibleTextNode):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::maxOffsetIncludingCollapsedSpaces):
        (WebCore::SimplifiedBackwardsTextIterator::handleFirstLetter):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * page/FrameView.cpp:
        (WebCore::countRenderedCharactersInRenderObjectWithThreshold):
        * rendering/BidiRun.cpp:
        (WebCore::BidiRun::BidiRun):
        * rendering/InlineIterator.cpp:
        (WebCore::InlineIterator::surrogateTextDirection):
        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::atTextParagraphSeparator):
        (WebCore::InlineIterator::atParagraphSeparator):
        (WebCore::isEmptyInline):
        (WebCore::InlineIterator::fastIncrementInTextNode):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineIterator::characterAt):
        (WebCore::InlineIterator::direction):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::renderer):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::isVisibleRenderText):
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        (WebCore::stripTrailingSpace):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createInlineBoxForRenderer):
        (WebCore::dirtyLineBoxesForRenderer):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        (WebCore::RenderBlockFlow::computeBlockDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::handleTrailingSpaces):
        (WebCore::RenderBlockFlow::determineStartPosition):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::hasImmediateNonWhitespaceTextChildOrBorderOrOutline):
        (WebCore::RenderElement::addChild):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::generateCulledLineBoxRects):
        (WebCore::RenderInline::culledInlineFirstLineBox):
        (WebCore::RenderInline::culledInlineLastLineBox):
        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox):
        (WebCore::RenderInline::dirtyLineBoxes):
        * rendering/RenderInline.h:
        Make borderBoundingBox() public so that call sites (here
        WebRenderNode.mm) can use tighter typing and benefit from the virtual
        function being final.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::getOverhang):
        * rendering/RenderSelectionInfo.cpp:
        (WebCore::RenderSelectionInfo::RenderSelectionInfo):
        * rendering/RenderText.cpp:
        (WebCore::isInlineFlowOrEmptyText):
        (WebCore::RenderText::previousCharacter):
        * rendering/RenderText.h:
        (WebCore::Text::renderer):
        * rendering/RenderTextFragment.h:
        (isType):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::write):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::addNode):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::containerIsRowOfLinks):
        (WebCore::TextAutosizer::measureDescendantTextWidth):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::shouldAddBorderPaddingMargin):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):

2014-10-07  Jer Noble  <jer.noble@apple.com>

        [Media] Expose AudioTracks in the "captions" menu.
        https://bugs.webkit.org/show_bug.cgi?id=137472

        Reviewed by Brent Fulgham.

        Test: media/video-controls-audiotracks-trackmenu.html

        If more than one AudioTrack is present in the video element, add those tracks to the
        captions menu:
        * English.lproj/mediaControlsLocalizedStrings.js:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.addVideoListeners):
        (Controller.prototype.removeVideoListeners):
        (Controller.prototype.handleAudioTrackChange):
        (Controller.prototype.handleAudioTrackAdd):
        (Controller.prototype.handleAudioTrackRemove):
        (Controller.prototype.updateCaptionButton):
        (Controller.prototype.buildCaptionMenu):
        (Controller.prototype.handleCaptionItemKeyUp):
        (Controller.prototype.audioTrackItemSelected):
        (Controller.prototype.focusSiblingAudioTrackItem):
        (Controller.prototype.handleAudioTrackItemKeyUp):

        Add support to MediaControlHost for retrieving the sorted audio track list, and the
        localized names for every audio track:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        (WebCore::MediaControlsHost::displayNameForTrack):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * page/CaptionUserPreferences.cpp:
        (WebCore::trackDisplayName):
        (WebCore::CaptionUserPreferences::displayNameForTrack):
        (WebCore::CaptionUserPreferences::sortedTrackListForMenu):
        * page/CaptionUserPreferences.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::audioTrackNoLabelText):
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::audioTrackNoLabelText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::audioTrackNoLabelText):

        Drive-by fix; do not recurse into AudioTrackPrivate->setEnabled() when the enabled
        state changes.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::enabledChanged):

        Fix possible out-of-bounds Vector access when adding tracks to a track list by
        sorting the list at insert time, rather than inserting into the track's reported
        position in the Vector:
        * html/track/AudioTrackList.cpp:
        (AudioTrackList::append):
        * html/track/VideoTrackList.cpp:
        (VideoTrackList::append):

        Correctly report the trackIndex of audio and video tracks from AVFoundation:
        * platform/graphics/avfoundation/AudioTrackPrivateAVF.h:
        (WebCore::AudioTrackPrivateAVF::trackIndex):
        (WebCore::AudioTrackPrivateAVF::setTrackIndex):
        (WebCore::AudioTrackPrivateAVF::AudioTrackPrivateAVF):
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        (WebCore::VideoTrackPrivateAVF::trackIndex):
        (WebCore::VideoTrackPrivateAVF::setTrackIndex):
        (WebCore::VideoTrackPrivateAVF::VideoTrackPrivateAVF):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):

2014-10-07  Christophe Dumez  <cdumez@apple.com>

        [WK2] Use is<>() / downcast<>() for DrawingAreaProxy subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137477

        Reviewed by Andreas Kling.

        Include TypeCastsCF.h now that the header was renamed.

        No new tests, no behavior change.

        * platform/cf/SharedBufferCF.cpp:

2014-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] TLS errors should take precedence over HTTP authentication
        https://bugs.webkit.org/show_bug.cgi?id=137300

        Reviewed by Sergio Villar Senin.

        Handle TLS errors in got-headers callback to make sure it happens
        before starting the authentication process.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::handleUnignoredTLSErrors): Refactored to receive the
        soup message.
        (WebCore::gotHeadersCallback): Return early and cancel the request in case of TLS errors.
        (WebCore::sendRequestCallback): Do not handle TLS errors here, the request should have already been
        cancelled at this point in case of TLS errors.

2014-10-07  Andy Estes  <aestes@apple.com>

        Fix a warning when passing an NSInteger to abs().
        https://bugs.webkit.org/show_bug.cgi?id=137480

        Reviewed by Mark Rowe.

        Use std::abs() instead, which is overloaded for both long (a.k.a. NSInteger) and int.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::layerDidReceiveError):
        (WebCore::CDMSessionMediaSourceAVFObjC::rendererDidReceiveError):

2014-10-06  Darin Adler  <darin@apple.com>

        Make StringView check the lifetime of the StringImpl it's created from
        https://bugs.webkit.org/show_bug.cgi?id=137202

        Reviewed by Anders Carlsson.

        * platform/graphics/TextRun.cpp: Update since TextRun's definition now
        uses a StringView.

2014-10-06  Andy Estes  <aestes@apple.com>

        [iOS] Fix remaining misuses of abs() and fabsf()
        https://bugs.webkit.org/show_bug.cgi?id=130947

        Reviewed by Simon Fraser.

        Fixed issues found when compiling with -Wabsolute-value.

        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimatorIOS::handleTouchEvent): Called abs() instead of fabsf for integral types. Explicitly
        cast the divisor to float in the call to atanf().
        * platform/ios/wak/WKView.mm:
        (_WKViewAutoresizeCoord): Explicitly cast origMarginsTotal to an int before calling abs(). Added a FIXME
        indicating the strange behavior when origMarginsTotal is in the range (0, 1) (as pointed out by Darin).

2014-10-06  Andreas Kling  <akling@apple.com>

        CanvasPattern always has an internal WebCore::Pattern.
        <https://webkit.org/b/137456>

        Use more Ref & PassRef for CanvasPattern and Pattern.

        Removed some impossible null checks in GraphicsContext that
        got exposed as compile errors with these changes.

        Reviewed by Anders Carlsson.

        * html/canvas/CanvasPattern.h:
        (WebCore::CanvasPattern::pattern):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::create):
        * platform/graphics/Pattern.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::useStrokeStyleToFill):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):

2014-10-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Restore previous scroll position using restoreViewState()
        https://bugs.webkit.org/show_bug.cgi?id=136999

        Reviewed by Benjamin Poulain.

        There are duplicating code paths to restore previous scroll position and scale factor in
        HistoryController::restoreScrollPositionAndViewState. EFL port has processed the two code paths.
        It causes wrong rendering update or scroll position change when previous page's scroll position
        is restored. Thus EFL port begins to use restoreViewState() to restore scroll position and scale factor.
        This patch is first step to support it.

        Additionally EFL port has supported to use ScrollingCoordinatorCoordinatedGraphics::requestScrollPositionUpdate()
        since r173785. So EFL port can use the requestScrollPositionUpdate() to restore scroll position on previous page
        instead of delegatedScrollRequested(). However setScrollPosition() can't be used there for now, because iOS port
        should call it when delegatesScrolling is disabled. On the other hand, EFL port supports it only when delegatesScrolling
        is enabled.

        Test covered by WKViewRestoreZoomAndScrollBackForward API test.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        EFL port only calls restoreViewState() to restore previous page's view state.

        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):

2014-10-06  Benjamin Poulain  <bpoulain@apple.com>

        Web Inspector: Highlighted selectors in Rules sidebar break with selectors that contain nested selector lists
        https://bugs.webkit.org/show_bug.cgi?id=137378

        Reviewed by Joseph Pecoraro.

        We should not update the parser's selectorRange when matching a nested selector list.

        To implement this with low risk of unbalanced start+end and good error recovery,
        I have wrapped the parsing of selector_list between a start/end function at the grammar
        level. Whenever the parser enter a nested selector list, m_nestedSelectorLevel goes up
        by one. Any time the parsing is currently in a nested selector list, we never update
        the selector ranges.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::markSelectorStart):
        (WebCore::CSSParser::markSelectorEnd):
        * css/CSSParser.h:
        (WebCore::CSSParser::startNestedSelectorList):
        (WebCore::CSSParser::endNestedSelectorList):

2014-10-06  Roger Fong  <roger_fong@apple.com>

        [Windows] Build fix for EWS bots.

        * WebCore.vcxproj/WebCoreGenerated.make: Make sure we always regenerate WebCore derived sources.

2014-10-06  Christophe Dumez  <cdumez@apple.com>

        Add is<>() / downcast<>() support for RenderObject subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137424

        Reviewed by Benjamin Poulain.

        Add is<>() / downcast<>() support for RenderObject subclasses, and
        get rid of IsRendererOfType traits struct as we can now rely on the
        TypeCastsTraits instead.

        toRender*() is still supported for most render objects because I did
        not want to remove all usages in this patch, to keep the size small.
        For now, only the MathML render objects were ported over to using
        is<>() / downcast<>(). Other render objects will be taken care of in
        follow-up patches and I will drop support for toRender*()
        incrementally.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMathFenceOperator):
        (WebCore::AccessibilityRenderObject::isMathSeparatorOperator):
        (WebCore::AccessibilityRenderObject::mathLineThickness):
        * dom/make_names.pl:
        (printTypeHelpers):
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::childrenChanged):
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::didAttachRenderers):
        (WebCore::MathMLTextElement::childrenChanged):
        * rendering/RenderAncestorIterator.h:
        (WebCore::lineageOfType):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.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/RenderInline.h:
        * rendering/RenderIterator.h:
        (WebCore::isRendererOfType):
        (WebCore::RenderTraversal::firstChild):
        (WebCore::RenderTraversal::lastChild):
        (WebCore::RenderTraversal::nextSibling):
        (WebCore::RenderTraversal::previousSibling):
        (WebCore::RenderTraversal::findAncestorOfType):
        * 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/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject>): Deleted.
        * 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/RenderTextFragment.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::unembellishedOperator):
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRadicalOperator.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::baseWrapper):
        (WebCore::RenderMathMLRoot::radicalWrapper):
        (WebCore::RenderMathMLRoot::indexWrapper):
        (WebCore::RenderMathMLRoot::radicalOperator):
        (WebCore::RenderMathMLRootWrapper::removeChild):
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::updateOperatorProperties):
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::addChildInternal):
        (WebCore::RenderMathMLScripts::removeChildInternal):
        (WebCore::RenderMathMLScripts::unembellishedOperator):
        (WebCore::RenderMathMLScripts::layout):
        (WebCore::RenderMathMLScriptsWrapper::addChildInternal):
        (WebCore::RenderMathMLScriptsWrapper::addChild):
        (WebCore::RenderMathMLScriptsWrapper::removeChildInternal):
        (WebCore::RenderMathMLScriptsWrapper::removeChild):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/mathml/RenderMathMLToken.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::unembellishedOperator):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGViewportContainer.h:

2014-10-06  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for ScrollingTreeNode subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137451

        Reviewed by Tim Horton.

        Use is<>() / downcast<>() for ScrollingTreeNode subclasses.

        No new tests, no behavior change.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeOverflowScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange):

2014-10-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comment on r174297.
        https://bugs.webkit.org/show_bug.cgi?id=137355

        Unreviewed.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::stringView):

2014-10-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed merge fix for r174279.
        https://bugs.webkit.org/show_bug.cgi?id=137097

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::convertSVGToOTFFont):

2014-10-06  David Hyatt  <hyatt@apple.com>

        REGRESSION (Simple Line Layout): Inline block baselines computed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=137461

        Reviewed by Simon Fraser.

        Added fast/inline-block/simple-line-layout.html

        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::computeFlowFirstLineBaseline):
        (WebCore::SimpleLineLayout::computeFlowLastLineBaseline):
        Fix the baseline computation functions in simple line layout to
        use lineCount rather than runCount.

2014-10-06  Ada Chan  <adachan@apple.com>

        Add ChromeClient::isPlayingAudioDidChange().
        https://bugs.webkit.org/show_bug.cgi?id=137220

        Reviewed by Jer Noble.

        This is called when the Page's m_isPlayingAudio changes.

        No new tests, no behavior change.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::isPlayingAudioDidChange):
        * page/Page.cpp:
        (WebCore::Page::updateIsPlayingAudio):

2014-10-06  Benjamin Poulain  <benjamin@webkit.org>

        Unreviewed, rolling out r174336.

        Mozilla's Dromaeo still relies on the deprecated function.

        Reverted changeset:

        "Add a deprecation warning for Element.webkitMatchesSelector"
        https://bugs.webkit.org/show_bug.cgi?id=137417
        http://trac.webkit.org/changeset/174336

2014-10-06  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CryptoKey subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137436

        Reviewed by Ryosuke Niwa.

        Use is<>() / downcast<>() for CryptoKey subclasses.

        No new tests, no behavior change.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::addJWKAlgorithmToJSON):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        * crypto/CryptoKey.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmAES_KW::encryptForWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::decryptForUnwrapKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        * 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):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::isCryptoKeyAES): Deleted.
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::isCryptoKeyHMAC): Deleted.
        * crypto/keys/CryptoKeyRSA.h:
        (WebCore::isCryptoKeyRSA): Deleted.

2014-10-06  Simon Fraser  <simon.fraser@apple.com>

        Some compositing logic cleanup
        https://bugs.webkit.org/show_bug.cgi?id=133060

        Reviewed by Zalan Bujtas.

        Move compositing-related code from RenderLayer::styleChanged() to
        RenderLayerCompositor::layerStyleChanged(). Combine various tests
        (many clip-related) for changes that require layer rebuilding into 
        styleChangeRequiresLayerRebuild().
        
        Remove code that calls setBackingNeedsRepaint() after filters change
        between being composited or not; I verified that existing "repaint after
        style change" code takes care those repaints.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::checkIfDescendantClippingContextNeedsUpdate): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::checkIfDescendantClippingContextNeedsUpdate):
        (WebCore::styleChangeRequiresLayerRebuild):
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        * rendering/RenderLayerCompositor.h:

2014-10-06  Ada Chan  <adachan@apple.com>

        Fix the iOS build after https://trac.webkit.org/changeset/174353.

        * platform/audio/ios/AudioDestinationIOS.h:

2014-10-06  Ada Chan  <adachan@apple.com>

        Implement Page::isPlayingAudio().
        https://bugs.webkit.org/show_bug.cgi?id=137218

        Reviewed by Eric Carlson.

        - Add a hasMediaCharacteristics() method to MediaSession. There are three characteristics:
        audible, visual, and legible. MediaSession gets the media characteristics information from
        its MediaSessionClient.
        - Add a mediaStateDidChange() method to MediaSessionClient that MediaSession can call when its
        state changes.
        - Each Document keeps a set of MediaSessions it contains. When that set changes, or when a MediaSession
        changes state, or when its characteristics change, Document::updateIsPlayingAudio() is called. That method
        iterates through all its MediaSessions to check if the overall isPlayingAudio state has changed in the Document.
        - Each Page caches its overall isPlayingAudio state. Whenever a Document's isPlayingAudio state changes,
        it calls Page::updateIsPlayingAudio() which iterates through its frames' documents to calculate its
        overall isPlayingAudio state.

        No new tests, no behavior change.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        Initialize m_isPlayingAudio.
        (WebCore::Document::registerMediaSession):
        Add the MediaSession to m_mediaSessions. Call updateIsPlayingAudio().
        (WebCore::Document::unregisterMediaSession):
        Remove the MediaSession from m_mediaSessions. Call updateIsPlayingAudio().
        (WebCore::Document::updateIsPlayingAudio):
        Go through all the MediaSessions in this Document and check if any has the Audible characteristic
        and is playing. If the overall isPlayingAudio state changes, call Page::updateIsPlayingAudio().
        * dom/Document.h:
        (WebCore::Document::isPlayingAudio):

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument):
        Call Document::registerMediaSession().
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        Call Document::unregisterMediaSession().
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        Call Document::updateIsPlayingAudio().
        (WebCore::HTMLMediaElement::stop):
        Call MediaSession::clientWillPausePlayback() so the MediaSession's state can be set back to Paused.
        (WebCore::HTMLMediaElement::hasMediaCharacteristics):
        Call hasAudio() to check if the HTMLMediaElement has the Audible characteristic. Call hasVideo()
        to check if it has the Visual characteristic. Call hasClosedCaptions() to check if it has the
        Legible characteristic.
        (WebCore::HTMLMediaElement::mediaStateDidChange):
        Call Document::updateIsPlayingAudio().
        * html/HTMLMediaElement.h:

        * page/Page.cpp:
        (WebCore::Page::Page):
        Initialize m_isPlayingAudio.
        (WebCore::Page::updateIsPlayingAudio):
        Iterate through all its frames' documents to check if any has audio playing. If the overall isPlayingAudio
        state has changed, update m_isPlayingAudio.
        * page/Page.h:
        (WebCore::Page::isPlayingAudio):

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::setState):
        If the MediaSession's state has changed, call Document::updateIsPlayingAudio().
        (WebCore::MediaSession::hasMediaCharacteristics):
        Call MediaSessionClient::hasMediaCharacteristics().
        * platform/audio/MediaSession.h:
        (WebCore::MediaSessionClient::mediaStateDidChange):

        * platform/audio/mac/AudioDestinationMac.h:
        AudioDestination only has the Audible characteristic.

2014-10-06  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for ScrollingTree subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137449

        Reviewed by Ryosuke Niwa.

        Use is<>() / downcast<>() for ScrollingTree subclasses.

        No new tests, no behavior change.

        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2014-10-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix aftr r174347.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp: Use correct build
        macro to prevent build break when ENCRYPTED_MEDIA_V2 is not enabled.

2014-10-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Project file gardening.

        * WebCore.vcxproj/WebCore.vcxproj.filters: Move EditorWin.cpp and
          MediatTimeAVFoundation to proper folder locations in project.

2014-10-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Extend AVFoundationCF Media Implementation
        https://bugs.webkit.org/show_bug.cgi?id=137409

        Reviewed by Eric Carlson.

        This code is not yet being built and tested by our system. Appropriate
        tests will be activated when we enable the build.

        Most of this patch involves correcting some misuse of the AVFoundationCF API.
        1. It is never appropriate in AVCF to pass a null CFErrorRef; instead you must
           pass a CFErrorRef with error type kCFURLErrorUnknown.
        2. Because of the asynchronous way we handle the request/response, it is possible
           for AVCF to make two AVCF requests while negotiating the key exchange.

        * platform/graphics/avfoundation/cf/AVFoundationCFSoftLinking.h: Add
        missing declaration.
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest): Tighten up scope
        of 'underlyingError'.
        (WebCore::CDMSessionAVFoundationCF::update): Add call to complete the
        loading process.
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::label): Handle null titles CFArray
        found during testing.
        (WebCore::InbandTextTrackPrivateAVCF::language): Ditto for a null locale.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::registerMediaEngine): Add support
        for the new 'supportsKeySystem' method.
        (WebCore::MediaPlayerPrivateAVFoundationCF::createContextVideoRenderer): Add
        assertion for mainThread.
        (WebCore::MediaPlayerPrivateAVFoundationCF::destroyContextVideoRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::createVideoLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::destroyVideoLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::createAVPlayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::createAVPlayerItem): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformSetVisible): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::paintCurrentFrameInContext): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::paint): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsKeySystem): Added.
        (WebCore::MediaPlayerPrivateAVFoundationCF::sizeChanged): Add assertion that this
        is being called on the main thread.
        (WebCore::MediaPlayerPrivateAVFoundationCF::processMediaSelectionOptions): Handle
        the allows empty media selection properly based on test behavior.
        (WebCore::AVFWrapper::AVFWrapper): Initialize resource loader callback structure
        when building with AVFOUNDATION_LOADER_DELEGATE.
        (WebCore::AVFWrapper::createAssetForURL): Use AVFWrapper's loader callback struct,
        rather than passing the address of a temporary value.
        (WebCore::AVFWrapper::processNotification): Stop using the deprecated 
        'dispatch_get_current_queue' function.
        (WebCore::AVFWrapper::processCue): Ditto.
        (WebCore::AVFWrapper::legibleOutputCallback): Ditto.
        (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource): Pass a valid CFError
        object; nullptr is not allowed as an argument to the "...FinishedLoadingWithError"
        method.
        (WebCore::AVFWrapper::shouldWaitForLoadingOfResource): Add support for multiple
        in-flight requests.
        (WebCore::AVFWrapper::platformLayer): Assert we are on the main thread.
        (WebCore::AVFWrapper::setRequestForKey): Add support for multiple in-flight requests.
        (WebCore::AVFWrapper::takeRequestForKeyURI): Ditto.
        (WebCore::LayerClient::platformCALayerLayoutSublayersOfLayer): Ditto.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp: Make sure we pass
        valid CFError objects, rather than nullptr.

2014-10-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Performance: Certain Web site causes Safari to hang completely while entering form data
        https://bugs.webkit.org/show_bug.cgi?id=137420

        Reviewed by Mario Sanchez Prada.

        If a website has multiple nested tables that are not "accessibility" tables, the performance of accessibility slows to a crawl because:
          1) We are re-computing accessibilityIsIgnored many times.
               As a solution, we can enable the isIgnoredCache when updating children.
          2) When asking if an object isTableCell, we'd go up the parent chain, asking each of those parents the same question, which exploded into calling this many times.
              As a solution, I've changed our determination of isTableCell to instead check if the parent is an accessibiltyTable which should be much faster.

        No new functionality. Existing tests cover changes.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateChildrenIfNecessary):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::isTableCell):

2014-10-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, touch testing/Internals.idl to try to fix Windows EWS after r174315.

        * testing/Internals.idl: Remove unnecessary whitespaces.

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for ScrollingCoordinator / ScrollingStateNode subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137440

        Reviewed by Ryosuke Niwa.

        Use is<>() / downcast<>() for ScrollingCoordinator / ScrollingStateNode subclasses.

        No new tests, no behavior change.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::updateAfterChildren):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateAfterChildren):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateAfterChildren):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CachedRawResource
        https://bugs.webkit.org/show_bug.cgi?id=137439

        Reviewed by Ryosuke Niwa.

        Use is<>() / downcast<>() for CachedRawResource.

        No new tests, no behavior change.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::switchClientsToRevalidatedResource):
        * loader/cache/CachedRawResource.h:
        (isType):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestMainResource):

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for TextTrack subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137438

        Reviewed by Ryosuke Niwa.

        Use is<>() / downcast<>() for TextTrack subclasses.

        No new tests, no behavior change.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/track/InbandTextTrack.h:
        (isType):
        * html/track/LoadableTextTrack.h:
        (isType):
        * html/track/TextTrackList.cpp:
        (TextTrackList::getTrackIndex):
        (TextTrackList::append): Deleted.

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CryptoKeyData subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137437

        Reviewed by Ryosuke Niwa.

        Use is<>() / downcast<>() for CryptoKeyData subclasses.

        No new tests, no behavior change.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::serialize):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        * crypto/CryptoKeyData.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::isCryptoKeyDataOctetSequence): Deleted.
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        (WebCore::isCryptoKeyDataRSAComponents): Deleted.
        * crypto/keys/CryptoKeySerializationRaw.cpp:
        (WebCore::CryptoKeySerializationRaw::serialize):

2014-10-05  Benjamin Poulain  <bpoulain@apple.com>

        Add a deprecation warning for Element.webkitMatchesSelector
        https://bugs.webkit.org/show_bug.cgi?id=137417

        Reviewed by Christophe Dumez.

        Many scripts have assumed that the unprefixed version of ElementwebkitMatchesSelector
        would be Element.matchesSelector. Feature detection scripts too often test
        for Element.matchesSelector instead of Element.matches before calling Element.webkitMatchesSelector.

        This patch add a deprecation warning for Element.webkitMatchesSelector with the hope
        that it will push the adoption of the unprefixed version.

        * dom/Element.cpp:
        (WebCore::Element::webkitMatchesSelector):
        * dom/Element.h:
        * dom/Element.idl:

2014-10-05  Benjamin Poulain  <benjamin@webkit.org>

        Element.matches()'s argument is not supposed to be optional
        https://bugs.webkit.org/show_bug.cgi?id=137427

        Reviewed by Christophe Dumez.

        The argument was marked as optional, it is not supposed to:
        https://dom.spec.whatwg.org/#interface-element

        Also update the webkit-prefixed version: webkitMatchesSelector().

        Tests: fast/dom/SelectorAPI/closest-definition.html
               fast/dom/SelectorAPI/closest-null-undefined.html
               fast/dom/SelectorAPI/matches-definition.html
               fast/dom/SelectorAPI/matches-null-undefined.html

        * dom/Element.idl:

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CachedResource subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137431

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for CachedResource subclasses.

        No new tests, no behavior change.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::switchClientsToRevalidatedResource):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::reloadImagesIfNotDeferred):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeImageFromCache):

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for StyleSheet subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137429

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for StyleSheet subclasses.

        No new tests, no behavior change.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * css/CSSStyleSheet.h:
        (isType):
        * css/StyleSheet.h:
        * dom/Document.cpp:
        (WebCore::Document::applyXSLTransform):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        * xml/XSLStyleSheet.h:
        (isType):

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CryptoAlgorithmParameters subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137432

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for CryptoAlgorithmParameters subclasses.

        No new tests, no behavior change.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * 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:

2014-10-05  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS8: Crash at -[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]
        https://bugs.webkit.org/show_bug.cgi?id=137289

        Reviewed by Mario Sanchez Prada.

        Casting a NSInteger to an unsigned can bypass the check we were hoping to achieve, 
        because size_t is not the same as unsigned.

        Test: platform/ios-sim/accessibility/out-of-bounds-child-access.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for ElementData subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137430

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for ElementData subclasses.

        No new tests, no behavior change.

        * dom/Element.cpp:
        (WebCore::Element::cloneAttributesFromElement):
        (WebCore::Element::createUniqueElementData):
        * dom/ElementData.cpp:
        (WebCore::ElementData::destroy):
        * dom/ElementData.h:
        (WebCore::ElementData::length):
        (WebCore::ElementData::attributeBase):
        (WebCore::ElementData::presentationAttributeStyle):
        (WebCore::ElementData::attributesIterator):
        (WebCore::ElementData::findAttributeByName):
        (isType):

2014-10-05  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] Fix build when DRAG_SUPPORT is disabled
        https://bugs.webkit.org/show_bug.cgi?id=137361

        Reviewed by Carlos Garcia Campos.

        Flag out unbuildable code without DRAG_SUPPORT.

        * platform/gtk/GtkDragAndDropHelper.cpp:
        * platform/gtk/GtkDragAndDropHelper.h:

2014-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not generate a symlink in derived sources for every header in WebCore/bindings/gobject
        https://bugs.webkit.org/show_bug.cgi?id=137389

        Reviewed by Martin Robinson.

        We only need a symlink for static sources that are included in
        public generated headers, because they are added with as
        <webkitdom/WebKitDOMFoo.h> so they need to be inside a webkitdom
        directory. Also use proper targets and commands to create the
        symlinks only when needed instead of for every build.

        * PlatformGTK.cmake:

2014-10-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Arabic forms are not substituted correctly
        https://bugs.webkit.org/show_bug.cgi?id=137092

        Reviewed by Darin Adler.

        Tests: svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
               svg/custom/glyph-selection-arabic-forms.svg

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendArabicReplacementSubtable): Invoked for each of the three
        Arabic form substitutions.
        (WebCore::SVGToOTFFontConverter::appendGSUBTable): OpenType "Advanced Typographic Table":
        "Glyph substitution data"
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Re-order the m_codepointsToIndicesMap
        to prefer isolated forms of glyphs.
        (WebCore::SVGToOTFFontConverter::convertSVGToOTFFont): Append the GSUB table.
        (WebCore::calculateChecksum): Deleted.

2014-10-04  Dhi Aurrahman  <diorahman@rockybars.com>

        Implement Element.closest() API
        https://bugs.webkit.org/show_bug.cgi?id=137418

        Reviewed by Benjamin Poulain.

        Implement Element.closest() API as specified in [1].

        [1]: https://dom.spec.whatwg.org/#dom-element-closest

        Tests: fast/selectors/closest-general.html
               fast/selectors/closest-scope.html

        * dom/Element.cpp:
        (WebCore::Element::closest):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorClosest):
        (WebCore::SelectorDataList::closest):
        * dom/SelectorQuery.h:
        (WebCore::SelectorQuery::closest):

2014-10-04  Brian J. Burg  <burg@cs.washington.edu>

        Unreviewed, rolling out r174319.

        Causes assertions in fast/profiler tests. Needs nontrivial
        investigation, will take offline.

        Reverted changeset:

        "Web Inspector: timelines should not count time elapsed while
        paused in the debugger"
        https://bugs.webkit.org/show_bug.cgi?id=136351
        http://trac.webkit.org/changeset/174319

2014-10-04  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: timelines should not count time elapsed while paused in the debugger
        https://bugs.webkit.org/show_bug.cgi?id=136351

        Reviewed by Timothy Hatcher.

        To avoid counting time elapsed while the debugger is paused, timeline records should
        keep track of time elapsed since the start of timeline capturing, rather than wall clock
        timestamps. We can easily compute elapsed time by sharing Stopwatch instance among
        all timeline record-generating code. The stopwatch is paused while the debugger is paused,
        so subsequent time measurements will not include time elapsed while the debugger is paused.

        Agents use the shared stopwatch to generate timestamps if the timeline agent is active
        (i.e., a timeline recording is being captured). If not, use a zero timestamp since the timing data is only revealed through the Timeline interface.

        This refactoring is safe because start and end times are only used to graph records; the
        timestamp's actual value is irrelevant and is not displayed in the user interface. Date
        timestamps are still included with network-related records as part of their header data.

        No new tests, because we cannot reliably test timing changes induced by debugger pauses.
        It is possible for records to accrue time before the debugger pauses or after it resumes.

        * inspector/InspectorCSSAgent.cpp: Remove unused include.
        * inspector/InspectorPageAgent.cpp: Use timestamps from the shared stopwatch.
        (WebCore::InspectorPageAgent::timestamp):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp: Use timestamps from the shared stopwatch.
        (WebCore::InspectorResourceAgent::timestamp):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveData):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrameError):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp: Add calls to reset, start, and stop the stopwatch.
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::startProfiling):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didPause):
        (WebCore::InspectorTimelineAgent::didContinue):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::timestamp):
        (WebCore::TimelineTimeConverter::reset): Deleted.
        * inspector/InspectorTimelineAgent.h: Make timestamp() public, and remove old timepieces.
        (WebCore::TimelineTimeConverter::TimelineTimeConverter): Deleted.
        (WebCore::TimelineTimeConverter::fromMonotonicallyIncreasingTime): Deleted.
        (WebCore::InspectorTimelineAgent::timeConverter): Deleted.
        * inspector/TimelineRecordFactory.cpp:

2014-10-04  Tim Horton  <timothy_horton@apple.com>

        Make it possible to test page overlays
        https://bugs.webkit.org/show_bug.cgi?id=137339

        Reviewed by Dan Bernstein.

        Tests: pageoverlay/overlay-installation.html
               pageoverlay/overlay-large-document-scrolled.html
               pageoverlay/overlay-large-document.html

        Do some initial work to make page overlays testable.
        There are many more tests to be written, but this lays the groundwork.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters:
        * CMakeLists.txt:
        Add MockPageOverlayClient.

        * platform/graphics/GraphicsLayer.h:
        * page/PageOverlayController.h:
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::shouldSkipLayerInDump):
        Don't skip PageOverlayController-owned layers in the layer tree dump if the
        layerTreeAsText behavior says that we should include them.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::dumpChildren):
        
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::shouldSkipLayerInDump):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldSkipLayerInDump):
        * rendering/RenderLayerBacking.h:
        Pass the LayerTreeAsTextBehavior through shouldSkipLayerInDump.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        Uninstall all page overlays when resetting to a consistent state.

        (WebCore::Internals::installMockPageOverlay):
        (WebCore::Internals::pageOverlayLayerTreeAsText):
        Expose two new internals functions.
        installMockPageOverlay takes "view" or "document", allowing script
        to choose the appropriate overlay type.
        pageOverlayLayerTreeAsText dumps both view and document-relative
        overlays, from each overlay container layer.

        * testing/Internals.h:
        * testing/Internals.idl:
        Fix some typos.

        * testing/MockPageOverlayClient.cpp: Added.
        (WebCore::MockPageOverlayClient::shared):
        (WebCore::MockPageOverlayClient::MockPageOverlayClient):
        (WebCore::MockPageOverlayClient::installOverlay):
        (WebCore::MockPageOverlayClient::uninstallAllOverlays):
        (WebCore::MockPageOverlayClient::layerTreeAsText):
        (WebCore::MockPageOverlayClient::pageOverlayDestroyed):
        (WebCore::MockPageOverlayClient::willMoveToPage):
        (WebCore::MockPageOverlayClient::didMoveToPage):
        When the overlay is parented, mark it as needing repaint.
        Future tests might want to test overlays without content,
        but for now this is a reasonable default behavior.

        (WebCore::MockPageOverlayClient::drawRect):
        Paint the overlay rects as described in the LayoutTests ChangeLog.

        (WebCore::MockPageOverlayClient::mouseEvent):
        (WebCore::MockPageOverlayClient::didScrollFrame):
        (WebCore::MockPageOverlayClient::copyAccessibilityAttributeStringValueForPoint):
        (WebCore::MockPageOverlayClient::copyAccessibilityAttributeBoolValueForPoint):
        (WebCore::MockPageOverlayClient::copyAccessibilityAttributeNames):

        * testing/MockPageOverlayClient.h: Added.

2014-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move DragController::createFragmentFromDragData implementation to the editor
        https://bugs.webkit.org/show_bug.cgi?id=136819

        Reviewed by Darin Adler.

        Make Editor::webContentFromPasteboard() common to all ports and
        add a implementation for every port.

        * PlatformWin.cmake: Add new files to compilation.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::pasteWithPasteboard): Move to EditorWin.cpp
        since this is only used by windows port.
        * editing/Editor.h:
        * editing/efl/EditorEfl.cpp:
        (WebCore::Editor::webContentFromPasteboard):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::webContentFromPasteboard):
        * editing/win/EditorWin.cpp: Added.
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::webContentFromPasteboard):
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData): Use the editor instead of
        createFragmentFromDragData() that has been removed. Also made this
        method a static funtion again.
        * page/DragController.h:
        * page/efl/DragControllerEfl.cpp: Remove createFragmentFromDragData().
        * page/gtk/DragControllerGtk.cpp: Ditto.
        * page/mac/DragControllerMac.mm: Ditto.
        * page/win/DragControllerWin.cpp: Ditto.
        * platform/Pasteboard.h:
        (WebCore::Pasteboard::dragDataMap): Add a getter for m_dragDataMap
        as required by Editor::webContentFromPasteboard for windows.

2014-10-04  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CSS StyleProperties
        https://bugs.webkit.org/show_bug.cgi?id=137398

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for CSS StyleProperties subclasses.

        No new tests, no behavior change.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::immutableCopyIfNeeded):
        (WebCore::MutableStyleProperties::MutableStyleProperties):
        (WebCore::StyleProperties::hasCSSOMWrapper):
        * css/StyleProperties.h:
        (WebCore::StyleProperties::PropertyReference::propertyMetadata):
        (WebCore::StyleProperties::PropertyReference::propertyValue):
        (WebCore::StyleProperties::propertyCount):
        (WebCore::StyleProperties::deref):
        (WebCore::StyleProperties::findPropertyIndex):
        (isType):
        (WebCore::toMutableStyleProperties): Deleted.
        (WebCore::toImmutableStyleProperties): Deleted.
        * css/StyleRule.cpp:
        (WebCore::StyleRule::mutableProperties):
        (WebCore::StyleRulePage::mutableProperties):
        (WebCore::StyleRuleFontFace::mutableProperties):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::mutableProperties):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::ensureMutableInlineStyle):
        (WebCore::StyledElement::setInlineStyleFromString):

2014-10-04  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Clean up GraphicsLayerTextureMapper::prepareBackingStoreIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=137263

        Reviewed by Darin Adler.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStoreIfNeeded): Clean up
        the method a bit. When the backing store will not be in use the change mask
        should only get updated if there was a backing store present beforehand.

2014-10-04  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Remove QDoc comments in GraphicsLayerTextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=137264

        Reviewed by Andreas Kling.

        Remove all the QDoc comments in the class that were
        left over by the Qt port.

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

2014-10-03  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CSSValue subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137381

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for CSSValue subclasses.

        No new tests, no behavior change.

        * css/CSSAspectRatioValue.h:
        * css/CSSBorderImageSliceValue.h:
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        * css/CSSCalculationValue.h:
        * css/CSSCanvasValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::ComputedStyleExtractor::propertyMatches):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageKnownToBeOpaque):
        * css/CSSCrossfadeValue.h:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        (WebCore::CSSCursorImageValue::cachedOrPendingImage):
        (WebCore::CSSCursorImageValue::isSVGCursor):
        * css/CSSCursorImageValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontFeatureValue.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSFontValue.h:
        * css/CSSFunctionValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        (WebCore::CSSGradientValue::gradientWithStylesResolved):
        * css/CSSGradientValue.h:
        * css/CSSGridLineNamesValue.h:
        * css/CSSGridTemplateAreasValue.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::isFixedSize):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        (WebCore::CSSImageGeneratorValue::isPending):
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque):
        (WebCore::CSSImageGeneratorValue::loadSubimages):
        (WebCore::CSSImageGeneratorValue::subimageIsPending):
        (WebCore::CSSImageGeneratorValue::cachedImageForCSSValue):
        * css/CSSImageGeneratorValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::fillImageSet):
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.h:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.h:
        * css/CSSLineBoxContainValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::addFillValue):
        (WebCore::CSSParser::addAnimationValue):
        (WebCore::CSSParser::parse3ValuesFillPosition):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::gridMissingGridPositionValue):
        (WebCore::CSSParser::parseGridTemplateRowsAndAreas):
        (WebCore::CSSParser::parseBasicShapeCircle):
        (WebCore::CSSParser::parseBasicShapeEllipse):
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::CSSParser::parseDeprecatedRadialGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::createFontFaceRule):
        * css/CSSPrimitiveValue.h:
        * css/CSSReflectValue.h:
        * css/CSSShadowValue.h:
        * css/CSSTimingFunctionValue.h:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillAttachment):
        (WebCore::CSSToStyleMap::mapFillClip):
        (WebCore::CSSToStyleMap::mapFillComposite):
        (WebCore::CSSToStyleMap::mapFillBlendMode):
        (WebCore::CSSToStyleMap::mapFillOrigin):
        (WebCore::CSSToStyleMap::mapFillRepeatX):
        (WebCore::CSSToStyleMap::mapFillRepeatY):
        (WebCore::CSSToStyleMap::mapFillSize):
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):
        (WebCore::CSSToStyleMap::mapFillMaskSourceType):
        (WebCore::CSSToStyleMap::mapAnimationDelay):
        (WebCore::CSSToStyleMap::mapAnimationDirection):
        (WebCore::CSSToStyleMap::mapAnimationDuration):
        (WebCore::CSSToStyleMap::mapAnimationFillMode):
        (WebCore::CSSToStyleMap::mapAnimationIterationCount):
        (WebCore::CSSToStyleMap::mapAnimationName):
        (WebCore::CSSToStyleMap::mapAnimationPlayState):
        (WebCore::CSSToStyleMap::mapAnimationProperty):
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
        (WebCore::CSSToStyleMap::mapNinePieceImage):
        (WebCore::CSSToStyleMap::mapNinePieceImageSlice):
        (WebCore::CSSToStyleMap::mapNinePieceImageQuad):
        (WebCore::CSSToStyleMap::mapNinePieceImageRepeat):
        * css/CSSUnicodeRangeValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::isImplicitInitialValue):
        (WebCore::CSSValue::addSubresourceStyleURLs):
        (WebCore::CSSValue::hasFailedOrCanceledSubresources):
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        * css/CSSValueList.h:
        (WebCore::CSSValueListInspector::CSSValueListInspector):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFontFamily::applyValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyTextDecorationSkip::applyValue):
        (WebCore::ApplyPropertyMarqueeIncrement::applyValue):
        (WebCore::ApplyPropertyMarqueeRepetition::applyValue):
        (WebCore::ApplyPropertyMarqueeSpeed::applyValue):
        (WebCore::ApplyPropertyTextUnderlinePosition::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyValue):
        (WebCore::ApplyPropertyWordSpacing::applyValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore::ApplyPropertyTextEmphasisPosition::applyValue):
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):
        (WebCore::ApplyPropertyImageResolution::applyValue):
        (WebCore::ApplyPropertyTextIndent::applyValue):
        * css/MediaList.cpp:
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::compareAspectRatioValue):
        (WebCore::numberValue):
        (WebCore::orientationMediaFeatureEval):
        (WebCore::evalResolution):
        (WebCore::device_pixel_ratioMediaFeatureEval):
        (WebCore::resolutionMediaFeatureEval):
        (WebCore::computeLength):
        (WebCore::view_modeMediaFeatureEval):
        (WebCore::pointerMediaFeatureEval):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::strokeDashArrayToCSSValueList):
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/SourceSizeList.cpp:
        (WebCore::computeLength):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getLayeredShorthandValue):
        * css/StyleResolver.cpp:
        (WebCore::extractDirectionAndWritingMode):
        (WebCore::createGridTrackSize):
        (WebCore::createGridTrackList):
        (WebCore::createGridPosition):
        (WebCore::StyleResolver::parseSnapCoordinate):
        (WebCore::StyleResolver::parseSnapPoints):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::styleImage):
        (WebCore::StyleResolver::generatedOrPendingFromValue):
        (WebCore::StyleResolver::createFilterOperations):
        * css/TransformFunctions.cpp:
        (WebCore::transformsForValue):
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::getViewportArgumentValue):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * css/WebKitCSSTransformValue.h:
        (WebCore::toWebKitCSSTransformValue): Deleted.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::computedFontSize):
        * editing/EditingStyle.cpp:
        (WebCore::identifierForStyleProperty):
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle):
        (WebCore::HTMLTextDecorationEquivalent::valueIsPresentInStyle):
        (WebCore::cssValueToRGBA):
        (WebCore::EditingStyle::extractFontSizeDelta):
        (WebCore::EditingStyle::textDirection):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::EditingStyle::mergeStyle):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        (WebCore::EditingStyle::legacyFontSize):
        (WebCore::EditingStyle::textDirectionForSelection):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::diffTextDecorations):
        (WebCore::fontWeightIsBold):
        (WebCore::isTransparentColorValue):
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList):
        * editing/cocoa/HTMLConverter.mm:
        (stringFromCSSValue):
        (HTMLConverterCaches::floatPropertyValueForNode):
        (HTMLConverterCaches::colorPropertyValueForNode):
        * editing/markup.cpp:
        (WebCore::propertyMissingOrEqualToNone):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForProperties):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle):
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::cssImageValue):
        (WebCore::StylePendingImage::cssCursorImageValue):
        (WebCore::StylePendingImage::cssImageSetValue):
        * svg/SVGColor.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGPaint.h:

2014-10-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up interface to Font::expansionOpportunityCount()
        https://bugs.webkit.org/show_bug.cgi?id=137355

        Reviewed by Dean Jackson.

        There are two overloads of Font::expansionOpportunityCount() which perform the same
        operation. One overload takes a UChar*, the other takes an LChar*, and they both
        take a length. This is the abstraction that StringView was designed to be. Instead
        of forcing each caller to take a different overload based on if their data is
        8 bit or not, allow the caller to construct a StringView and pass that into
        Font::expansionOpportunityCount() instead of a raw pointer/length.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::Font::expansionOpportunityCountInternal): Original two functions,
        renamed.
        (WebCore::Font::expansionOpportunityCount): Takes a StringView, calls 
        expansionOpportunityCountInternal().
        * platform/graphics/Font.h: Update signatures.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Use new signature to
        Font::expansionOpportunityCount().
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment): Ditto.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::stringView): Accessor to encapsulate character pointer
        and length.
        * rendering/RenderText.h: Signature of new accessor.

2014-10-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix for MSVC 2013 SP 3.

        The std::array initializer is not fully implemented in SP3 and causes a
        build error.

        * platform/graphics/transforms/AffineTransform.cpp: Use old style assignment
        initialization for MSVC builds until this bug is fixed.

2014-10-03  Tim Horton  <timothy_horton@apple.com>

        WKWebView snapshot of Daring Fireball has the wrong color in the obscured inset
        https://bugs.webkit.org/show_bug.cgi?id=137383
        <rdar://problem/18535439>

        Reviewed by Sam Weinig.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        Use documentBackgroundColor instead of baseBackgroundColor if backgroundShouldExtendBeyondPage is set.

2014-10-03  Dean Jackson  <dino@apple.com>

        webkit-appearance: default-button styling does not set the button font color to white
        https://bugs.webkit.org/show_bug.cgi?id=137399
        rdar://problem/17788616

        Reviewed by Dave Hyatt.

        When a button is styled with -webkit-appearance: default-button, it should
        use the CSSValueActivebuttontext value for its text color when the window
        is active, and the normal value when the window is inactive.

        Since activating (focus/blur) windows doesn't cause a style recalculation, this
        is applied as a paint-time operation. However, the render tree children that
        paint the text don't know that they are contained within a RenderButton
        and that the button is a default type. So I added an inherited flag, similar
        to what we use for visited links, to remember if we're in a button. And then
        computeTextPaintStyle chooses the correct value.

        We can't test this because our LayoutTest system doesn't have
        an active window, and thus the default button renders like a normal
        button. This should cause no regressions though. Also, the appearance is
        protected behind an SPI (or Setting), so this is not exposed to the Web.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Set the flag if we're inside a default button.
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle): If we're in a default button inside an active window,
        use the CSSValueActivebuttontext color.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle): Add and expose the new inherited flag: ._insideDefaultButton.
        (WebCore::RenderStyle::changeRequiresRepaint): Ditto.
        * rendering/style/RenderStyle.h: Ditto.

2014-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Support non-BMP codepoints
        https://bugs.webkit.org/show_bug.cgi?id=137097

        Reviewed by Darin Adler.

        This patch has two pieces:

        1) Moves write16(), overwrite32() and overwrite16() inside SVGToOTFFontConverter. This
        is so that we don't have to keep passing around references to m_result everywhere. Instead,
        put the output vector inside the class as an instance member variable. In addition, rename
        write32() and write16() to append32() and append16(), and provide a copy of append32 inside
        SVGToOTFFontConverter.

        2) Change the "Codepoint" typedef to be a String, and rename it to Codepoints. This is so that
        we can implement ligatures later on. Update all the places that use this variable to work with
        a String of multiple codepoints.

        This patch updates the CMAP table to use format 12 instead of format 4. It currently only maps
        single codepoints to glyph IDs and skips all multi-codepoint glyphs. We will implement
        ligatures in another patch.

        Test: svg/custom/glyph-selection-non-bmp.svg

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::append32): Append a result to a given vector. This is for the path transcoder.
        (WebCore::SVGToOTFFontConverter::releaseResult): WTF::move()'s the result.
        (WebCore::SVGToOTFFontConverter::GlyphData::GlyphData): Update to take Codepoints instead of Codepoint.
        (WebCore::SVGToOTFFontConverter::append32): Piece 1 above.
        (WebCore::SVGToOTFFontConverter::append16): Ditto.
        (WebCore::SVGToOTFFontConverter::append4ByteCode): Convenience function.
        (WebCore::SVGToOTFFontConverter::overwrite32): Piece 1 above.
        (WebCore::SVGToOTFFontConverter::overwrite16): Ditto.
        (WebCore::SVGToOTFFontConverter::appendCMAPTable): Update to format 12.
        (WebCore::SVGToOTFFontConverter::appendHEADTable): Passing in a result vector is no longer necessary.
        (WebCore::SVGToOTFFontConverter::appendHHEATable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendHMTXTable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendMAXPTable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendNAMETable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendOS2Table): Ditto.
        (WebCore::SVGToOTFFontConverter::appendPOSTTable): Ditto.
        (WebCore::isValidStringForCFF): Ditto.
        (WebCore::SVGToOTFFontConverter::appendCFFValidString): Ditto.
        (WebCore::SVGToOTFFontConverter::appendCFFTable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendVORGTable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendVHEATable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendVMTXTable): Ditto.
        (WebCore::SVGToOTFFontConverter::addCodepointRanges): Update for Codepoints.
        (WebCore::SVGToOTFFontConverter::addCodepoints): Ditto.
        (WebCore::SVGToOTFFontConverter::addGlyphNames): Ditto.
        (WebCore::SVGToOTFFontConverter::appendKERNSubtable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendKERNTable): Ditto.
        (WebCore::writeCFFEncodedNumber): Passing in a result vector is no longer necessary.
        (WebCore::SVGToOTFFontConverter::appendGlyphData): Update for Codepoints.
        (WebCore::SVGToOTFFontConverter::processGlyphElement): Update for Codepoints.
        (WebCore::SVGToOTFFontConverter::compareCodepointsLexicographically): Comparing Codepoints
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Update for Codepoints.
        (WebCore::SVGToOTFFontConverter::calculateChecksum): Passing in a result vector is no longer necessary.
        (WebCore::SVGToOTFFontConverter::appendTable): Ditto.
        (WebCore::SVGToOTFFontConverter::convertSVGToOTFFont): Ditto.
        (WebCore::convertSVGToOTFFont): Move out of the result vector.
        (WebCore::write32): Deleted.
        (WebCore::write16): Deleted.
        (WebCore::overwrite32): Deleted.
        (WebCore::appendCFFValidString): Deleted.
        (WebCore::transcodeGlyphPaths): Deleted.
        (WebCore::calculateChecksum): Deleted.

2014-10-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r174270.
        https://bugs.webkit.org/show_bug.cgi?id=137397

        crashes on the bots (Requested by dethbakin on #webkit).

        Reverted changeset:

        "EventSender dispatches should be per-Document"
        https://bugs.webkit.org/show_bug.cgi?id=136051
        http://trac.webkit.org/changeset/174270

2014-10-03  Jer Noble  <jer.noble@apple.com>

        [iOS] Back-to-back fullscreen videos result in incorrectly sized videos
        https://bugs.webkit.org/show_bug.cgi?id=137380

        Reviewed by Eric Carlson.

        During a normal workflow, a <video> element will create an AVPlayerLayer, then it will get a
        fullscreen (hosted) parent layer, then it will be told an explicit fullscreen size. But when
        a <video> element creates an AVPlayerLayer after the <video> element is already in
        fullscreen mode, it sets that AVPlayerLayer's frame using the size of the hosted parent
        layer, rather than the explicit fullscreen size. Instead, use the (already set) explicit
        fullscreen size after creating the AVPlayerLayer.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::ensureAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformLayer):

2014-10-03 Bear Travis <betravis@adobe.com>

        REGRESSION (r173531): Use after free in WebCore::RenderStyle::fontMetrics /
        WebCore::CSSPrimitiveValue::computeLengthDouble
        https://bugs.webkit.org/show_bug.cgi?id=136864

        Reviewed by Andreas Kling.

        FontLoader previously called updateDocumentStyleIfNeeded,
        which would reset styles currently in use as part of
        the tabIndex calculation. The FontLoader should instead
        wait for pending stylesheets to load.

        Tests: fast/css/fontloader-tab-index.html

        * css/FontLoader.cpp:
        (WebCore::FontLoader::notifyWhenFontsReady): Do not immediately
        call loadingDone().
        (WebCore::FontLoader::loadingDone): Wait for stylesheets to
        finish loading rather than updating document styles.
        * css/FontLoader.h:
        (WebCore::FontLoader::loading): Include JS font loads when testing
        for the loading state.

2014-10-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix.

        Fixing the Windows build after r174269.

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2014-10-01  Brian J. Burg  <burg@cs.washington.edu>

        EventSender dispatches should be per-Document
        https://bugs.webkit.org/show_bug.cgi?id=136051

        Reviewed by Andreas Kling.

        EventSender uses a Timer to asynchronously dispatch the same event to multiple
        elements of the same type on a future run loop. However, we previously dispatched events
        to elements from any Document rather than the one that requested the event send.

        This patch changes EventSender to be associated with a single Document. EventSenders
        for each Document are lazily allocated. Further per-Document or global optimizations
        are possible.

        This change also lays the groundwork for making EventSender-related DOM events
        deterministic during web replay, tracked at <https://webkit.org/b/137090>.

        No new tests, covered by fast/text/svg-font-trigger-load-event.html.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implicitClose):
        Dispatch pending events for this document only. Rename local variable f to frame.

        * dom/Document.h:
        (WebCore::Document::sharedEventSenders):
        * dom/EventSender.h:
        (WebCore::EventSender::EventSender):
        (WebCore::EventSender::hasPendingEvents):
        (WebCore::EventSender<T>::dispatchEventSoon):
        (WebCore::EventSender<T>::cancelEvent):
        (WebCore::EventSender<T>::dispatchPendingEvents):
        (WebCore::EventSender<T>::EventSender): Deleted. The type argument was not necessary.
        * dom/SharedEventSenders.cpp: Added. Lazily creates event senders as they are requested.
        (WebCore::SharedEventSenders::linkLoadEventSender):
        (WebCore::SharedEventSenders::styleLoadEventSender):
        (WebCore::SharedEventSenders::imageBeforeloadEventSender):
        (WebCore::SharedEventSenders::imageLoadEventSender):
        (WebCore::SharedEventSenders::imageErrorEventSender):
        * dom/SharedEventSenders.h: Added.
        (WebCore::SharedEventSenders::SharedEventSenders):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::dispatchPendingEvent):
        (WebCore::HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources):
        (WebCore::linkLoadEventSender): Deleted.
        (WebCore::HTMLLinkElement::dispatchPendingLoadEvents): Deleted.
        * html/HTMLLinkElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::~HTMLStyleElement):
        (WebCore::HTMLStyleElement::dispatchPendingEvent):
        (WebCore::HTMLStyleElement::notifyLoadedSheetAndAllCriticalSubresources):
        (WebCore::styleLoadEventSender): Deleted.
        (WebCore::HTMLStyleElement::dispatchPendingLoadEvents): Deleted.
        * html/HTMLStyleElement.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::beforeLoadEventSender):
        (WebCore::ImageLoader::loadEventSender):
        (WebCore::ImageLoader::errorEventSender):
        (WebCore::ImageLoader::dispatchPendingEvent):
        (WebCore::beforeLoadEventSender): Deleted.
        (WebCore::loadEventSender): Deleted.
        (WebCore::errorEventSender): Deleted.
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvents): Deleted.
        (WebCore::ImageLoader::dispatchPendingLoadEvents): Deleted.
        (WebCore::ImageLoader::dispatchPendingErrorEvents): Deleted.
        * loader/ImageLoader.h:
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append): Remove an early call to the EventSender for image
        beforeload events. This was a performance optimization, but is no longer safe since the
        document (and thus the event sender) may not be available in a synchronous document write.

2014-10-03  Myles C. Maxfield  <mmaxfield@apple.com>

        TextRun::length() should return an unsigned
        https://bugs.webkit.org/show_bug.cgi?id=137354

        Reviewed by Antti Koivisto.

        Currently, the m_len instance variable that backs the TextRun::length() function is
        an unsigned, but the length() function implicitly casts that to an int when
        returning it. This patch makes the function return an unsigned, and makes the
        do any casting if necessary.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Cast result to int.
        (WebCore::Font::drawEmphasisMarks): Ditto.
        (WebCore::Font::adjustSelectionRectForText): Ditto.
        (WebCore::computeUnderlineType): Update internal type to be unsigned.
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add): Update sentinel value to be unsigned.
        (WebCore::GlyphBuffer::saveOffsetsInString): Ditto.
        * platform/graphics/GraphicsContext.cpp: Update internal type to be unsigned.
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::length): Update return type.
        (WebCore::TextRun::charactersLength): Ditto.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal): Cast result to int.
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::currentCharacterStartsSurrogatePair): Remove
        unnecessary casts.
        (WebCore::SVGTextMetricsBuilder::advance): Ditto.
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection): Cast result to int.

2014-10-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Fix build break since r174231 and r174256
        https://bugs.webkit.org/show_bug.cgi?id=137384

        Unreviewed, EFL build fix.

        r174231 and r174256 didn't consider EFL port and CoordinatedGraphics area.

        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::WebKitCSSViewportRule):
        * css/WebKitCSSViewportRule.h:

2014-10-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS Selectors Level 4: Add parsing for :matches
        https://bugs.webkit.org/show_bug.cgi?id=137348

        Reviewed by Benjamin Poulain.

        Add initial parsing functionality of :matches pseudo class in Selectors Level 4.
        It accepts selector list as a parameter. It can contain pseudo elements.
        And now at the parsing phase, multiple pseudo elements are allowed.
        Currently :not doesn't accept any functional pseudo classes, :not(:matches(...)) is rejected.
        And currently, :matches(:visited, :link) is allowed in the parsing phase.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        * css/CSSSelector.cpp:
        (WebCore::appendSelectorList):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

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

        CSSOM rule wrappers always have a corresponding internal style object.
        <https://webkit.org/b/137379>

        Make the CSSOM rule wrapper classes use references & Ref instead of
        raw pointers and RefPtr for pointing to the internal style rule.

        Also changed the signature of reattach() to take a StyleRuleBase&
        since it's never called with a null pointer.

        Finally marked the rule classes final.

        Reviewed by Geoffrey Garen.

        * css/CSSCharsetRule.h:
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::CSSFontFaceRule):
        (WebCore::CSSFontFaceRule::reattach):
        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::create): Deleted.
        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::CSSGroupingRule):
        (WebCore::CSSGroupingRule::reattach):
        * css/CSSGroupingRule.h:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::CSSImportRule):
        (WebCore::CSSImportRule::href):
        (WebCore::CSSImportRule::media):
        (WebCore::CSSImportRule::cssText):
        (WebCore::CSSImportRule::styleSheet):
        (WebCore::CSSImportRule::reattach):
        * css/CSSImportRule.h:
        (WebCore::CSSImportRule::create): Deleted.
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::mediaQueries):
        (WebCore::CSSMediaRule::reattach):
        * css/CSSMediaRule.h:
        (WebCore::CSSMediaRule::create): Deleted.
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        (WebCore::CSSPageRule::reattach):
        * css/CSSPageRule.h:
        (WebCore::CSSPageRule::create): Deleted.
        * css/CSSRule.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::reattach):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::create): Deleted.
        (WebCore::CSSStyleRule::styleRule): Deleted.
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::reattachChildRuleCSSOMWrappers):
        * css/CSSSupportsRule.cpp:
        (WebCore::CSSSupportsRule::CSSSupportsRule):
        (WebCore::CSSSupportsRule::conditionText):
        * css/CSSSupportsRule.h:
        (WebCore::CSSSupportsRule::create):
        * css/CSSUnknownRule.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRuleImport.h:
        (WebCore::StyleRuleImport::mediaQueries):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::reattach):
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::item):
        (WebCore::WebKitCSSKeyframesRule::reattach):
        * css/WebKitCSSKeyframesRule.h:
        (WebCore::WebKitCSSKeyframesRule::create):
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::cssText):
        * css/WebKitCSSRegionRule.h:
        (WebCore::WebKitCSSRegionRule::create):
        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::reattach):
        * css/WebKitCSSViewportRule.h:

2014-10-02  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CSSRule subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137364

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() functions for CSSRule subclasses.

        No new tests, no behavior change.

        * css/CSSFontFaceRule.h:
        * css/CSSImportRule.h:
        * css/CSSMediaRule.h:
        * css/CSSRule.h:
        * css/CSSStyleRule.h:
        * css/CSSSupportsRule.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):
        * css/WebKitCSSKeyframesRule.h:
        * css/WebKitCSSRegionRule.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asCSSStyleRule):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::collectFlatRules):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):

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

        <rdar://problem/18531395> REGRESSION (r173272): Crash in ResourceResponse::platformSuggestedFilename() when called on the null response
        https://bugs.webkit.org/show_bug.cgi?id=137239

        Reviewed by Pratik Solanki.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformSuggestedFilename): Return the null String if
        m_cfResponse is null.

2014-10-02  Andy Estes  <aestes@apple.com>

        [iOS] Create an SPI wrapper for _UIHighlightView and use it in WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=137370

        Reviewed by Tim Horton.

        Added _UIHighlightViewSPI.h. When building against the internal SDK it imports <UIKit/_UIHighlightView.h>. Otherwise, it redeclares the SPI we use in WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/ios/_UIHighlightViewSPI.h: Added.

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

        CSS JIT: add the initial implementation of :nth-child(An+B of selector)
        https://bugs.webkit.org/show_bug.cgi?id=137285

        Reviewed by Andreas Kling.

        This patch adds the baseline support for JIT compiling :nth-child(An+B of selector).

        The simple optimizations from the classic :nth-child() are carried over to :nth-child(An+B of selector),
        but the new code generation is pretty much left completely unoptimized.

        The main challenge introduced with the new functional pseudo classes is the possibility of backtracking
        while already inside a backtracking chain.

        For example:
            :nth-child(odd of a+a+a~a)+b+b~b
        has to backtrack the chain a+a+a while already in the backtracking chain b+b+b.

        The easiest way to solve this would have been to have each subselector generate a new function.
        The generator for :nth-child() would simply call the function call for each sibling.

        In the example, we would have:
            functionA(): a+a+a~a
            selectorChecker(): :nth-child(odd of functionA())+b+b~b

        I decided against explicit functions because I believe the would be counterproductive for the common cases.
        I expect most use of :nth-child(of) to be done with a light filter without combinators, things like:
            :nth-child(odd of .class)
            :nth-child(odd of type.class)
            :nth-child(odd of type[attribute=value])
            etc.

        For simple cases, inlining the internal filter will greatly simplify the generated code.

        In this particular patch, the selector checkers are inlined, but we do not attempt to have good code generation.
        The optimizations will come later.

        To implement backtracking in the subselectors, the backtracking implementation was abstracted into the structure
        BacktrackingLevel. Every time the code generator starts a new subselector, a new BacktrackingLevel is pushed onto
        the multilevel backtracking stack. The code generation always use the latest BacktrackingLevel for code generation
        until the subselector is finished, and code generation can continue with the existing state.

        Tests: fast/selectors/nth-child-of-backtracking-adjacent-2.html
               fast/selectors/nth-child-of-backtracking-adjacent-optimized.html
               fast/selectors/nth-child-of-backtracking-adjacent.html
               fast/selectors/nth-child-of-boundaries-1.html
               fast/selectors/nth-child-of-boundaries-2.html
               fast/selectors/nth-child-of-boundaries-3.html
               fast/selectors/nth-child-of-chained-2.html
               fast/selectors/nth-child-of-has-parent.html
               fast/selectors/nth-child-of-never-matching-selector.html
               fast/selectors/nth-child-of-with-invalid-An+B.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        (WebCore::SelectorCompiler::computeBacktrackingMemoryRequirements):
        Previously, we only needed stack space for the adjacent backtracking entry.

        Now we can have several backtracking level active at the same time. We compute how much stack we need
        initially and each backtracking level take stack references as needed.

        (WebCore::SelectorCompiler::computeBacktrackingInformation):
        The entire backtracking infrastructure already works great for multilevel backtracking. It is actually
        amazing how everything fits nicely together :)

        The only addition here is logging facility in case we run into a bug.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorCheckerExcludingPseudoElements):
        generateSelectorChecker() has handling for pseudo elements, which should not be used
        for :nth-child(of). The core generator was moved to generateSelectorCheckerExcludingPseudoElements()
        to be used for code generation of subselectors.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateParentElementTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAncestorTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDescendantBacktrackingTail):
        The two main changes are:
        1) Adopt the BacktrackingLevel to handle multilevel generation.
        2) Descendant backtracking can use the stack if we have multi level descendant backtracking.
           In that case, we just use the stack like for adjacent backtracking.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChildOf):
        This is very similar to generateElementIsNthChild(). The main difference is we cannot use
        the cache in this case.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::nthFilterIsAlwaysSatisified):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateNthFilterTest):

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

        [iOS] Networking process stops loading web pages while running Alexa test with random URL list
        https://bugs.webkit.org/show_bug.cgi?id=137362
        <rdar://problem/18507382>

        Reviewed by Alexey Proskuryakov.

        ResourceHandleCFURLConnectionDelegateWithOperationQueue needs to signal threads waiting on
        its semaphore when the handle is being destroyed. Otherwise, we can leave dispatch threads
        hanging around waiting for a response. This can happen when the Web Content process dies.
        Any thread/queue waiting on a response from that web process will leak and stay around
        forever. If we reach the dispatch queue limit of 64, then all networking will cease to
        happen in the Networking process. Fix this by signalling waiting threads and clearing out
        our state in much the same way that -[WebCoreResourceHandleAsOperationQueueDelegate
        detachHandle] does for Mac.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::releaseHandle):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:

2014-10-02  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CSSBasicShape objects
        https://bugs.webkit.org/show_bug.cgi?id=137331

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for CSSBasicShape objects.

        No new tests, no behavior change.

        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::CSSBasicShapeInset::equals):
        * css/CSSBasicShapes.h:

2014-10-02  Chris Dumez  <cdumez@apple.com>

        XMLHttpRequestProgressEventThrottle shouldn't throttle / defer progress events if there are no listeners
        https://bugs.webkit.org/show_bug.cgi?id=137346

        Reviewed by Alexey Proskuryakov.

        Previously XMLHttpRequestProgressEventThrottle would throttle / defer
        progress events, which involves queueing events and starting timers,
        even if there were no listeners for those events (which is fairly
        common case).

        This patch updates XMLHttpRequestProgressEventThrottle to make sure
        there are actual progress event listeners *before* attempting to
        throttle and do extra processing, to avoid doing unnecessary work.

        This patch also makes XMLHttpRequestProgressEventThrottle::dispatchEvent()
        private as this method is only called from other dispatch methods of
        the class and never from the outside.

        No new tests, no behavior change.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):

2014-10-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [Subpixel] Use floats instead of ints for text justification expansion
        https://bugs.webkit.org/show_bug.cgi?id=137327

        Reviewed by Zalan Bujtas.

        Use a float instead of an int for the expansion variable in InlineBox. The int was inside an inner class
        that held a collection of bitfields, and this patch removes that inner-inner variable.

        No new tests because there is plenty of existing coverage and existing tests are rebaselined.

        * rendering/InlineBox.cpp: Update static_assert for the size of InlineBox.
        * rendering/InlineBox.h: Use a float for the justification expansion amount instead of an int bitfield.
        (WebCore::InlineBox::InlineBoxBitfields::InlineBoxBitfields): Remove int bitfield.
        (WebCore::InlineBox::InlineBox): Initialize float expansion.
        (WebCore::InlineBox::expansion): Return a float.
        (WebCore::InlineBox::setExpansion): Take a float.
        (WebCore::InlineBox::InlineBoxBitfields::expansion): Deleted. Moved to InlineBox.
        (WebCore::InlineBox::InlineBoxBitfields::setExpansion): Deleted. Ditto.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setExpansion): Take a float.

2014-10-02  Tim Horton  <timothy_horton@apple.com>

        Move PageOverlay[Controller] to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=137164
        <rdar://problem/18508258>

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Make the appropriate build system changes.

        * WebCore.exp.in:
        Export the new PageOverlay[Controller] symbols from WebCore.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted.
        Add attachViewOverlayGraphicsLayer, which allows PageOverlayController
        to push view-relative page overlay root layers down to WebKit to be
        installed just inside the view.

        Remove documentOverlayLayerForFrame because RenderLayerCompositor can now
        talk directly to PageOverlayController.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        When the mouse is moved, pressed, or released, give PageOverlayController
        the first shot at handling the event.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        Inform PageOverlayController that the main FrameView's size changed,
        so it can update the size of view-relative overlays.

        (WebCore::FrameView::setContentsSize):
        Inform PageOverlayController that the main FrameView's contents size changed,
        so it can update the size of document-relative overlays.

        (WebCore::FrameView::setFixedVisibleContentRect):
        (WebCore::FrameView::didChangeScrollOffset):
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::wheelEvent):
        Inform PageOverlayController that something scrolled.

        (WebCore::FrameView::setExposedRect):
        Inform PageOverlayController that the exposed rect changed, so it can push
        the new exposed rect down to the overlays.

        * page/FrameView.h:
        Add didChangeScrollOffset.

        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame):
        * page/MainFrame.h:
        Keep one PageOverlayController per MainFrame.

        * page/Page.cpp:
        (WebCore::Page::setDeviceScaleFactor):
        Inform PageOverlayController that the device scale factor changed.

        (WebCore::Page::setSessionID):
        Remove a blank line.

        * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp.
        Move PageOverlay from WebKit2 to WebCore.
        A few overarching changes that I won't detail in each place:
            - references instead of pointers in many places
            - WebCore types instead of WebKit2 types everywhere

        (WebCore::PageOverlay::bounds):
        It is possible to install an overlay before we have a FrameView.
        We will eventually get a view/contents size changed notification and try again.

        (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint):
        (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint):
        (WebCore::PageOverlay::copyAccessibilityAttributeNames):
        Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint"
        variants, because we don't have anything like WKTypeRef here.

        * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h.
        Make PageOverlay a normal RefCounted object instead of a WebKit2 API object.
        Leave a comment noting that we should move the PageOverlay's GraphicsLayer
        to PageOverlay instead of a map on PageOverlayController.

        * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp.
        Move PageOverlayController from WebKit2 to WebCore.
        A few overarching changes that I won't detail in each place:
            - references instead of pointers in many places
            - WebCore types instead of WebKit2 types everywhere

        Leave a FIXME that didChangeSettings is not currently called when settings change.
        This is not a problem for normal use of overlays, only for dynamically changing
        layer border/repaint counter settings.

        (WebCore::PageOverlayController::PageOverlayController):
        (WebCore::PageOverlayController::createRootLayersIfNeeded):
        We will now lazily initialize the root layers when we first try to use them,
        because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory
        is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers.

        (WebCore::PageOverlayController::installPageOverlay):
        Enter compositing mode when installing a PageOverlay.
        Avoid pushing the Page to the PageOverlay until after we've set up
        its root layer, so that the installation process can make use of that layer;
        clients may, for example, expect to be able to setNeedsDisplay() in the
        didMoveToPage callback.
        Avoid updateOverlayGeometry until the layer is created and we've pushed
        the Page down, so that e.g. bounds() will use the right Page.

        (WebCore::PageOverlayController::didChangeSettings):
        Leave a FIXME about a future improvement to didChangeSettings.

        (WebCore::PageOverlayController::deviceScaleFactor):
        (WebCore::PageOverlayController::notifyFlushRequired):
        Null-check Page; these can get called when tearing down the Frame.

        * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h.

        * platform/graphics/GraphicsLayerClient.h:
        Add wtf/Forward.h, because GraphicsLayerClient.h uses String.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        Inform PageOverlayController that something scrolled.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers):
        Make hasAnyAdditionalCompositedLayers return true if there are any page overlays,
        because we need to avoid falling out of compositing mode if we still have
        page overlays.

        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        Enter compositing mode if we have page overlays.

        (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted.
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        Rename appendOverlayLayers -> appendDocumentOverlayLayers.

        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        Attach/detach the view overlay root layer when attaching/detaching the
        normal compositing root layer.

        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        * rendering/RenderLayerCompositor.h:

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

        Back TextRun with a StringView
        https://bugs.webkit.org/show_bug.cgi?id=137352

        Reviewed by Antti Koivisto.

        TextRun contains a union of a UChar* and an LChar* as well as a length, which is the abstraction
        that StringView is intended to be. This patch cleans up TextRun by replacing the union and length
        with a StringView instance member.

        No new tests because there is no behavior change.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::subRun):
        (WebCore::TextRun::operator[]):
        (WebCore::TextRun::data8):
        (WebCore::TextRun::data16):
        (WebCore::TextRun::characters8):
        (WebCore::TextRun::characters16):
        (WebCore::TextRun::is8Bit):
        (WebCore::TextRun::length):
        (WebCore::TextRun::string):
        (WebCore::TextRun::setText):
        (WebCore::TextRun::stringView):

2014-10-01  Christophe Dumez  <cdumez@apple.com>

        Have is<>(T*) function do a null check on the pointer argument
        https://bugs.webkit.org/show_bug.cgi?id=137333

        Reviewed by Gavin Barraclough.

        Have is<>(T*) function do a null check on the argument instead of a
        simple assertion. This makes sense for 2 reasons:
        1. It is more consistent with downcast<>(T*), which will succeed even
           if the argument is a nullptr.
        2. It simplifies the code a bit as it gets rid of a lot of explicit
           null checks.

        No new tests, no behavior change.

        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):
        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::createFromRenderer):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::handleLiveRegionCreated):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::labelChanged):
        (WebCore::AXObjectCache::rootAXEditableElement):
        (WebCore::isNodeAriaVisible):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isEnabled):
        (WebCore::AccessibilityListBoxOption::isSelected):
        (WebCore::AccessibilityListBoxOption::canSetSelectedAttribute):
        (WebCore::AccessibilityListBoxOption::stringValue):
        (WebCore::AccessibilityListBoxOption::listBoxOptionParentNode):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaTimeline::valueDescription):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
        (WebCore::AccessibilityNodeObject::isNativeTextControl):
        (WebCore::AccessibilityNodeObject::isNativeImage):
        (WebCore::AccessibilityNodeObject::isInputImage):
        (WebCore::AccessibilityNodeObject::isEnabled):
        (WebCore::AccessibilityNodeObject::isPressed):
        (WebCore::AccessibilityNodeObject::isHovered):
        (WebCore::AccessibilityNodeObject::isReadOnly):
        (WebCore::AccessibilityNodeObject::isRequired):
        (WebCore::AccessibilityNodeObject::valueForRange):
        (WebCore::AccessibilityNodeObject::maxValueForRange):
        (WebCore::AccessibilityNodeObject::minValueForRange):
        (WebCore::AccessibilityNodeObject::isControl):
        (WebCore::AccessibilityNodeObject::anchorElement):
        (WebCore::isNodeActionElement):
        (WebCore::AccessibilityNodeObject::mouseButtonListener):
        (WebCore::AccessibilityNodeObject::labelForElement):
        (WebCore::AccessibilityNodeObject::titleElementText):
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        (WebCore::AccessibilityNodeObject::helpText):
        (WebCore::AccessibilityNodeObject::hierarchicalLevel):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        (WebCore::AccessibilityNodeObject::title):
        (WebCore::AccessibilityNodeObject::colorValue):
        (WebCore::accessibleNameForNode):
        (WebCore::AccessibilityNodeObject::canSetFocusAttribute):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::hasTagName):
        (WebCore::AccessibilityObject::hasAttribute):
        (WebCore::AccessibilityObject::element):
        (WebCore::AccessibilityObject::classList):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFileUploadButton):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::labelElementContainer):
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::accessKey):
        (WebCore::AccessibilityRenderObject::url):
        (WebCore::AccessibilityRenderObject::setElementAttributeValue):
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::correspondingLabelForControlElement):
        (WebCore::AccessibilityRenderObject::renderObjectIsObservable):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        (WebCore::AccessibilityRenderObject::setAccessibleName):
        (WebCore::AccessibilityRenderObject::stringValueForMSAA):
        (WebCore::AccessibilityRenderObject::isLinked):
        (WebCore::AccessibilityRenderObject::stringRoleForMSAA):
        (WebCore::AccessibilityRenderObject::isMathElement):
        * accessibility/AccessibilitySearchFieldButtons.cpp:
        (WebCore::AccessibilitySearchFieldCancelButton::press):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::tableElement):
        (WebCore::AccessibilityTable::isDataTable):
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::title):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetCaption):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetName):
        (webkitAccessibleGetDescription):
        (webkitAccessibleGetAttributes):
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::constructJSAudioContext):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        (WebCore::createWrapperInline):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptState.cpp:
        (WebCore::frameFromExecState):
        * bindings/objc/DOM.mm:
        (kitClass):
        * css/CSSCursorImageValue.cpp:
        (WebCore::resourceReferencedByCursorElement):
        * css/CSSStyleSheet.cpp:
        (WebCore::isAcceptableCSSStyleSheetParent):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isAutofilled):
        (WebCore::isDisabled):
        (WebCore::isEnabled):
        (WebCore::isChecked):
        (WebCore::matchesLangPseudoClass):
        (WebCore::matchesFutureCuePseudoClass):
        (WebCore::matchesPastCuePseudoClass):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initElement):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::elementHasDirectionAuto):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::findSiblingForStyleSharing):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::useSVGZoomRulesForLength):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::getNamedItem):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/ContainerNode.cpp:
        (WebCore::checkAcceptChild):
        (WebCore::ContainerNode::notifyChildRemoved):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromTree):
        * dom/CurrentScriptIncrementer.h:
        (WebCore::CurrentScriptIncrementer::CurrentScriptIncrementer):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setDragImage):
        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::setTitle):
        (WebCore::Document::iconURLs):
        (WebCore::eventTargetElementForDocument):
        (WebCore::Document::updateHoverActiveState):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        * dom/Element.h:
        (WebCore::Node::parentElement):
        * dom/ElementTraversal.h:
        (WebCore::Traversal<Element>::nextTemplate):
        (WebCore::ElementTraversal::previousIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudoSkippingChildren):
        (WebCore::ElementTraversal::pseudoAwarePreviousSibling):
        * dom/EventDispatcher.cpp:
        (WebCore::WindowEventContext::WindowEventContext):
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::nodeOrHostIfPseudoElement):
        (WebCore::EventPath::EventPath):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/KeyboardEvent.cpp:
        (WebCore::findKeyboardEvent):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::pseudoAwarePreviousSibling):
        (WebCore::Node::pseudoAwareNextSibling):
        (WebCore::Node::computedStyle):
        (WebCore::Node::parentOrShadowHostElement):
        (WebCore::Node::rootEditableElement):
        (WebCore::Node::ancestorElement):
        (WebCore::Node::compareDocumentPosition):
        (WebCore::appendAttributeDesc):
        (WebCore::Node::showNodePathForThis):
        (WebCore::Node::enclosingLinkEventParentOrSelf):
        (WebCore::Node::dispatchEvent):
        (WebCore::Node::defaultEventHandler):
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::nodeCanBeDistributed):
        (WebCore::NodeRenderingTraversal::traverseParent):
        * dom/NodeTraversal.cpp:
        (WebCore::NodeTraversal::previousIncludingPseudo):
        (WebCore::NodeTraversal::nextIncludingPseudo):
        (WebCore::NodeTraversal::nextIncludingPseudoSkippingChildren):
        * dom/Position.cpp:
        (WebCore::Position::element):
        (WebCore::endsOfNodeAreVisuallyDistinctPositions):
        (WebCore::Position::isRenderedCharacter):
        (WebCore::Position::leadingWhitespacePosition):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::getBorderAndTextQuads):
        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/ShadowRoot.h:
        (WebCore::Node::parentOrShadowHostNode):
        * dom/Text.cpp:
        (WebCore::earliestLogicallyAdjacentTextNode):
        (WebCore::latestLogicallyAdjacentTextNode):
        (WebCore::isSVGShadowText):
        * dom/TextNodeTraversal.cpp:
        (WebCore::TextNodeTraversal::contentsAsString):
        * dom/TextNodeTraversal.h:
        (WebCore::TextNodeTraversal::firstTextChildTemplate):
        (WebCore::TextNodeTraversal::firstTextWithinTemplate):
        (WebCore::TextNodeTraversal::traverseNextTextTemplate):
        (WebCore::TextNodeTraversal::nextSibling):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::isNewLineAtPosition):
        (WebCore::ApplyBlockElementCommand::endOfNextParagrahSplittingTextNodesIfNeeded):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isLegacyAppleStyleSpan):
        (WebCore::isStyleSpanOrSpanWithOnlyStyleAttribute):
        (WebCore::isSpanWithoutAttributesOrUnstyledStyleSpan):
        (WebCore::isEmptyFontTag):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::dummySpanAncestorForNode):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::splitTextAtEnd):
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd):
        (WebCore::ApplyStyleCommand::shouldSplitTextElement):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::isRemovableBlock):
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::canRebalance):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        * editing/Editor.cpp:
        (WebCore::imageElementFromImageDocument):
        (WebCore::Editor::shouldInsertFragment):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::isSpellCheckingEnabledFor):
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        * editing/FrameSelection.cpp:
        (WebCore::removingNodeRemovesPosition):
        (WebCore::CaretBase::paintCaret):
        (WebCore::FrameSelection::debugRenderer):
        (WebCore::FrameSelection::selectAll):
        (WebCore::scanForForm):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::mergeWithNeighboringLists):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTab):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::haveSameTagName):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
        (WebCore::ReplaceSelectionCommand::shouldPerformSmartReplace):
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::isCheckable):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isInPasswordField):
        * editing/VisibleUnits.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::aggregatedAttributesForAncestors):
        (HTMLConverter::aggregatedAttributesForElementAndItsAncestors):
        (WebCore::editingAttributedStringFromRange):
        * editing/htmlediting.cpp:
        (WebCore::enclosingBlock):
        (WebCore::enclosingElementWithTag):
        (WebCore::enclosingAnchorElement):
        (WebCore::enclosingList):
        (WebCore::lineBreakExistsAtPosition):
        (WebCore::areIdenticalElements):
        (WebCore::isNonTableCellHTMLBlockElement):
        (WebCore::deprecatedEnclosingBlockFlowElement):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendText):
        (WebCore::ancestorToRetainStructureAndAppearanceForBlock):
        (WebCore::isPlainTextMarkup):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readAsArrayBuffer):
        (WebCore::FileReader::readAsBinaryString):
        (WebCore::FileReader::readAsText):
        (WebCore::FileReader::readAsDataURL):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateAppearance):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::findAssociatedForm):
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::eventType):
        (WebCore::isEnterKeyKeydownEvent):
        (WebCore::isLinkClick):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::imageElement):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedInto):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNamedElementCache):
        * 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):
        (WebCore::HTMLDocument::isFrameSet):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::matchesReadWritePseudoClass):
        (WebCore::mergeWithNextTextNode):
        (WebCore::HTMLElement::setOuterHTML):
        (WebCore::HTMLElement::setOuterText):
        (WebCore::HTMLElement::insertAdjacentElement):
        (WebCore::contextElementForInsertion):
        (WebCore::HTMLElement::directionality):
        (WebCore::HTMLElement::dirAttributeChanged):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::updateFromControlElementsAncestorDisabledStateUnder):
        (WebCore::HTMLFieldSetElement::disabledStateChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::computeIsDisabledByFieldsetAncestor):
        (WebCore::shouldAutofocus):
        (WebCore::HTMLFormControlElement::enclosingFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::rendererIsNeeded):
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::submitElementFromEvent):
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLLabelElement.cpp:
        (WebCore::nodeAsSupportedLabelableElement):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::virtualForm):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasFallbackContent):
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::recalcSelectOptions):
        (WebCore::HTMLOptGroupElement::ownerSelectElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        (WebCore::HTMLOptionElement::index):
        (WebCore::HTMLOptionElement::ownerDataListElement):
        (WebCore::HTMLOptionElement::ownerSelectElement):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        (WebCore::HTMLOptionElement::collectOptionInnerText):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::addPlugInsFromNodeListMatchingPlugInOrigin):
        (WebCore::HTMLPlugInImageElement::defaultEventHandler):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setText):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::nextValidIndex):
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::selectOption):
        (WebCore::HTMLSelectElement::optionToListIndex):
        (WebCore::HTMLSelectElement::listToOptionIndex):
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::searchOptionsForValue):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::updateSelectedState):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        (WebCore::HTMLSelectElement::lastSelectedListIndex):
        (WebCore::HTMLSelectElement::optionAtIndex):
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex):
        (WebCore::HTMLSelectElement::length):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedInto):
        (WebCore::HTMLSourceElement::removedFrom):
        * html/HTMLSummaryElement.cpp:
        (WebCore::isClickableControl):
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::findParentTable):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):
        (WebCore::HTMLTableRowsCollection::lastRow):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::positionForIndex):
        (WebCore::HTMLTextFormControlElement::indexForPosition):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::mediaElement):
        * html/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * html/InputType.cpp:
        (WebCore::InputType::shouldSubmitImplicitly):
        * html/MediaDocument.cpp:
        (WebCore::ancestorVideoElement):
        (WebCore::MediaDocument::defaultEventHandler):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        (WebCore::RadioInputType::isKeyboardFocusable):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldSubmitImplicitly):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::attachLater):
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::ownerDocumentForCurrentNode):
        (WebCore::HTMLConstructionSite::findFosterSite):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isSelectScopeMarker):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        * html/shadow/InsertionPoint.h:
        (WebCore::isActiveInsertionPoint):
        (WebCore::parentNodeForDistribution):
        (WebCore::parentElementForDistribution):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::parentMediaElement):
        (WebCore::mediaControlElementType):
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::defaultEventHandler):
        (WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler):
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::containsRelatedTarget):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsAppleEventListener::handleEvent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::SpinButtonElement::forwardEvent):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::copyWebVTTNodeToDOMTree):
        (WebCore::VTTCue::markFutureAndPastNodes):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::assertDocument):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        (WebCore::InspectorDOMAgent::innerParentNode):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::frameForScriptExecutionContext):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForNonDocumentContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        (WebCore::InspectorNodeFinder::searchUsingCSSSelectors):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeRequestFromCache):
        (WebCore::MemoryCache::removeRequestFromSessionCaches):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::attributeChanged):
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild):
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        (WebCore::ContextMenuController::populate):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::draggableElement):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::isSubmitImage):
        (WebCore::targetIsFrame):
        (WebCore::findDropZone):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::owner):
        (WebCore::FocusController::findFocusableElementDescendingDownIntoFrameDocument):
        (WebCore::FocusController::findFocusableElementAcrossFocusScope):
        (WebCore::FocusController::findElementWithExactTabIndex):
        (WebCore::nextElementWithGreaterTabIndex):
        (WebCore::previousElementWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableElement):
        (WebCore::FocusController::previousFocusableElement):
        (WebCore::clearSelectionIfNeeded):
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/FrameView.cpp:
        (WebCore::FrameView::init):
        (WebCore::FrameView::scrollToAnchor):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::scrollInDirection):
        (WebCore::scrollableEnclosingBoxOrParentFrameForNodeInDirection):
        (WebCore::canScrollInDirection):
        (WebCore::nodeRectInAbsoluteCoordinates):
        (WebCore::areElementsOnSameLine):
        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToClickEvents):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setInnerNode):
        (WebCore::HitTestResult::setInnerNonSharedNode):
        (WebCore::HitTestResult::title):
        (WebCore::HitTestResult::innerTextIfTruncated):
        (WebCore::HitTestResult::mediaSupportsFullscreen):
        (WebCore::HitTestResult::enterFullscreenForVideo):
        (WebCore::HitTestResult::mediaIsVideo):
        (WebCore::HitTestResult::innerElement):
        (WebCore::HitTestResult::innerNonSharedElement):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::resizeTextPermitted):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::isOpen):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::imageMap):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::updateSnapOffsets):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::isRestartedPlugin):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::addFocusRingRects):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):
        * rendering/RenderMenuList.cpp:
        (WebCore::selectedOptionCount):
        (RenderMenuList::updateOptionsWidth):
        (RenderMenuList::setTextFromOption):
        (RenderMenuList::itemText):
        (RenderMenuList::itemIsEnabled):
        (RenderMenuList::itemIsLabel):
        (RenderMenuList::itemIsSelected):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::meterElement):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::isChildAllowed):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addPDFURLRect):
        (WebCore::RenderObject::shouldRespectImageOrientation):
        (WebCore::RenderObject::updateDragState):
        (WebCore::RenderObject::getUncachedPseudoStyle):
        (WebCore::RenderObject::getTextDecorationColors):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::progressElement):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isEnabled):
        (WebCore::RenderTheme::isFocused):
        (WebCore::RenderTheme::isPressed):
        (WebCore::RenderTheme::isSpinUpButtonPartPressed):
        (WebCore::RenderTheme::isReadOnlyControl):
        (WebCore::RenderTheme::isHovered):
        (WebCore::RenderTheme::isSpinUpButtonPartHovered):
        (WebCore::RenderTheme::paintSliderTicks):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::getMediaElementFromRenderObject):
        (WebCore::nodeHasClass):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updatePressedState):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::isAutosizingContainer):
        (WebCore::TextAutosizer::containerContainsOneOfTags):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::isChildAllowed):
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::gradientElement):
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::detachDistributedChildren):
        (WebCore::Style::detachChildren):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::resolveTree):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::rootElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isOutermostSVGSVGElement):
        (WebCore::SVGElement::ownerSVGElement):
        (WebCore::SVGElement::viewportElement):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::associatedFontElement):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::childrenChanged):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::invalidateGlyphCache):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedInto):
        (WebCore::SVGHKernElement::removedFrom):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGLocatable.cpp:
        (WebCore::isViewportElement):
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::pathElement):
        (WebCore::SVGMPathElement::notifyParentOfPathChange):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setupInitialView):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::elementFromRenderer):
        * svg/SVGUseElement.cpp:
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::toClipPath):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::insertedInto):
        (WebCore::SVGVKernElement::removedFrom):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageForRenderer):
        * testing/Internals.cpp:
        (WebCore::Internals::shadowRootType):
        (WebCore::Internals::visiblePlaceholder):
        (WebCore::Internals::selectColorInColorChooser):
        (WebCore::Internals::wasLastChangeUserEdit):
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks):
        (WebCore::Internals::isSelectPopupVisible):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::expandedNameLocalPart):
        (WebCore::XPath::FunLang::evaluate):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::sortBlock):
        (WebCore::XPath::NodeSet::sort):
        (WebCore::XPath::findRootNode):
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2014-10-02  Rik Cabanier  <cabanier@adobe.com>

        Clean up loops in CSSGradientValue.cpp
        https://bugs.webkit.org/show_bug.cgi?id=137332

        Reviewed by Andreas Kling.

        This patch cleans up a couple of for loops by using C++11 syntax and
        fixes some grammar in a comment.

        No new tests, no behavior change.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::gradientWithStylesResolved): Move for loops to C++11.
        (WebCore::CSSGradientValue::addStops): Update grammar in comment for gradient midpoints.

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

        AX: Default orientation for aria scrollbars should be vertical
        https://bugs.webkit.org/show_bug.cgi?id=137341

        Reviewed by Chris Fleizach.

        Default orientation for aria scrollbars regarding w3c spec should be vertical

        No new tests, covering by existing one.

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

2014-10-02  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix minimal build warnings
        https://bugs.webkit.org/show_bug.cgi?id=137066

        Reviewed by Daniel Bates.

        No new tests, no behavior change.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::glyphDataForCharacter):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::prepareGraphicsContextForTextPainting):

2014-10-01  Benjamin Poulain  <bpoulain@apple.com>

        Click events offset in webkit-overflow-scrolling iframes
        https://bugs.webkit.org/show_bug.cgi?id=134596

        Reviewed by Sam Weinig.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRectInternal):
        When converting coordinates from the main frame to a subframe's document, the position
        is first converted to the subframe's FrameView coordinate system, then offset by the scroll
        offset of the subframe itself.

        The bug in this case was that the scroll offset used was the global scroll offset of the frame
        in the view instead of the scroll offset of the document in its own frameview.

        The regression was introduced by the refactoring r162663. On iOS WebKit1, the coordinate system
        is different depending on VisibleContentRectIncludesScrollbars. In r162663, the value was set
        such that the rect returned is always in absolute coordinate.

        The ideal solution would be to refactor ScrollView::platformVisibleContentRect() to always return
        the offsets in scroll view coordinates and verify and update all the call sites to use explicit
        conversion to the top frame. In this patch I only reverted the coordinate change of r162663 to avoid
        large scale impact.

2014-10-01  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for File
        https://bugs.webkit.org/show_bug.cgi?id=137318

        Reviewed by Gyuyoung Kim.

        Use is<>() / downcast<>() for File instead of isFile() / toFile().

        No new tests, no behavior change.

        * fileapi/Blob.h:
        * fileapi/File.h:
        (isType):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readAsArrayBuffer):
        (WebCore::FileReader::readAsBinaryString):
        (WebCore::FileReader::readAsText):
        (WebCore::FileReader::readAsDataURL):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):

2014-10-01  Rik Cabanier  <cabanier@adobe.com>

        Add support for midpoint to CSS gradients
        https://bugs.webkit.org/show_bug.cgi?id=137171

        Reviewed by Darin Adler.

        This patch adds support for gradient midpoints. It also updates the 
        gradient tests so they use the feature.
        Spec: http://dev.w3.org/csswg/css-images-4/#color-interpolation-hint

        Tests: fast/gradients/unprefixed-color-stops2.html
               fast/gradients/unprefixed-gradient-parsing.html
               fast/gradients/unprefixed-linear-angle-gradients2.html
               fast/gradients/unprefixed-radial-gradients.html
               fast/gradients/unprefixed-radial-gradients2.html
               fast/gradients/unprefixed-repeating-linear-gradient.html
               fast/gradients/unprefixed-repeating-radial-gradients.html

        * css/CSSGradientValue.cpp:
        (WebCore::GradientStop::GradientStop): constructor initializes the midpoint variable
        (WebCore::CSSGradientValue::gradientWithStylesResolved): this function checks for midpoint color stops
        (WebCore::CSSGradientValue::addStops): this function processes midpoints and converts them to regular color stops
        (WebCore::CSSLinearGradientValue::customCSSText): this routine was updated to do correct parsing for midpoints
        (WebCore::CSSRadialGradientValue::customCSSText):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientColorStop::CSSGradientColorStop): this function stores if a stop is a midpoint
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGradientColorStops): this function now allows color stops with no color

2014-10-01  Chris Dumez  <cdumez@apple.com>

        Add basic caching for Document.cookie API
        https://bugs.webkit.org/show_bug.cgi?id=137225

        Reviewed by Alexey Proskuryakov.

        While profiling the load of nytimes.com, I noticed that the site is
        accessing ~250 times document.cookie, just during page load. Accessing
        document.cookie is currently slow because we:
        - Call WebPlatformStrategies::cookiesForDOM() virtual function
        - Send a sync IPC message to the Network process to retrieve the
          cookies
            - The Network process gets the list of cookies from CFNetwork then
              serializes the result to send it back to the WebProcess
        - We unserialize the cookies into an NSList of cookies
        - We filter-out the cookies that are 'httpOnly' and construct a new
          NSList of cookies
        - We create a WTF String out of the cookies NSList

        In the case of nytimes.com, it turns out that up to 100 calls to
        document.cookie() are made in the same event loop iteration. This patch
        thus caches / freezes the cookies until we return to the event
        loop so that consecutive calls to document.cookie() are extremely fast.
        Doing so seems to be sufficient to achieve a ~87% cache hit for
        nytimes.com page load.

        The cookies cache is invalidated whenever:
        - document.cookie is set
        - we return to the event loop
        - a network resource is loaded synchronously as it may cause cookies to
          be set before we return to the event loop

        Test: http/tests/cookies/sync-xhr-set-cookie-invalidates-cache.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::open):
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        (WebCore::Document::setCookieURL):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::setDOMCookieCache):
        (WebCore::Document::invalidateDOMCookieCache):
        (WebCore::Document::domCookieCacheExpiryTimerFired):
        (WebCore::Document::didLoadResourceSynchronously):
        * dom/Document.h:
        (WebCore::Document::domCookieCache):
        (WebCore::Document::isDOMCookieCacheValid):
        (WebCore::Document::setCookieURL): Deleted.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::didLoadResourceSynchronously):
        * dom/ScriptExecutionContext.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::loadResourceSynchronously):

2014-10-01  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Event classes
        https://bugs.webkit.org/show_bug.cgi?id=137284

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for Event classes.

        No new tests, no behavior change.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.h:
        * dom/ErrorEvent.h:
        * dom/Event.h:
        * dom/EventContext.cpp:
        (WebCore::MouseOrFocusEventContext::handleLocalEvents):
        * dom/FocusEvent.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::findKeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/MouseEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * dom/TextEvent.h:
        * dom/UIEvent.h:
        * dom/WheelEvent.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::eventType):
        (WebCore::isEnterKeyKeydownEvent):
        (WebCore::isLinkClick):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly):
        * html/HTMLFormElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::willDispatchEvent):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * html/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent):
        * html/InputType.cpp:
        (WebCore::InputType::shouldSubmitImplicitly):
        * html/InputType.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldSubmitImplicitly):
        * html/TextFieldInputType.h:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::defaultEventHandler):
        (WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::containsRelatedTarget):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsAppleEventListener::handleEvent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::SpinButtonElement::forwardEvent):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent):

2014-10-01  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Sprinkle range-based for-loops in GraphicsLayerTextureMapper, TextureMapperLayer
        https://bugs.webkit.org/show_bug.cgi?id=137271

        Reviewed by Sergio Villar Senin.

        Switch to using C++11 range-based for-loops in the
        GraphicsLayerTextureMapper and TextureMapperLayer classes.

        The for loops that remained unchanged either do further computation
        with the loop index or must iterate over the container in reverse.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::toTextureMapperLayerVector):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::paintSelfAndChildren):
        (WebCore::TextureMapperLayer::computeOverlapRegions):
        (WebCore::TextureMapperLayer::paintUsingOverlapRegions):
        (WebCore::TextureMapperLayer::~TextureMapperLayer):
        (WebCore::TextureMapperLayer::setChildren):
        (WebCore::TextureMapperLayer::descendantsOrSelfHaveRunningAnimations):
        (WebCore::TextureMapperLayer::applyAnimationsRecursively):

2014-10-01  Dan Bernstein  <mitz@apple.com>

        Windows build fix.

        * platform/network/cf/ResourceResponseCFNet.cpp:

2014-10-01  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r173423): [iOS] Sites with EV certificates appear as normal HTTPS sites
        https://bugs.webkit.org/show_bug.cgi?id=137262

        Reviewed by Antti Koivisto.

        No new tests, because the API test harness doesn’t run an HTTP server to test against.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformCertificateInfo): Return a CertificateInfo initialized
        with the certificate array from the response.

2014-09-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Enable multiple stack references allocation by allocateUninitialized
        https://bugs.webkit.org/show_bug.cgi?id=135293

        Reviewed by Benjamin Poulain.

        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::stackTop):
            Add stackTop method to check references are allocated easily.
        (WebCore::StackAllocator::allocateUninitialized):

2014-09-30  Chris Dumez  <cdumez@apple.com>

        Drop getPtr() overload taking a Document reference in argument
        https://bugs.webkit.org/show_bug.cgi?id=137280

        Reviewed by Daniel Bates.

        Drop getPtr() overload taking a Document reference in argument. This is
        no longer needed as the generic getPtr() function converts references
        into pointers just fine after r173765.

        No new tests, no behavior change.

        * dom/Document.h:
        (WTF::getPtr): Deleted.

2014-09-30  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ErrorString should be passed by reference
        https://bugs.webkit.org/show_bug.cgi?id=137257

        Reviewed by Joseph Pecoraro.

        Pass the leading ErrorString argument by reference, since it is always an out parameter.
        Clean up callsites where the error message is written.

        No new tests, no behavior changed.

        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::clearConsoleMessages):
        * inspector/DOMEditor.cpp:
        (WebCore::populateErrorString):
        (WebCore::DOMEditor::insertBefore):
        (WebCore::DOMEditor::removeChild):
        (WebCore::DOMEditor::setAttribute):
        (WebCore::DOMEditor::removeAttribute):
        (WebCore::DOMEditor::setOuterHTML):
        (WebCore::DOMEditor::replaceWholeText):
        * inspector/DOMEditor.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::enable):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        (WebCore::InspectorApplicationCacheAgent::getManifestForFrame):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        (WebCore::InspectorCSSAgent::didCreateNamedFlow):
        (WebCore::InspectorCSSAgent::regionOversetChanged):
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::getStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::assertStyleSheetForId):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::setProfilerEnabled):
        (WebCore::InspectorController::resume):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertDocument):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertEditableNode):
        (WebCore::InspectorDOMAgent::assertEditableElement):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::requestChildNodes):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::releaseBackendNodeIds):
        (WebCore::InspectorDOMAgent::setAttributeValue):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getAccessibilityPropertiesForNode):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::discardSearchResults):
        (WebCore::InspectorDOMAgent::inspect):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::hideHighlight):
        (WebCore::InspectorDOMAgent::moveTo):
        (WebCore::InspectorDOMAgent::undo):
        (WebCore::InspectorDOMAgent::redo):
        (WebCore::InspectorDOMAgent::markUndoableState):
        (WebCore::InspectorDOMAgent::focus):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::requestNode):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        (WebCore::InspectorDOMAgent::pushNodeByBackendIdToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::setInstrumentationBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::domTypeForName):
        (WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::enable):
        (WebCore::InspectorIndexedDBAgent::disable):
        (WebCore::assertDocument):
        (WebCore::assertIDBFactory):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        (WebCore::InspectorIndexedDBAgent::clearObjectStore):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::enable):
        (WebCore::InspectorLayerTreeAgent::disable):
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::idForNode):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::navigate):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::getResourceContent):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::setDocumentContent):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore::InspectorPageAgent::canShowDebugBorders):
        (WebCore::InspectorPageAgent::setShowDebugBorders):
        (WebCore::InspectorPageAgent::canShowFPSCounter):
        (WebCore::InspectorPageAgent::setShowFPSCounter):
        (WebCore::InspectorPageAgent::canContinuouslyPaint):
        (WebCore::InspectorPageAgent::setContinuousPaintingEnabled):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        (WebCore::InspectorPageAgent::assertFrame):
        (WebCore::InspectorPageAgent::assertDocumentLoader):
        (WebCore::InspectorPageAgent::setTouchEmulationEnabled):
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        (WebCore::InspectorPageAgent::getCompositingBordersVisible):
        (WebCore::InspectorPageAgent::setCompositingBordersVisible):
        (WebCore::InspectorPageAgent::snapshotNode):
        (WebCore::InspectorPageAgent::snapshotRect):
        (WebCore::InspectorPageAgent::handleJavaScriptDialog):
        (WebCore::InspectorPageAgent::archive):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::startCapturing):
        (WebCore::InspectorReplayAgent::stopCapturing):
        (WebCore::InspectorReplayAgent::replayToPosition):
        (WebCore::InspectorReplayAgent::replayToCompletion):
        (WebCore::InspectorReplayAgent::pausePlayback):
        (WebCore::InspectorReplayAgent::cancelPlayback):
        (WebCore::InspectorReplayAgent::switchSession):
        (WebCore::InspectorReplayAgent::insertSessionSegment):
        (WebCore::InspectorReplayAgent::removeSessionSegment):
        (WebCore::InspectorReplayAgent::findSession):
        (WebCore::InspectorReplayAgent::findSegment):
        (WebCore::InspectorReplayAgent::currentReplayState):
        (WebCore::InspectorReplayAgent::getAvailableSessions):
        (WebCore::InspectorReplayAgent::getSessionData):
        (WebCore::InspectorReplayAgent::getSegmentData):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        (WebCore::InspectorResourceAgent::getResponseBody):
        (WebCore::InspectorResourceAgent::replayXHR):
        (WebCore::InspectorResourceAgent::canClearBrowserCache):
        (WebCore::InspectorResourceAgent::clearBrowserCache):
        (WebCore::InspectorResourceAgent::canClearBrowserCookies):
        (WebCore::InspectorResourceAgent::clearBrowserCookies):
        (WebCore::InspectorResourceAgent::setCacheDisabled):
        (WebCore::InspectorResourceAgent::loadResource):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::canInspectWorkers):
        (WebCore::InspectorWorkerAgent::connectToWorker):
        (WebCore::InspectorWorkerAgent::disconnectFromWorker):
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        (WebCore::InspectorWorkerAgent::setAutoconnectToWorkers):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::clearMessages):
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::injectedScriptForEval):
        (WebCore::PageDebuggerAgent::setOverlayMessage):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::disable):
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        * inspector/PageRuntimeAgent.h:
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::setMonitoringXHREnabled):
        * inspector/WebConsoleAgent.h:
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::addInspectedNode):
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::resume):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        (WebCore::WorkerRuntimeAgent::run):
        * inspector/WorkerRuntimeAgent.h:

2014-09-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Stack overflow with enormous SVG filter
        https://bugs.webkit.org/show_bug.cgi?id=63290

        Prevent building an SVG filter if it has more than 200 FilterEffect nodes in its map 
        regardless whether they will be connected to its lastEffect or not. Also discard any
        filter which has more 100 contributing FilterEffect nodes in its tree.

        Reviewed by Dean Jackson.

        Tests: svg/filters/svg-deeply-nested-crash.html

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::collectEffects):
        (WebCore::FilterEffect::totalNumberOfEffectInputs):
        * platform/graphics/filters/FilterEffect.h:
        -- Add a method to return the total number of input FilterEffect's contributing to a FilterEffect.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        -- Do not build a filter if it has more than 200 FilterEffects in its map.
        (WebCore::RenderSVGResourceFilter::applyResource):
        -- Discard a filter after it was built if it has more than 100 FilterEffects in its tree.

2014-09-30  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for ContainerNode
        https://bugs.webkit.org/show_bug.cgi?id=137270

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for ContainerNode instead of isContainerNode()
        / toContainerNode(). Also kill the NODE_TYPE_CASTS() macro as this was
        its last user.

        No new tests, no behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::collectChildrenAndRemoveFromOldParent):
        (WebCore::ContainerNode::willRemoveChild):
        (WebCore::cloneChildNodesAvoidingDeleteButton):
        * dom/ContainerNode.h:
        (WebCore::Node::countChildNodes):
        (WebCore::Node::traverseToChildAt):
        (WebCore::Node::firstChild):
        (WebCore::Node::lastChild):
        (isType):
        (WebCore::isContainerNode): Deleted.
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromTree):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notify):
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromDocument):
        (WebCore::ChildNodeRemovalNotifier::notify):
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::insertBefore):
        (WebCore::Node::replaceChild):
        (WebCore::Node::removeChild):
        (WebCore::Node::appendChild):
        (WebCore::Node::setTextContent):
        * dom/Node.h:
        * dom/Range.cpp:
        (WebCore::Range::surroundContents):
        * dom/TextNodeTraversal.cpp:
        (WebCore::TextNodeTraversal::contentsAsString):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        * editing/Editor.cpp:
        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSiteTask::oldParent):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::copyWebVTTNodeToDOMTree):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingCSSSelectors):

2014-09-30  Roger Fong  <roger_fong@apple.com>

        [Windows] Remove an errant WTFLogAlways that makes test output hard to read and generates stderr output.

        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading):

2014-09-30  David Hyatt  <hyatt@apple.com>

        Remove a multicolumn ASSERT and replace with a guard.
        https://bugs.webkit.org/show_bug.cgi?id=137272
        
        Reviewed by Alexey Proskuryakov.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::isValidColumnSpanner):
        For now remove the assert that is tripping and replace it with a guard
        until we can figure out why it's getting hit.

2014-09-30  Christophe Dumez  <cdumez@apple.com>

        Generalize is<>() / downcast<>() support to all types
        https://bugs.webkit.org/show_bug.cgi?id=137243

        Reviewed by Benjamin Poulain.

        Generalize is<>() / downcast<>() support to all types, not just Nodes.
        To achieve this, the following changes were made:
        - Move is<> / downcast<>() and NodeTypeCastTraits from Node.h to a new
          wtf/TypeCasts.h header. Also move them to WTF namespace instead of
          WebCore namespace as they can be used for classes in other namespaces
          (e.g. WebKit namespace).
        - Rename NodeTypeCastsTraits to TypeCastTraits as it can be specialized
          for non-Nodes.
        - Since C++ does not allow template specializations in different
          namespaces, I had to move all the SPECIALIZE_TYPE_TRAITS_*() uses to
          the global scope and use the WebCore:: namespace explicitly in those.
          This is a bit unfortunate but I couldn't find a better way.

        This patch also takes care of supporting is<>() / downcast<>() for
        the WorkerGlobalScope class, which does not derive from Node.

        No new tests, no behavior change.

        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * dom/Attr.h:
        (isType):
        (WebCore::isAttr): Deleted.
        * dom/CDATASection.h:
        (isType):
        (WebCore::isCDATASection): Deleted.
        * dom/CharacterData.h:
        (isType):
        (WebCore::isCharacterData): Deleted.
        * dom/Comment.h:
        (isType):
        (WebCore::isComment): Deleted.
        * dom/Document.h:
        (isType):
        (WebCore::isDocument): Deleted.
        * dom/DocumentFragment.h:
        (isType):
        (WebCore::isDocumentFragment): Deleted.
        * dom/DocumentType.h:
        (isType):
        (WebCore::isDocumentType): Deleted.
        * dom/Element.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        * dom/Node.h:
        (WebCore::is): Deleted.
        (WebCore::downcast): Deleted.
        * dom/ProcessingInstruction.h:
        (isType):
        (WebCore::isProcessingInstruction): Deleted.
        * dom/PseudoElement.h:
        (isType):
        (WebCore::isPseudoElement): Deleted.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::createdMessagePort):
        (WebCore::ScriptExecutionContext::destroyedMessagePort):
        (WebCore::ScriptExecutionContext::vm):
        * dom/ScriptExecutionContext.h:
        * dom/ShadowRoot.h:
        (isType):
        (WebCore::isShadowRoot): Deleted.
        * dom/StyledElement.h:
        (isType):
        (WebCore::isStyledElement): Deleted.
        * dom/Text.h:
        (isType):
        (WebCore::isText): Deleted.
        * dom/make_names.pl:
        (printTypeHelpers):
        (printTypeHelpersHeaderFile):
        * html/HTMLDocument.h:
        (isType):
        (WebCore::isHTMLDocument): Deleted.
        * html/HTMLElement.h:
        (isType):
        (WebCore::isHTMLElement): Deleted.
        * html/HTMLFormControlElement.h:
        (isType):
        (WebCore::isHTMLFormControlElement): Deleted.
        * html/HTMLFrameElementBase.h:
        (isType):
        (WebCore::isHTMLFrameElementBase): Deleted.
        * html/HTMLFrameOwnerElement.h:
        (isType):
        (WebCore::isHTMLFrameOwnerElement): Deleted.
        * html/HTMLMediaElement.h:
        (isType):
        (WebCore::isHTMLMediaElement): Deleted.
        * html/HTMLPlugInElement.h:
        (isType):
        (WebCore::isHTMLPlugInElement): Deleted.
        * html/HTMLPlugInImageElement.h:
        (isType):
        (WebCore::isHTMLPlugInImageElement): Deleted.
        * html/HTMLTableCellElement.h:
        (isType):
        (WebCore::isHTMLTableCellElement): Deleted.
        * html/HTMLTableSectionElement.h:
        (isType):
        (WebCore::isHTMLTableSectionElement): Deleted.
        * html/HTMLTextFormControlElement.h:
        (isType):
        (WebCore::isHTMLTextFormControlElement): Deleted.
        * html/ImageDocument.h:
        (isType):
        (WebCore::isImageDocument): Deleted.
        * html/LabelableElement.h:
        (isType):
        (WebCore::isLabelableElement): Deleted.
        * html/MediaDocument.h:
        (isType):
        (WebCore::isMediaDocument): Deleted.
        * html/PluginDocument.h:
        (isType):
        (WebCore::isPluginDocument): Deleted.
        * html/shadow/InsertionPoint.h:
        (isType):
        (WebCore::isInsertionPoint): Deleted.
        * html/shadow/TextControlInnerElements.h:
        (isType):
        (WebCore::isTextControlInnerTextElement): Deleted.
        * html/track/WebVTTElement.h:
        (isType):
        (WebCore::isWebVTTElement): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForNonDocumentContext):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeRequestFromCache):
        (WebCore::MemoryCache::removeRequestFromSessionCaches):
        * mathml/MathMLElement.h:
        (isType):
        (WebCore::isMathMLElement): Deleted.
        * svg/SVGAnimateElementBase.h:
        (isType):
        (WebCore::isSVGAnimateElementBase): Deleted.
        * svg/SVGDocument.h:
        (isType):
        (WebCore::isSVGDocument): Deleted.
        * svg/SVGElement.h:
        (isType):
        (WebCore::isSVGElement): Deleted.
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (isType):
        (WebCore::isSVGFilterPrimitiveStandardAttributes): Deleted.
        * svg/SVGGradientElement.h:
        (isType):
        (WebCore::isSVGGradientElement): Deleted.
        * svg/SVGGraphicsElement.h:
        (isType):
        (WebCore::isSVGGraphicsElement): Deleted.
        * svg/SVGPolyElement.h:
        (isType):
        (WebCore::isSVGPolyElement): Deleted.
        * svg/SVGTextContentElement.h:
        (isType):
        (WebCore::isSVGTextContentElement): Deleted.
        * svg/animation/SVGSMILElement.h:
        (isType):
        (WebCore::isSVGSMILElement): Deleted.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::close):
        * workers/WorkerGlobalScope.h:
        (isType):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::~WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        (WebCore::WorkerMessagingProxy::connectToInspector):
        (WebCore::WorkerMessagingProxy::disconnectFromInspector):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):

2014-09-30  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Element
        https://bugs.webkit.org/show_bug.cgi?id=137241

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for Element instead of isElementNode() /
        toElement().

        No new tests, no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):
        (WebCore::createFromRenderer):
        (WebCore::AXObjectCache::handleLiveRegionCreated):
        (WebCore::AXObjectCache::handleMenuItemSelected):
        (WebCore::AXObjectCache::rootAXEditableElement):
        (WebCore::isNodeAriaVisible):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::canSetFocusAttribute):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
        (WebCore::AccessibilityNodeObject::isEnabled):
        (WebCore::AccessibilityNodeObject::isPressed):
        (WebCore::AccessibilityNodeObject::isHovered):
        (WebCore::AccessibilityNodeObject::anchorElement):
        (WebCore::nativeActionElement):
        (WebCore::AccessibilityNodeObject::actionElement):
        (WebCore::AccessibilityNodeObject::mouseButtonListener):
        (WebCore::AccessibilityNodeObject::titleElementText):
        (WebCore::AccessibilityNodeObject::helpText):
        (WebCore::AccessibilityNodeObject::hierarchicalLevel):
        (WebCore::AccessibilityNodeObject::title):
        (WebCore::AccessibilityNodeObject::text):
        (WebCore::accessibleNameForNode):
        (WebCore::AccessibilityNodeObject::canSetFocusAttribute):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::hasTagName):
        (WebCore::AccessibilityObject::hasAttribute):
        (WebCore::AccessibilityObject::element):
        (WebCore::AccessibilityObject::classList):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::checkboxOrRadioRect):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::accessKey):
        (WebCore::AccessibilityRenderObject::setElementAttributeValue):
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::correspondingLabelForControlElement):
        (WebCore::AccessibilityRenderObject::renderObjectIsObservable):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        (WebCore::AccessibilityRenderObject::setAccessibleName):
        (WebCore::AccessibilityRenderObject::stringRoleForMSAA):
        * accessibility/AccessibilitySearchFieldButtons.cpp:
        (WebCore::AccessibilitySearchFieldCancelButton::press):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::styledNode):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::locateCousinList):
        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        (WebCore::ContainerNode::notifyChildRemoved):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromTree):
        (WebCore::assertConnectedSubrameCountIsConsistent):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::elementFromPoint):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        * dom/Element.h:
        (WebCore::isElement):
        (WebCore::Node::hasAttributes):
        (WebCore::Node::attributes):
        (WebCore::Node::parentElement):
        * dom/ElementTraversal.h:
        (WebCore::Traversal<Element>::nextTemplate):
        (WebCore::ElementTraversal::previousIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudoSkippingChildren):
        (WebCore::ElementTraversal::pseudoAwarePreviousSibling):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::normalize):
        (WebCore::Node::pseudoAwareFirstChild):
        (WebCore::Node::pseudoAwareLastChild):
        (WebCore::Node::computedStyle):
        (WebCore::Node::parentOrShadowHostElement):
        (WebCore::Node::rootEditableElement):
        (WebCore::Node::isEqualNode):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespacePrefix):
        (WebCore::Node::ancestorElement):
        (WebCore::appendAttributeDesc):
        (WebCore::Node::showNodePathForThis):
        (WebCore::Node::enclosingLinkEventParentOrSelf):
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::willRespondToMouseMoveEvents):
        (WebCore::Node::willRespondToMouseClickEvents):
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::nodeCanBeDistributed):
        * dom/Position.cpp:
        (WebCore::Position::element):
        * dom/Range.cpp:
        (WebCore::Range::getBorderAndTextQuads):
        * dom/ShadowRoot.h:
        (WebCore::Node::shadowRoot):
        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::namedItem):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::dummySpanAncestorForNode):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::isRemovableBlock):
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        * editing/Editor.cpp:
        (WebCore::Editor::isSpellCheckingEnabledFor):
        (WebCore::Editor::applyEditingStyleToBodyElement):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand):
        * editing/FrameSelection.cpp:
        (WebCore::removingNodeRemovesPosition):
        (WebCore::CaretBase::paintCaret):
        (WebCore::FrameSelection::debugRenderer):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::appendEndTag):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isMailPasteAsQuotationNode):
        (WebCore::haveSameTagName):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::isCheckable):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::propertyValueForNode):
        (HTMLConverterCaches::floatPropertyValueForNode):
        (HTMLConverterCaches::colorPropertyValueForNode):
        (HTMLConverter::aggregatedAttributesForAncestors):
        (HTMLConverter::aggregatedAttributesForElementAndItsAncestors):
        (HTMLConverter::_traverseNode):
        (WebCore::editingAttributedStringFromRange):
        * editing/htmlediting.cpp:
        (WebCore::unsplittableElementForPosition):
        (WebCore::enclosingBlock):
        (WebCore::enclosingElementWithTag):
        (WebCore::enclosingTableCell):
        (WebCore::enclosingAnchorElement):
        (WebCore::areIdenticalElements):
        (WebCore::isNonTableCellHTMLBlockElement):
        (WebCore::deprecatedEnclosingBlockFlowElement):
        (WebCore::rendererForCaretPainting):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::wrapWithNode):
        (WebCore::createMarkupInternal):
        (WebCore::createFragmentFromText):
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::fallbackSummary):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacentElement):
        (WebCore::contextElementForInsertion):
        (WebCore::HTMLElement::directionality):
        * html/HTMLFormControlElement.h:
        (WebCore::isHTMLFormControlElement):
        * html/HTMLMediaElement.h:
        (WebCore::isHTMLMediaElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::collectOptionInnerText):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::removedFrom):
        * html/HTMLSummaryElement.cpp:
        (WebCore::isClickableControl):
        * html/HTMLTextFormControlElement.h:
        (WebCore::isHTMLTextFormControlElement):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachLater):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::htmlElement):
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::element):
        * html/shadow/InsertionPoint.h:
        (WebCore::parentElementForDistribution):
        (WebCore::shadowRootOfParentForDistribution):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::markFutureAndPastNodes):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::resetPseudoStates):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        * page/EventHandler.cpp:
        (WebCore::findDropZone):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::focusNavigationScopeOwnedByShadowHost):
        (WebCore::isFocusableShadowHost):
        (WebCore::adjustedTabIndex):
        (WebCore::FocusController::findFocusableElementAcrossFocusScope):
        (WebCore::FocusController::findElementWithExactTabIndex):
        (WebCore::nextElementWithGreaterTabIndex):
        (WebCore::previousElementWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableElement):
        (WebCore::FocusController::previousFocusableElement):
        (WebCore::FocusController::advanceFocusDirectionallyInContainer):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::title):
        (WebCore::HitTestResult::innerTextIfTruncated):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::innerElement):
        (WebCore::HitTestResult::innerNonSharedElement):
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::isOpen):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::element):
        (WebCore::RenderElement::nonPseudoElement):
        (WebCore::RenderElement::generatingElement):
        * rendering/RenderGrid.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::isRestartedPlugin):
        * rendering/RenderListItem.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::isChildAllowed):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addPDFURLRect):
        (WebCore::RenderObject::updateDragState):
        (WebCore::RenderObject::getUncachedPseudoStyle):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isEnabled):
        (WebCore::RenderTheme::isFocused):
        (WebCore::RenderTheme::isPressed):
        (WebCore::RenderTheme::isSpinUpButtonPartPressed):
        (WebCore::RenderTheme::isReadOnlyControl):
        (WebCore::RenderTheme::isHovered):
        (WebCore::RenderTheme::isSpinUpButtonPartHovered):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::nodeHasClass):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updatePressedState):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::isAutosizingContainer):
        (WebCore::TextAutosizer::containerContainsOneOfTags):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::isChildAllowed):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::detachDistributedChildren):
        (WebCore::Style::detachChildren):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::resolveTree):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::evaluate):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::nodeMatchesBasicTest):
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::endElementNs):

2014-09-30  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: use static Strings instead of AtomicStrings for replay input type tags
        https://bugs.webkit.org/show_bug.cgi?id=137086

        Reviewed by Joseph Pecoraro.

        This pattern doesn't work when we want to define some inputs in WebKit2,
        since the ReplayInputTypes class is generated from WebCore inputs only.

        Replace tag-checking uses of ReplayInputTypes with InputTraits<T>::type().
        Remove thread-local input types, and switch to using a plain const String instead
        of const AtomicString.

        No new tests, no behavior changed.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::SerializeInputToJSONFunctor::operator()):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::inputTypes): Deleted.
        * replay/AllReplayInputs.h:
        * replay/EventLoopInput.h:
        * replay/EventLoopInputDispatcher.cpp:
        (WebCore::EventLoopInputDispatcher::dispatchInput):
        * replay/MemoizedDOMResult.cpp:
        (WebCore::MemoizedDOMResultBase::type):
        (JSC::InputTraits<MemoizedDOMResultBase>::type):
        * replay/MemoizedDOMResult.h:
        * replay/ReplayInputTypes.cpp: Removed.
        * replay/ReplayInputTypes.h: Removed.
        * replay/ReplayingInputCursor.cpp:
        (WebCore::ReplayingInputCursor::loadInput):
        * replay/SegmentedInputStorage.cpp:
        (WebCore::SegmentedInputStorage::load):
        (WebCore::SegmentedInputStorage::store):
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<NondeterministicInputBase>::encodeValue):
        (JSC::EncodingTraits<NondeterministicInputBase>::decodeValue):

2014-09-30  Eric Carlson  <eric.carlson@apple.com>

        [Mac] MediaPlayerPrivateQTKit should not use FrameView
        https://bugs.webkit.org/show_bug.cgi?id=137119

        Reviewed by Carlos Garcia Campos.

        Remove obsolete QTKit code that would fall back to rendering into an NSView.
        Aside from being dead code, it was only used when accelerated compositing
        was not enabled and tha hasn't been possible for a long time, it required a
        layering violation to get the FrameView.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::currentRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateQTKit::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivateQTKit::hasSetUpVideoRendering):
        (WebCore::MediaPlayerPrivateQTKit::setSize):
        (WebCore::MediaPlayerPrivateQTKit::paint):
        (WebCore::mainThreadSetNeedsDisplay): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::detachQTMovieView): Deleted.
        (-[WebCoreMovieObserver menuForEventDelegate:]): Deleted.
        (-[WebCoreMovieObserver setView:]): Deleted.

2014-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GtkPopupMenu implementation to WebPopupMenuProxyGtk
        https://bugs.webkit.org/show_bug.cgi?id=137193

        Reviewed by Gustavo Noronha Silva.

        Remove GtkPopupMenu from platform.

        * PlatformGTK.cmake:
        * platform/gtk/GtkPopupMenu.cpp: Removed.
        * platform/gtk/GtkPopupMenu.h: Removed.

2014-09-30  Zan Dobersek  <zdobersek@igalia.com>

        Avoid copying the iterated-over items in range-based for-loops in RenderGrid
        https://bugs.webkit.org/show_bug.cgi?id=137246

        Reviewed by Sergio Villar Senin.

        Adjust the range-based for-loops in RenderGrid to avoid the unnecessary copying
        of the items that are being iterated.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
        (WebCore::RenderGrid::insertItemIntoGrid):
        (WebCore::RenderGrid::gridAreaBreadthForChild):

2014-09-29  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Use modern for-loops in RenderGrid
        https://bugs.webkit.org/show_bug.cgi?id=137214

        Reviewed by Darin Adler.

        New code is already using modern range based for loops. We had some
        "old" code pending to be migrated.

        No new tests as there is no change in functionality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::layoutGridItems):

2014-08-01  Sergio Villar Senin  <svillar@igalia.com>

        Caret not shown at the end of line in overtype mode
        https://bugs.webkit.org/show_bug.cgi?id=135508

        Reviewed by Ryosuke Niwa.

        When overtype mode is enabled we usually replace the 'normal'
        blinking caret shown in contenteditable elements by a block cursor
        that covers the next character to be replaced. The exception is the
        end of line where we fallback to the blinking caret even in overtype
        mode (as there is no next character to replace).

        We were not showing anything at the end of lines in overtype mode
        because the detection of the end of line was incorrect and not very
        understandable. Replaced the old code with a proper and clean end of
        line detection mechanism compatible with bidi text.

        Tests: editing/selection/block-cursor-overtype-mode-end-of-line-rtl.html
               editing/selection/block-cursor-overtype-mode-end-of-line.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearance):
        * editing/VisibleUnits.cpp:
        (WebCore::isLogicalEndOfLine):
        * editing/VisibleUnits.h:

2014-09-29  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: InjectedScripts should not be profiled or displayed in Timeline
        https://bugs.webkit.org/show_bug.cgi?id=136806

        Reviewed by Timothy Hatcher.

        Instead of creating timeline records for injected scripts, suspend profiling
        of the current page before and after calling injected script functions.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willCallInjectedScriptFunction):
        (WebCore::InspectorController::didCallInjectedScriptFunction):

2014-09-29  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: InspectorValues should use references for out parameters
        https://bugs.webkit.org/show_bug.cgi?id=137190

        Reviewed by Joseph Pecoraro.

        Clean up some call sites to explicitly check for cast success, and simplify
        some exceptional control flows.

        No new tests, no behavior changed.

        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspectImpl):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::computePseudoClassMask):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        (WebCore::parseConfigColor):
        (WebCore::parseQuad):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        (WebCore::InspectorDOMAgent::highlightFrame):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorIndexedDBAgent.cpp: Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::replayToPosition):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        * inspector/InspectorWorkerAgent.cpp:

2014-09-29  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Document
        https://bugs.webkit.org/show_bug.cgi?id=137221

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for Document instead of isDocumentNode() /
        toDocument().

        No new tests, no behavior change.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::document):
        (WebCore::Geolocation::frame):
        (WebCore::Geolocation::page):
        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::document):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::permission):
        (WebCore::Notification::requestPermission):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::document):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::allowDatabaseAccess):
        (WebCore::DatabaseContext::databaseExceededQuota):
        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
        (WebCore::WebSocketHandshake::clientHandshakeRequest):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::Peer):
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * bindings/js/DOMConstructorWithDocument.h:
        (WebCore::DOMConstructorWithDocument::document):
        * bindings/js/DOMRequestState.h:
        (WebCore::DOMRequestState::DOMRequestState):
        (WebCore::DOMRequestState::clear):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::constructJSAudioContext):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptState.cpp:
        (WebCore::frameFromExecState):
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::document):
        * dom/Comment.cpp:
        (WebCore::Comment::create):
        * dom/ContainerNode.cpp:
        (WebCore::checkAcceptChild):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        * dom/Document.h:
        (WebCore::isDocument):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::create):
        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        * dom/EventDispatcher.cpp:
        (WebCore::WindowEventContext::WindowEventContext):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::document):
        * dom/Node.cpp:
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupPrefix):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::Node::removedLastRef):
        * dom/Range.cpp:
        (WebCore::Range::create):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        * dom/Text.cpp:
        (WebCore::Text::create):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * html/HTMLDocument.h:
        (WebCore::isHTMLDocument):
        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::document):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::insertedInto):
        * html/ImageDocument.h:
        (WebCore::isImageDocument):
        * html/MediaDocument.h:
        (WebCore::isMediaDocument):
        * html/PluginDocument.h:
        (WebCore::isPluginDocument):
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::ownerDocument):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::initialize):
        * html/track/VTTRegion.h:
        (WebCore::VTTRegion::ownerDocument):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::assertDocument):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::innerParentNode):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::frameForScriptExecutionContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::corsPolicyPreventedLoad):
        (WebCore::TextTrackLoader::notifyFinished):
        (WebCore::TextTrackLoader::load):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
        * page/Crypto.cpp:
        (WebCore::Crypto::document):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::document):
        (WebCore::DOMWindow::styleMedia):
        (WebCore::DOMWindow::getComputedStyle):
        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::dragEnteredOrUpdated):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/History.cpp:
        (WebCore::History::go):
        * page/SpatialNavigation.cpp:
        (WebCore::scrollInDirection):
        (WebCore::scrollableEnclosingBoxOrParentFrameForNodeInDirection):
        (WebCore::canScrollInDirection):
        (WebCore::nodeRectInAbsoluteCoordinates):
        * svg/SVGDocument.h:
        (WebCore::isSVGDocument):
        * testing/Internals.cpp:
        (WebCore::Internals::contextDocument):
        (WebCore::Internals::frame):
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):
        (WebCoreTestSupport::resetInternalsObject):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::document):
        (WebCore::XMLHttpRequest::open):

2014-09-29  David Hyatt  <hyatt@apple.com>

        REGRESSION (r168046): Confused column spans when combined with dynamic animations
        https://bugs.webkit.org/show_bug.cgi?id=134048.

        Reviewed by Dean Jackson.

        Added fast/multicol/multicol-fieldset-span-changes.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::processPossibleSpannerDescendant):
        Refactor handling of insertions into the multicolumn flow thread into
        a helper function, processPossibleSpannerDescendant. This makes it easier
        to call the code from more than one place.

        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        Modify the nested columns span shifting code to avoid problems. The
        new code suppresses notifications and does the move of the spanner back
        into the original spot *before* removing the placeholder. This ensures that
        the placeholder parent still exists.
        
        The stale placeholder is then removed and destroyed after the spanner has been put back
        into place.

        (WebCore::RenderMultiColumnFlowThread::handleSpannerRemoval):
        (WebCore::RenderMultiColumnFlowThread::flowThreadRelativeWillBeRemoved):
        Refactor the removal notifications for spanners into a helper function so that it can
        be called to do cleanup from the code that cleans up stale placeholders on a shift.

        * rendering/RenderMultiColumnFlowThread.h:
        Modified to add the new helpers.

2014-09-29  Christophe Dumez  <cdumez@apple.com>

        Use SPECIALIZE_TYPE_TRAITS_*() macro for MathMLElement
        https://bugs.webkit.org/show_bug.cgi?id=137222

        Reviewed by Ryosuke Niwa.

        Use SPECIALIZE_TYPE_TRAITS_*() macro for MathMLElement instead of
        NODE_TYPE_CASTS() + NodeTypeCastTraits template specialization.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMathElement):
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::attributeChanged):
        * mathml/MathMLElement.h:
        (WebCore::isMathMLElement):
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild):

2014-09-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Remove MediaPlayerPrivateQTKit frame rate code
        https://bugs.webkit.org/show_bug.cgi?id=137217

        Reviewed by Carlos Garcia Campos.

        No new tests, this removes obsolete code.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit):
        (WebCore::MediaPlayerPrivateQTKit::play):
        (WebCore::MediaPlayerPrivateQTKit::pause):
        (WebCore::MediaPlayerPrivateQTKit::didEnd):
        (WebCore::MediaPlayerPrivateQTKit::repaint):
        (WebCore::MediaPlayerPrivateQTKit::paint):

2014-09-29  Chris Fleizach  <cfleizach@apple.com>

        AX: in an aria-labelledby computation, do not traverse into elements whose nameFrom value does not include 'contents'
        https://bugs.webkit.org/show_bug.cgi?id=136714

        Reviewed by Darin Adler.

        There are certain ARIA elements that tell us we should not query their children when determining the name of the object.
        Those ones have the "nameFrom" property set to "author" instead of "contents." WebKit needs to honor that status.

        Test: accessibility/aria-namefrom-author.html
              Modified: accessibility/aria-labelledby-with-descendants.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::shouldUseAccessiblityObjectInnerText):
        (WebCore::shouldAddSpaceBeforeAppendingNextElement):
        (WebCore::appendNameToStringBuilder):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        (WebCore::accessibleNameForNode):
        (WebCore::AccessibilityNodeObject::accessibilityDescriptionForElements):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibleNameDerivesFromContent):
        (WebCore::initializeRoleMap):
        * accessibility/AccessibilityObject.h:

2014-09-29  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Optimize media controls AirPlay discovery
        https://bugs.webkit.org/show_bug.cgi?id=137180

        Reviewed by Darin Adler.
        
        AirPlay discovery mode uses increases power consumption, so don't enable it when there
        is no chance an AirPlay target picker will be useful.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS): Initialize isListeningForPlaybackTargetAvailabilityEvent.
        (ControllerIOS.prototype.addVideoListeners): Don't enable register wireless playback event
            listeners, it isn't possible to show the target picker until there is an inline controller.
        (ControllerIOS.prototype.removeVideoListeners): Call setShouldListenForPlaybackTargetAvailabilityEvent.
        (ControllerIOS.prototype.setControlsType): Add wireless event listers on when not showing 
            the one button controller.
        (ControllerIOS.prototype.updateStatusDisplay): Unregister wireless event listeners when the
            media element is in an error state.
        (ControllerIOS.prototype.setShouldListenForPlaybackTargetAvailabilityEvent): New, add or
            remove event listeners. 

2014-09-29  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Remove obsolete playbackTargetAvailabilityChanged methods
        https://bugs.webkit.org/show_bug.cgi?id=137179

        Reviewed by Darin Adler.

        No new tests, this just removes unused code.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackTargetAvailabilityChanged): Deleted.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::playbackTargetAvailabilityChanged): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerPlaybackTargetAvailabilityChanged): Deleted.

2014-09-29  Christophe Dumez  <cdumez@apple.com>

        Use the new is<>() / downcast<>() for ShadowRoot and StyledElement
        https://bugs.webkit.org/show_bug.cgi?id=137199

        Reviewed by Darin Adler.

        Use the new is<>() / downcast<>() for ShadowRoot and StyledElement and
        move towards getting rid of the NODE_TYPE_CASTS() macro.

        No new tests, no behavior change.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAllRules):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initElement):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::findSiblingForStyleSharing):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::moveToParentOrShadowHost):
        (WebCore::EventRelatedNodeResolver::findHostOfTreeScopeInTargetTreeScope):
        (WebCore::eventTargetRespectingTargetRules):
        (WebCore::EventPath::EventPath):
        * dom/Node.cpp:
        (WebCore::Node::containingShadowRoot):
        (WebCore::Node::parentOrShadowHostElement):
        (WebCore::Node::showNodePathForThis):
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::traverseParent):
        * dom/ShadowRoot.h:
        (WebCore::isShadowRoot):
        (WebCore::Node::shadowRoot):
        (WebCore::Node::parentOrShadowHostNode):
        * dom/StyledElement.h:
        (WebCore::StyledElement::presentationAttributeStyle):
        (WebCore::isStyledElement):
        * dom/Text.cpp:
        (WebCore::isSVGShadowText):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::focusedElement):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
        * 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):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::inlineStylePropertyForElement):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::owner):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::title):
        * testing/Internals.cpp:
        (WebCore::Internals::shadowRoot):
        (WebCore::Internals::shadowRootType):
        (WebCore::Internals::includerFor):

2014-09-29  Christophe Dumez  <cdumez@apple.com>

        Use the new is<>() / downcast<>() for Text Nodes
        https://bugs.webkit.org/show_bug.cgi?id=137188

        Reviewed by Darin Adler.

        Use the new is<>() / downcast<>() functions for Text Nodes instead of
        isText() / toText().

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        * dom/Node.cpp:
        (WebCore::Node::normalize):
        * dom/Position.cpp:
        (WebCore::Position::containerNode):
        (WebCore::Position::containerText):
        (WebCore::Position::isRenderedCharacter):
        (WebCore::Position::leadingWhitespacePosition):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::getBorderAndTextQuads):
        * dom/Text.cpp:
        (WebCore::earliestLogicallyAdjacentTextNode):
        (WebCore::latestLogicallyAdjacentTextNode):
        * dom/Text.h:
        (WebCore::isText):
        * dom/TextNodeTraversal.cpp:
        (WebCore::TextNodeTraversal::contentsAsString):
        * dom/TextNodeTraversal.h:
        (WebCore::TextNodeTraversal::firstTextChildTemplate):
        (WebCore::TextNodeTraversal::firstTextWithinTemplate):
        (WebCore::TextNodeTraversal::traverseNextTextTemplate):
        (WebCore::TextNodeTraversal::nextSibling):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::isNewLineAtPosition):
        (WebCore::ApplyBlockElementCommand::endOfNextParagrahSplittingTextNodesIfNeeded):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitTextAtEnd):
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::canRebalance):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTab):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        * editing/VisibleUnits.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * editing/htmlediting.cpp:
        (WebCore::lineBreakExistsAtPosition):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedText):
        (WebCore::replaceChildrenWithFragment):
        (WebCore::replaceChildrenWithText):
        * html/HTMLElement.cpp:
        (WebCore::mergeWithNextTextNode):
        (WebCore::HTMLElement::setOuterHTML):
        (WebCore::HTMLElement::setOuterText):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasFallbackContent):
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setText):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::positionForIndex):
        (WebCore::HTMLTextFormControlElement::indexForPosition):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setNodeValue):
        * rendering/RenderCombineText.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::textNode):
        * rendering/svg/RenderSVGInlineText.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::detachDistributedChildren):
        (WebCore::Style::detachChildren):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::resolveTree):

2014-09-29  Christophe Dumez  <cdumez@apple.com>

        Remove remaining uses of NODE_TYPE_CASTS() from html/
        https://bugs.webkit.org/show_bug.cgi?id=137172

        Reviewed by Darin Adler.

        Remove remaining uses of NODE_TYPE_CASTS() from html/ and use the new
        SPECIALIZE_TYPE_TRAITS_*() macro instead so that is<>() / downcast<>()
        works for those types.

        No new tests, no behavior change.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):
        (WebCore::matchesFutureCuePseudoClass):
        (WebCore::matchesPastCuePseudoClass):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        The new casting function found a bad cast from a StyledElement to VTTElement.
        Those two types are unrelated as VTTElement inherits directly from Element.
        Knowing that |element| in this method cannot be a VTTElement simplifies the
        logic a bit.

        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::findFirstEnteringInsertionPoints):
        (WebCore::NodeRenderingTraversal::findLastEnteringInsertionPoints):
        (WebCore::NodeRenderingTraversal::traverseParent):
        * html/HTMLLabelElement.cpp:
        (WebCore::nodeAsSupportedLabelableElement):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::innerTextElement):
        * html/LabelableElement.h:
        (WebCore::isLabelableElement):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureInsertionPointList):
        * html/shadow/InsertionPoint.h:
        (WebCore::isInsertionPoint):
        (WebCore::isActiveInsertionPoint):
        (WebCore::parentNodeForDistribution):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::isTextControlInnerTextElement):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::copyWebVTTNodeToDOMTree):
        (WebCore::VTTCue::markFutureAndPastNodes):
        * html/track/WebVTTElement.h:
        (WebCore::isWebVTTElement):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTTreeBuilder::constructTreeFromToken):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::detachChildren):

2014-09-29  Christophe Dumez  <cdumez@apple.com>

        Make is<>() / downcast<>() work for HTMLDocument and its subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137169

        Reviewed by Darin Adler.

        Make is<>() / downcast<>() work for HTMLDocument and its subclasses by
        using the SPECIALIZE_TYPE_TRAITS_*() macro. Drop the DOCUMENT_TYPE_CASTS()
        macro as it is no longer needed.

        No new tests, no behavior change.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::processHttpEquiv):
        (WebCore::eventTargetElementForDocument):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore::Element::updateName):
        (WebCore::Element::updateId):
        * html/HTMLDocument.h:
        (WebCore::isHTMLDocument):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::matchesReadWritePseudoClass):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::document):
        * html/ImageDocument.h:
        (WebCore::isImageDocument):
        * html/MediaDocument.h:
        (WebCore::isMediaDocument):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/PluginDocument.h:
        (WebCore::isPluginDocument):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        * page/FrameView.cpp:
        (WebCore::determineLayerFlushThrottleState):

2014-09-29  Bruno de Oliveira Abinader  <bruno.d@partner.samsung.com>

        Revert "Support for :enabled selector on Anchor & Area elements"
        https://bugs.webkit.org/show_bug.cgi?id=134826

        Reviewed by Darin Adler.

        HTML spec has been modified [1] to disable support for :enabled CSS
        selector on Anchor, Area & Link elements, after discussion on W3C
        Bugzilla [2].

        This reverts r171671.

        [1] https://html5.org/r/8818
        [2] https://www.w3.org/Bugs/Public/show_bug.cgi?id=26622

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isEnabled):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):

2014-09-29  Darin Adler  <darin@apple.com>

        Tweak and tighten SVG font converter
        https://bugs.webkit.org/show_bug.cgi?id=136956

        Reviewed by Myles Maxfield.

        * svg/SVGToOTFFontConversion.cpp: Fixed copyright date.
        (WebCore::overwrite32): Changed to use normal subscripting for clarity.
        (WebCore::overwrite16): Added.
        (WebCore::SVGToOTFFontConverter::GlyphData::GlyphData): Added a move
        to make constructing each GlyphData less expensive.
        (WebCore::SVGToOTFFontConverter::KerningData): Removed the < operator
        since it the struct contains more than what we want to sort it by, so it's
        not elegant to build the sorting rule into the struct.
        (WebCore::SVGToOTFFontConverter): Removed "k" prefix from some constants.
        Replaced many function templates with non-template functions. Changed
        key type for m_codepointToIndexMap to UChar32.
        (WebCore::integralLog2): Tweaked formatting.
        (WebCore::SVGToOTFFontConverter::appendCMAPTable): Removed a stray
        cast that doesn't have any effect. Use the Glyph type to index m_glyphs.
        (WebCore::SVGToOTFFontConverter::appendHEADTable): Append the magic
        number in a more straightforward way.
        (WebCore::clampTo): Tweak formatting of the template function.
        (WebCore::SVGToOTFFontConverter::appendHHEATable): Made some minor
        style changes and improved some comments.
        (WebCore::SVGToOTFFontConverter::appendOS2Table): Made some minor
        style changes and tightened up code that did parsing a bit, removing the
        dynamically allocated array for the fixed length Panose number.
        Also use first and last instead of hand-coded versions of those.
        (WebCore::appendValidCFFString): Renamed.
        (WebCore::SVGToOTFFontConverter::appendCFFTable): Made various tweaks,
        including more specific of null for the "no weight" value instead of
        either empty or null.
        (WebCore::SVGToOTFFontConverter::appendVORGTable): Simplified some of
        the numeric parsing, since toInt is guaranteed to return 0 when it also
        would return "false" for ok. Also got rid of a local vector and instead
        just fixed up the size of the table afterward.
        (WebCore::SVGToOTFFontConverter::appendVHEATable): Tweaked comment.
        (WebCore::SVGToOTFFontConverter::addCodepointRanges): Use isValidKey
        instead of a local hardcoded rule to check hash table key validity.
        Check for zero in the result of get rather than using find on the HashMap.
        (WebCore::SVGToOTFFontConverter::addCodepointRanges): Ditto.
        (WebCore::SVGToOTFFontConverter::addGlyphNames): Ditto.
        (WebCore::SVGToOTFFontConverter::addKerningPair): Added. Factored out from
        appendKERNSubtable to reduce template bloat and improve clarity.
        (WebCore::SVGToOTFFontConverter::appendKERNSubtable): Tweaked formatting.
        Moved the bulk of the function into non-template function.
        (WebCore::SVGToOTFFontConverter::finishAppendingKERNSubtable): Added.
        Non-template part of appendKERNSubtable. Also changed std::sort to supply
        custom comparison function rather than trying to use the < operator directly
        on KerningData.
        (WebCore::writeCFFEncodedNumber): Don't use powf just to multiply by
        2^16. It's pretty easy to do that with plain old multiplication.
        (WebCore::CFFBuilder::CFFBuilder): Renamed m_firstPoint to
        m_hasBoundingBox.
        (WebCore::CFFBuilder::boundingBox): Made this public and const and made
        the rest of the class private.
        (WebCore::CFFBuilder::updateBoundingBox): Used early return and revised
        to use m_hasBoundingBox.
        (WebCore::CFFBuilder::writePoint): Added. Used to keep the other
        functions below smaller.
        (WebCore::CFFBuilder::moveTo): Marked virtual and simplified using writePoint.
        Might find a way to simplify even further by teaching writePoint about
        the PathCoordinateMode.
        (WebCore::CFFBuilder::lineTo): Ditto.
        (WebCore::CFFBuilder::curveToCubic): Ditto. Also removed comment that said
        the function could be faster. Not sure that's important to state like this.
        (WebCore::SVGToOTFFontConverter::transcodeGlyphPaths): Changed into a
        non-template function. Tweaked logic and formatting a bit.
        (WebCore::SVGToOTFFontConverter::processGlyphElement): Changed into a
        non-template function. Moved the code from appendGlyphData in here.
        Use WTF::move so we don't copy the glyph paths when creating a GlyphData.
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Updated a bit for
        function changes above. Changed code to use isValidKey to check if we can
        add to m_codepointToIndexMap. Parse font-style rather than parsing
        font-weight twice. Round weights instead of truncating them. Change rule
        to "first wins" instead of "last wins" when there are multiple segments.
        Removed one vague and non-helpful comment.
        (WebCore::isFourByteAligned): Fixed minor formatting issue by making the
        function non-abstract. No reason not to hard-code the number 3 when the
        number four appears in the function name.
        (WebCore::calculateChecksum): Removed unneeded comment about why the
        checksum is little-endian; since this came from Windows documentation there
        is no doubt that little-endian is correct, so we don't need a comment creating
        fear, uncertainty, and doubt. If the checksum computation is wrong, it should
        become obvious that we have a bad checksum. Also changed the for loop to use
        its own loop variable instead of changing startingOffset, which is not logical.
        (WebCore::SVGToOTFFontConverter::appendTable): Updated for name changes.
        (WebCore::SVGToOTFFontConverter::convertSVGToOTFFont): Ditto. Also streamlined
        the checksum code a little. The comment still is a little peculiar; I was
        tempted to take it out.

2014-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove MainFrameScrollbarGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=137211

        Reviewed by Philippe Normand.

        This was only used by WebKit1.

        * PlatformGTK.cmake:
        * platform/gtk/MainFrameScrollbarGtk.cpp: Removed.
        * platform/gtk/MainFrameScrollbarGtk.h: Removed.

2014-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove IntPointGtk.cpp and IntRectGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=137209

        Reviewed by Philippe Normand.

        IntPointGtk is unused and IntRectGtk is only required by GTK+2 and
        only used when building with GTK+2 in GtkInputMethodFilter.cpp
        that can be easily replaced.

        * PlatformGTK.cmake:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/gtk/IntPointGtk.cpp: Removed.
        * platform/graphics/gtk/IntRectGtk.cpp: Removed.
        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::setCursorRect):

2014-09-02  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Handle percentages of indefinite sizes in minmax() and grid-auto-*
        https://bugs.webkit.org/show_bug.cgi?id=136453

        Reviewed by Darin Adler.

        After r165048 percentages of indefinite sizes were correctly
        computed to "auto". The problem is that we were not doing it when
        the percentage was inside the minmax() function. In those cases it
        should compute to min-content for the min track sizing function or
        to max-content for the max track sizing function.

        We were not doing it also for the track sizes specified in
        grid-auto-{column|row} properties. Fixed as well as the code is
        the same.

        Tests: fast/css-grid-layout/percent-of-indefinite-track-size-in-auto.html
               fast/css-grid-layout/percent-of-indefinite-track-size-in-minmax-crash.html
               fast/css-grid-layout/percent-of-indefinite-track-size.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridTrackSize):
        * rendering/RenderGrid.h:
        * rendering/style/GridLength.h:
        (WebCore::GridLength::isPercentage):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::GridTrackSize):

2014-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Move sources not using GTK+ from WebCorePlatformGTK_SOURCES to WebCore_SOURCES.

        * PlatformGTK.cmake:

2014-09-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr instead of PassOwnPtr|OwnPtr for NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=137201

        Reviewed by Darin Adler.

        No new tests, just refactoring patch.

        * dom/ElementRareData.h: Use std::unique_ptr instead of OwnPtr.
        (WebCore::ElementRareData::setAttributeMap): Use std::unique_ptr. 
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::create): ditto.

2014-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Replace wkGetGlyphsForCharacters() with CGFontGetGlyphsForUnichars()
        https://bugs.webkit.org/show_bug.cgi?id=137197

        Reviewed by Alexey Proskuryakov.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill): Use SPI call instead of WKSI call
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/spi/cocoa/CGFontUnicodeSupport.h: Added for SPI call.

2014-09-28  Christophe Dumez  <cdumez@apple.com>

        Automatically generate template specializations for most Elements
        https://bugs.webkit.org/show_bug.cgi?id=137174

        Reviewed by Darin Adler.

        Previously, the template specializations to make is<>() / downcast<>()
        work for HTML/SVG/MathML elements were only generated if
        "generateTypeHelpers" parameter was explicitly specified for the
        corresponding tag name in the *Tags.in file.

        We are however able to generate the template specializations for most
        types so this patch drops the "generateTypeHelpers" parameter and
        generates those template specializations by default.

        One case we cannot generate the specialization ifor is when a class is
        associated to several tag names but this patch updates the
        make_names.pl script to detect this and skip those classes.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/make_names.pl:
        (defaultTagPropertyHash):
        (printTypeHelpers):
        * html/HTMLTagNames.in:
        * mathml/mathtags.in:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        (WebCore::SVGAnimateColorElement::determinePropertyValueTypes):
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::~SVGAnimateElement): Deleted.
        (WebCore::SVGAnimateElement::hasValidAttributeType): Deleted.
        (WebCore::SVGAnimateElement::determineAnimatedPropertyType): Deleted.
        (WebCore::SVGAnimateElement::calculateAnimatedValue): Deleted.
        (WebCore::SVGAnimateElement::calculateToAtEndOfDurationValue): Deleted.
        (WebCore::SVGAnimateElement::calculateFromAndToValues): Deleted.
        (WebCore::SVGAnimateElement::calculateFromAndByValues): Deleted.
        (WebCore::propertyTypesAreConsistent): Deleted.
        (WebCore::SVGAnimateElement::resetAnimatedType): Deleted.
        (WebCore::applyCSSPropertyToTarget): Deleted.
        (WebCore::removeCSSPropertyFromTarget): Deleted.
        (WebCore::applyCSSPropertyToTargetAndInstances): Deleted.
        (WebCore::removeCSSPropertyFromTargetAndInstances): Deleted.
        (WebCore::notifyTargetAboutAnimValChange): Deleted.
        (WebCore::notifyTargetAndInstancesAboutAnimValChange): Deleted.
        (WebCore::SVGAnimateElement::clearAnimatedType): Deleted.
        (WebCore::SVGAnimateElement::applyResultsToTarget): Deleted.
        (WebCore::SVGAnimateElement::animatedPropertyTypeSupportsAddition): Deleted.
        (WebCore::SVGAnimateElement::isAdditive): Deleted.
        (WebCore::SVGAnimateElement::calculateDistance): Deleted.
        (WebCore::SVGAnimateElement::setTargetElement): Deleted.
        (WebCore::SVGAnimateElement::setAttributeName): Deleted.
        (WebCore::SVGAnimateElement::resetAnimatedPropertyType): Deleted.
        (WebCore::SVGAnimateElement::ensureAnimator): Deleted.
        * svg/SVGAnimateElement.h:
        (WebCore::isSVGAnimateElement): Deleted.
        * svg/SVGAnimateElementBase.cpp: Copied from Source/WebCore/svg/SVGAnimateElement.cpp.
        (WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
        (WebCore::SVGAnimateElementBase::~SVGAnimateElementBase):
        (WebCore::SVGAnimateElementBase::hasValidAttributeType):
        (WebCore::SVGAnimateElementBase::determineAnimatedPropertyType):
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
        (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        (WebCore::propertyTypesAreConsistent):
        (WebCore::SVGAnimateElementBase::resetAnimatedType):
        (WebCore::applyCSSPropertyToTarget):
        (WebCore::removeCSSPropertyFromTarget):
        (WebCore::applyCSSPropertyToTargetAndInstances):
        (WebCore::removeCSSPropertyFromTargetAndInstances):
        (WebCore::notifyTargetAboutAnimValChange):
        (WebCore::notifyTargetAndInstancesAboutAnimValChange):
        (WebCore::SVGAnimateElementBase::clearAnimatedType):
        (WebCore::SVGAnimateElementBase::applyResultsToTarget):
        (WebCore::SVGAnimateElementBase::animatedPropertyTypeSupportsAddition):
        (WebCore::SVGAnimateElementBase::isAdditive):
        (WebCore::SVGAnimateElementBase::calculateDistance):
        (WebCore::SVGAnimateElementBase::setTargetElement):
        (WebCore::SVGAnimateElementBase::setAttributeName):
        (WebCore::SVGAnimateElementBase::resetAnimatedPropertyType):
        (WebCore::SVGAnimateElementBase::ensureAnimator):
        * svg/SVGAnimateElementBase.h: Copied from Source/WebCore/svg/SVGAnimateElement.h.
        (WebCore::isSVGAnimateElementBase):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::parseAttribute):
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedAngle.cpp:
        * svg/SVGAnimatedBoolean.cpp:
        * svg/SVGAnimatedColor.cpp:
        * svg/SVGAnimatedInteger.cpp:
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLengthList.cpp:
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumberList.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/SVGAnimatedPath.cpp:
        * svg/SVGAnimatedPointList.cpp:
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        * svg/SVGAnimatedRect.cpp:
        * svg/SVGAnimatedString.cpp:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        * svg/SVGSetElement.h:
        * svg/svgtags.in:

2014-09-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr for ContextMenuController
        https://bugs.webkit.org/show_bug.cgi?id=137178

        Reviewed by Darin Adler.

        Switch to using std::unique_ptr instead of OwnPtr and PassOwnPtr
        for ContextMenuController class. Inherited class is changed by this use as well.

        No new tests, no behavior changes.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyContextMenuClient::customizeMenu):
        * loader/EmptyClients.h:
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::clearContextMenu):
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        (WebCore::ContextMenuController::showContextMenu):
        * page/ContextMenuController.h:

2014-09-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move ColorInputType class to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=137173

        Reviewed by Darin Adler.

        Replace uses of PassOwnPtr in code under ColorInputType class with std::unique_ptr.
        Child classes follow this change as well.

        No new tests, no behavior changes.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::didEndChooser):
        * html/ColorInputType.h:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::createColorChooser):
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::createColorChooser):
        * page/Chrome.h:
        * page/ChromeClient.h:

2014-09-28  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix some minor typos: psuedo -> pseudo
        https://bugs.webkit.org/show_bug.cgi?id=137192

        Reviewed by Alexey Proskuryakov.

        No new tests, no behavior change.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):

2014-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Move RenderThemeGtk.h from platform/gtk to rendering.

        I forgot to move this file in r173111.

        * rendering/RenderThemeGtk.h: Renamed from Source/WebCore/platform/gtk/RenderThemeGtk.h.

2014-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] WebKitAccessibleWrapperAtk should not depend on GTK
        https://bugs.webkit.org/show_bug.cgi?id=137177

        Reviewed by Martin Robinson.

        It's used to get the web view widget, but there's no GtkWidget in
        the web process and platformPageClient is always NULL.

        * PlatformGTK.cmake: Move accessibility sources to the WebCore
        sources list.
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkParentOfRootObject): Remove code to get view GtkWidget.
        * editing/atk/FrameSelectionAtk.cpp: Remove unneeded header include.

2014-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unused GtkPluginWidget
        https://bugs.webkit.org/show_bug.cgi?id=137176

        Reviewed by Csaba Osztrogonác.

        It was only used by WebKit1.

        * PlatformGTK.cmake:
        * platform/gtk/GtkPluginWidget.cpp: Removed.
        * platform/gtk/GtkPluginWidget.h: Removed.

2014-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [cairo] GraphicsContext should not depend on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=137175

        Reviewed by Martin Robinson.

        Remove the unused methods depending on GDK and simplify
        GraphicsContext::drawFocusRing() using only cairo API.

        * PlatformGTK.cmake: Move GraphicsContextCairo.cpp to the webcore sources.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Iterate the rectangles
        instead of creating a region for the rectangles and call gdk_cairo_region().
        (WebCore::GraphicsContext::setGdkExposeEvent): Deleted.
        (WebCore::GraphicsContext::gdkExposeEvent): Deleted.
        (WebCore::GraphicsContext::gdkWindow): Deleted.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):

2014-09-27  Chris Dumez  <cdumez@apple.com>

        HTMLPlugInElement::isUserObservable() is causing layout
        https://bugs.webkit.org/show_bug.cgi?id=137156

        Reviewed by Ryosuke Niwa.

        While profiling the page load of nytimes.com, I noticed that we were
        spending ~4-5% of cpu time in HTMLPlugInElement::isUserObservable().
        The reason is that the function calls pluginWidget(), which causes a
        layout update in HTMLObjectElement::renderWidgetForJSBindings(), to
        make sure the plugin is loaded and its renderer is created.

        HTMLPlugInElement::isUserObservable() shouldn't need to do a layout.
        This patch does the following to address the problem:
        - Rename renderWidgetForJSBindings() to renderWidgetLoadingPlugin()
          because this function is not always called from the JS Bindings
          nowadays. The new name makes it clearer that this will load the
          plugin if needed (to make sure the renderer is created, and by
          doing a layout).
        - Add a PluginLoadingPolicy argument to
          HTMLPlugInElement::pluginWidget() to let the caller control if the
          plugin should be loaded or not.
        - Update the call to pluginWidget() in isUserObservable() so that
          we do not attempt to load the plugin (thus not causing a layout).

        No new tests, no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetLoadingPlugin):
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings): Deleted.
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetLoadingPlugin):
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings): Deleted.
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetLoadingPlugin):
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings): Deleted.
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::pluginWidget):
        (WebCore::HTMLPlugInElement::isUserObservable):
        * html/HTMLPlugInElement.h:

2014-09-27  Christophe Dumez  <cdumez@apple.com>

        Use the new is<>() / downcast<>() for more Node subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137184

        Reviewed by Ryosuke Niwa.

        Use the new is<>() / downcast<>() for more Node subclasses:
        CDATASection, CharacterData, Comment, DocumentType,
        ProcessingInstruction, and PseudoElement.

        No new tests, no behavior change.

        * dom/CDATASection.h:
        (WebCore::isCDATASection):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/CharacterData.h:
        (WebCore::isCharacterData):
        * dom/Comment.h:
        (WebCore::isComment):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/DocumentType.h:
        (WebCore::isDocumentType):
        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules):
        (WebCore::nodeOrHostIfPseudoElement):
        * dom/Node.cpp:
        (WebCore::markAncestorsWithChildNeedsStyleRecalc):
        (WebCore::Node::pseudoAwarePreviousSibling):
        (WebCore::Node::pseudoAwareNextSibling):
        * dom/NodeTraversal.cpp:
        (WebCore::NodeTraversal::previousIncludingPseudo):
        (WebCore::NodeTraversal::nextIncludingPseudo):
        (WebCore::NodeTraversal::nextIncludingPseudoSkippingChildren):
        * dom/ProcessingInstruction.h:
        (WebCore::isProcessingInstruction):
        * dom/PseudoElement.h:
        (WebCore::isPseudoElement):
        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode):
        (WebCore::Range::processContentsBetweenOffsets):
        (WebCore::Range::checkNodeWOffset):
        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertFragment):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_traverseNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setInnerNode):
        (WebCore::HitTestResult::setInnerNonSharedNode):
        * rendering/RenderListItem.cpp:
        (WebCore::enclosingList):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::generatingPseudoHostElement):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::expandedNameLocalPart):

2014-09-27  Christophe Dumez  <cdumez@apple.com>

        Use the new is<>() / downcast<>() for Attr Nodes
        https://bugs.webkit.org/show_bug.cgi?id=137183

        Reviewed by Ryosuke Niwa.

        Use the new is<>() / downcast<>() for Attr Nodes instead of isAttr() /
        toAttr().

        No new tests, no behavior change.

        * dom/Attr.h:
        (WebCore::isAttr):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::adoptNode):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::sortBlock):
        (WebCore::XPath::NodeSet::sort):
        (WebCore::XPath::findRootNode):

2014-09-27  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: Playback position updates should be sent before the next event loop input is dispatched
        https://bugs.webkit.org/show_bug.cgi?id=137162

        Reviewed by Timothy Hatcher.

        To drive playback position updates in the Inspector UI, we send playbackHitPosition protocol
        messages as the replay backend dispatches inputs. However, right now the semantics of that
        message are muddy. The update is sent *after* the input at the offset is dispatched. This leads
        to unexpected results if the debugger pauses while the input is being dispatched: the frontend
        will only know about the previous (stale) playback position when the debugger pauses.

        With this patch, the backend sends the playbackHitPosition(segmentOffset=n, inputOffset=m)
        message when backend is about to dispatch input m, but has not yet begun to do so. Thus, any
        subsequent page execution events (profiling, debugger pauses, etc) until the next
        playbackHitPosition are caused by input m's being dispatched.

        * inspector/protocol/Replay.json: Clarify the message's semantics.
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::willDispatchInput):
        (WebCore::ReplayController::didDispatchInput):

2014-09-27  Benjamin Poulain  <bpoulain@apple.com>

        Chaining multiple :nth-child() does not work properly
        https://bugs.webkit.org/show_bug.cgi?id=137032

        Reviewed by Gavin Barraclough.

        When multiple :nth-child() are chained, the evaluation of each "An+B" could depend on
        the execution of the previous "An+B". The reason is that the register holding the position
        of the current element could be modified by the evaluation of "An+B".

        There are two cases in which the register was used as the destination of an operation:
        1) When A and B are positive, the counter would be the destination of "counter - B".
        2) When A is not 1 or 2, the modulo operation was not preserving the input register.

        For (1), we a copy of the counter in that case of generateElementIsNthChild().

        For (2), we also preserve a copy of the input if it is used by the operation. In this case,
        if the input register is one of the argument we need for idiv, we preserve it on the stack
        or in a register depending on what is available.

        This increases the register requirements by 2 in the worst case on x86. The extra registers
        can push generateElementIsNthChild() above the 4 available registers. To accomodate for that,
        minimumRegisterRequirements() reserve more registers on x86.

        The extra register pressure has strictly no effect on performance, x86_64 has 9 registers
        available without pushing anything. The extra allocation is only necessary for debugging.

        Tests: fast/selectors/nth-child-basics.html
               fast/selectors/nth-child-chained.html
               fast/selectors/nth-child-of-basics-2.html
               fast/selectors/nth-child-of-chained.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):

2014-09-26  Christophe Dumez  <cdumez@apple.com>

        Stop using legacy NODE_TYPE_CASTS() macro for HTML Elements
        https://bugs.webkit.org/show_bug.cgi?id=137137

        Reviewed by Benjamin Poulain.

        Stop using legacy NODE_TYPE_CASTS() macro for HTML Elements and use the
        new SPECIALIZE_TYPE_TRAITS_*() macro instead so that is<>() /
        downcast<>() works for those types.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::labelForElement):
        (WebCore::AccessibilityNodeObject::text):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetName):
        (webkitAccessibleGetDescription):
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance):
        (WebCore::pluginScriptObjectFromPluginViewBase):
        (WebCore::pluginScriptObject):
        (WebCore::pluginElementCustomPut):
        (WebCore::isPluginElement): Deleted.
        * bindings/objc/DOM.mm:
        (kitClass):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAllRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::elementHasDirectionAuto):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::makeContextStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::makeElementStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::isPlaceholderShown):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::assertConnectedSubrameCountIsConsistent):
        (WebCore::collectFrameOwners):
        (WebCore::disconnectSubframes):
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):
        (WebCore::Document::setBody):
        (WebCore::Document::iconURLs):
        (WebCore::Document::dispatchFullScreenChangeOrErrorEvent):
        (WebCore::Document::updateHoverActiveState):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Range.cpp:
        (WebCore::Range::createContextualFragment):
        * dom/make_names.pl:
        (printTypeHelpers):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isLegacyAppleStyleSpan):
        (WebCore::isStyleSpanOrSpanWithOnlyStyleAttribute):
        (WebCore::isSpanWithoutAttributesOrUnstyledStyleSpan):
        (WebCore::isEmptyFontTag):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeConflictingInlineStyleFromRun):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::shouldSplitTextElement):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::findFirstMarkable):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll):
        (WebCore::scanForForm):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::mergeWithNeighboringLists):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::elementCannotHaveEndTag):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/TextIterator.cpp:
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        (WebCore::shouldEmitExtraNewlineForNode):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addTableCellForElement):
        (HTMLConverter::_processElement):
        * editing/htmlediting.cpp:
        (WebCore::enclosingList):
        (WebCore::embeddedSublist):
        (WebCore::appendedSublist):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * editing/mac/EditorMac.mm:
        (WebCore::maybeCopyNodeAttributesToFragment):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateAppearance):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::shadowColorSwatch):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedInto):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNamedElementCache):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::matchesReadWritePseudoClass):
        (WebCore::HTMLElement::setOuterHTML):
        (WebCore::elementAffectsDirectionality):
        (WebCore::HTMLElement::directionality):
        (WebCore::HTMLElement::dirAttributeChanged):
        * html/HTMLElement.h:
        (WebCore::isHTMLElement):
        (WebCore::Node::hasTagName):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getNamedElements):
        * html/HTMLFrameElementBase.h:
        (WebCore::isHTMLFrameElementBase):
        * html/HTMLFrameOwnerElement.h:
        (WebCore::isHTMLFrameOwnerElement):
        * html/HTMLMediaElement.h:
        (WebCore::isHTMLMediaElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInElement.h:
        (WebCore::isHTMLPlugInElement):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::addPlugInsFromNodeListMatchingPlugInOrigin):
        * html/HTMLPlugInImageElement.h:
        (WebCore::isHTMLPlugInImageElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setOption):
        (WebCore::HTMLSelectElement::setLength):
        (WebCore::HTMLSelectElement::recalcListItems):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedInto):
        (WebCore::HTMLSourceElement::removedFrom):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::cellAbove):
        * html/HTMLTableCellElement.h:
        (WebCore::isHTMLTableCellElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::isInSection):
        * html/HTMLTableSectionElement.h:
        (WebCore::isHTMLTableSectionElement):
        * html/HTMLTagNames.in:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::enclosingTextFormControl):
        * html/HTMLTextFormControlElement.h:
        (WebCore::isHTMLTextFormControlElement):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::removedFrom):
        (WebCore::HTMLTrackElement::mediaElement):
        * html/LabelableElement.h:
        (WebCore::isLabelableElement):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::sliderTrackElement):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::parentMediaElement):
        (WebCore::mediaControlElementType):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::isTextControlInnerTextElement):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPhrasingContent):
        (WebCore::MathMLElement::isFlowContent):
        (WebCore::MathMLElement::childShouldCreateRenderer):
        * mathml/mathtags.in:
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/EventHandler.cpp:
        (WebCore::targetIsFrame):
        * page/FocusController.cpp:
        (WebCore::hasCustomFocusLogic):
        (WebCore::FocusController::findFocusableElementDescendingDownIntoFrameDocument):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::init):
        (WebCore::FrameView::addEmbeddedObjectToUpdate):
        (WebCore::FrameView::updateEmbeddedObject):
        * page/PageSerializer.cpp:
        (WebCore::isCharsetSpecifyingNode):
        (WebCore::SerializerMarkupAccumulator::appendCustomAttributes):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absolutePDFURL):
        (WebCore::HitTestResult::mediaElement):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::resizeTextPermitted):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents):
        (WebCore::RenderEmbeddedObject::layout):
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateSnapOffsets):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::isRestartedPlugin):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::mediaElement):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::plugInImageElement):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textFormControlElement):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::getMediaElementFromRenderObject):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::frameOwnerElement):
        * testing/Internals.cpp:
        (WebCore::Internals::visiblePlaceholder):
        (WebCore::Internals::simulateAudioInterruption):
        (WebCore::Internals::isPluginSnapshotted):
        * xml/XPathStep.cpp:
        (WebCore::XPath::nodeMatchesBasicTest):

2014-09-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Automatic Inspection should continue once all breakpoints are loaded
        https://bugs.webkit.org/show_bug.cgi?id=137038

        Reviewed by Timothy Hatcher.

        Handle frontend initialization messages even though pages cannot
        be automatically inspected yet.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::frontendInitialized):
        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.h:
        * page/Page.h:
        (WebCore::Page::inspectorDebuggable):

2014-09-26  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r173988): Fix unused variable warning in PDFDocumentImage.cpp

        Fixes the following build failure in release builds:

            WebCore/platform/graphics/cg/PDFDocumentImage.cpp:230:12: error: unused variable 'pageCount' [-Werror,-Wunused-variable]

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage): Change
        ASSERT() to call pageCount().

2014-09-26  Brian J. Burg  <burg@cs.washington.edu>

        StorageTracker::deleteOrigin being called off the main thread (ASSERTs in inspector/test-harness-trivially-works.html test)
        https://bugs.webkit.org/show_bug.cgi?id=129642

        Apply post-review comments from Alexey Proskuryakov.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::deleteEmptyDatabase): Make a thread-safe isolated copy of the string.

2014-09-26  Myles C. Maxfield  <mmaxfield@apple.com>

        SVG -> OTF converter bug gardening
        https://bugs.webkit.org/show_bug.cgi?id=137088

        Reviewed by Darin Adler.

        This test fixes some (but not all) of the svg/ layout tests that never worked with the
        SVG -> OTF font converter. The actual list of tests this fixes is shown below. I will be
        filing bugs for the remaining issues along with the relevant tests that those issues
        cause to fail.

        Tests: svg/W3C-SVG-1.1/fonts-elem-05-t.svg
               svg/W3C-SVG-1.1/fonts-kern-01-t.svg
               svg/custom/glyph-setting-d-attribute.svg
               svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html
               svg/custom/skip-underline-missing-glyph.html
               svg/custom/svg-fonts-fallback.xhtml
               svg/custom/svg-fonts-in-text-controls.html

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendHEADTable): We use the font's minimum and maximum
        bounding box information to size <textarea>s and <input>s.
        (WebCore::SVGToOTFFontConverter::addCodepointRanges): Codepoint ranges are closed.
        (WebCore::SVGToOTFFontConverter::computeKerningData): Typo in appending glyphs to the
        wrong set.
        (WebCore::SVGToOTFFontConverter::transcodeGlyphPaths): Use the font's horizontal
        origin if the glyph doesn't have one.
        (WebCore::SVGToOTFFontConverter::convertSVGToOTFFont): r173852 implemented vhea, vmtx,
        and kern.
        (WebCore::transcodeGlyphPaths): Moved inside SVGToOTFFontConverter.

2014-09-26  Dan Bernstein  <mitz@apple.com>

        iOS build fix following r173989.

        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToClickEvents):

2014-09-26  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Empty string case already covered by containesOnlyWhiteSpace.
        https://bugs.webkit.org/show_bug.cgi?id=137146

        Reviewed by Sergio Villar Senin.

        When checking out for white-space only strings in the grid-template-areas
        property values, it's not neccessary to check out for empty strings as
        such case is already covered.

        No new tests, already covered by fast/css-grid-layout/grid-template-areas-empty-string-crash.html.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateAreasRow):

2014-09-23  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix the handling of infinity in track growth limits
        https://bugs.webkit.org/show_bug.cgi?id=137019

        Reviewed by Darin Adler.

        The growth limit of content sized tracks is initialized to
        infinity which is internally represented as -1. We were not
        specialcasing this situation, and thus, -1 was used in the
        computations as any other value. This change makes the code aware
        of the existence of infinites (like when sorting tracks by growth
        potential or when initializing the track growth limits).

        There was another bug related to infinities. The code that was
        replacing a infinite growth limit by a finite one was not using
        the proper indexes so the tracks that were being updated were the
        wrong ones.

        Test: fast/css-grid-layout/grid-content-sized-columns-resolution.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::sortByGridTrackGrowthPotential):
        (WebCore::RenderGrid::distributeSpaceToTracks):

2014-09-26  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] Fix support for the initial-letter CSS property to first-letter
        https://bugs.webkit.org/show_bug.cgi?id=137108

        Reviewed by Alejandro G. Castro.

        Add support for cap-height to the font system.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit):

2014-09-25  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: FunctionCall timeline records omit profile data if the debugger has paused
        https://bugs.webkit.org/show_bug.cgi?id=136805

        Reviewed by Timothy Hatcher.

        TimelineAgent was mismanaging its call stack depth counter, which caused nested FunctionCall
        records to steal the parent FunctionCall's captured profile in the child's didCallFunction().
        Thus, the top FunctionCall node had no profile data and nested FunctionCall nodes each had
        their own profiles. The frontend expected just one profile, so it didn't show anything when
        it couldn't be found.

        Test: inspector/timeline/debugger-paused-while-recording.html

        * inspector/InspectorTimelineAgent.cpp: Rename m_recordingProfileDepth to m_callStackDepth.
        (WebCore::InspectorTimelineAgent::willCallFunction): Fix the call stack depth management.
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:

2014-09-25  Brian J. Burg  <burg@cs.washington.edu>

        StorageTracker::deleteOrigin being called off the main thread (ASSERTs in inspector/test-harness-trivially-works.html test)
        https://bugs.webkit.org/show_bug.cgi?id=129642

        Reviewed by Brady Eidson.

        When tearing down the inspector frontend's page, we trigger a threading violation
        in StorageAreaSync's final sync code underneath StorageAreaSync::deleteEmptyDatabase().

        No new tests. Regression is covered by inspector/test-harness-trivially-works.html.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::deleteEmptyDatabase): add a missing callOnMainThread() when
        calling StorageTracker::deleteOriginWithIdentifier().

2014-09-25  Sungmann Cho  <sungmann.cho@navercorp.com>

        Unprefix CSS cursor values zoom-in and zoom-out.
        https://bugs.webkit.org/show_bug.cgi?id=137061

        Reviewed by Benjamin Poulain.

        This patch unprefixes CSS cursor values zoom-in and zoom-out.
        -webkit-zoom-in and -webkit-zoom-out are kept as aliases.
        ECursor members use InterCaps with an initial capital letter for now.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ECursor):
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyCursor::applyValue):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::restoreImageSize):
        (WebCore::ImageDocument::windowSizeChanged):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2014-09-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Debug builds of TestWebKitAPI are crashing.
        https://bugs.webkit.org/show_bug.cgi?id=133553

        Reviewed by Dean Jackson.

        Avoid crash on shutdown due to invalid mutex state in the
        HashMap debug implementation during a static destruction operation.

        * dom/Node.cpp:
        (WebCore::ignoreSet): Convert static value into a NeverDestroyed.
        (WebCore::Node::trackForDebugging): Use new NeverDestroyed call.
        (WebCore::Node::~Node): Ditto.

2014-09-25  Christophe Dumez  <cdumez@apple.com>

        Add support for is<SVGDocument>() / downcast<SVGDocument>()
        https://bugs.webkit.org/show_bug.cgi?id=137128

        Reviewed by Ryosuke Niwa.

        Add support for is<SVGDocument>() / downcast<SVGDocument>() by using
        the SPECIALIZE_TYPE_TRAITS_*() macro, instead of the
        DOCUMENT_TYPE_CASTS() one.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        * svg/SVGDocument.h:
        (WebCore::isSVGDocument):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::hasSingleSecurityOrigin):
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::containerSize):
        (WebCore::SVGImage::embeddedContentBox):
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):
        (WebCore::SVGImage::computeIntrinsicDimensions):
        (WebCore::SVGImage::startAnimation):
        (WebCore::SVGImage::stopAnimation):

2014-09-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rename CSSKeyframesRule insertRule to appendRule (57910)
        https://bugs.webkit.org/show_bug.cgi?id=57910

        Reviewed by Dean Jackson.

        Tests: animations/change-keyframes.html

        * css/WebKitCSSKeyframesRule.h:
        (WebCore::WebKitCSSKeyframesRule::appendRule):
        -- Make WebKitCSSKeyframesRule::appendRule to be an alias of WebKitCSSKeyframesRule::insertRule()
           to conform with CSS specs
        * css/WebKitCSSKeyframesRule.idl:
        -- Add the new method WebKitCSSKeyframesRule::appendRule() but keep the original method
           WebKitCSSKeyframesRule::appendRule() to not break exiting customers' pages.

2014-09-25  Tim Horton  <timothy_horton@apple.com>

        Null deref in setStateScrollingNodeSnapOffsetsAsFloat
        https://bugs.webkit.org/show_bug.cgi?id=137133
        <rdar://problem/18447820>

        Reviewed by Beth Dakin.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        Get the deviceScaleFactor from m_page instead of various other places,
        because scrolledContentsLayer can be null in the case of non-composited
        overflow scroll.

2014-09-25  Christophe Dumez  <cdumez@apple.com>

        Use is<HTML*Element>() instead of isHTML*Element() - Part 2
        https://bugs.webkit.org/show_bug.cgi?id=137103

        Reviewed by Benjamin Poulain.

        Use is<HTML*Element>() instead of isHTML*Element() and drop support for
        the generated isHTML*Element() macros.

        No new tests, no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::labelChanged):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isEnabled):
        (WebCore::AccessibilityListBoxOption::stringValue):
        (WebCore::AccessibilityListBoxOption::listBoxOptionParentNode):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::isNativeImage):
        (WebCore::AccessibilityNodeObject::anchorElement):
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::labelElementContainer):
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::url):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::stringValueForMSAA):
        (WebCore::AccessibilityRenderObject::isLinked):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::tableElement):
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::title):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetCaption):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSStyleSheet.cpp:
        (WebCore::isAcceptableCSSStyleSheetParent):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::getNamedItem):
        * dom/CurrentScriptIncrementer.h:
        (WebCore::CurrentScriptIncrementer::CurrentScriptIncrementer):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setDragImage):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::keyMatchesLowercasedUsemap):
        (WebCore::keyMatchesLabelForAttribute):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Node.cpp:
        (WebCore::Node::enclosingLinkEventParentOrSelf):
        * dom/Position.cpp:
        (WebCore::endsOfNodeAreVisuallyDistinctPositions):
        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/VisitedLinkState.cpp:
        (WebCore::linkHashForElement):
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * dom/make_names.pl:
        (printTypeHelpers):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/Editor.cpp:
        (WebCore::imageElementFromImageDocument):
        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::removeHeadContents):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processElement):
        * editing/htmlediting.cpp:
        (WebCore::isNonTableCellHTMLBlockElement):
        * editing/markup.cpp:
        (WebCore::ancestorToRetainStructureAndAppearanceForBlock):
        (WebCore::collectElementsToRemoveFromFragment):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::findAssociatedForm):
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::imageElement):
        * 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):
        (WebCore::HTMLDocument::isFrameSet):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerHTML):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::updateFromControlElementsAncestorDisabledStateUnder):
        (WebCore::HTMLFieldSetElement::disabledStateChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::computeIsDisabledByFieldsetAncestor):
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore::HTMLFormControlsCollection::formControlElements):
        (WebCore::HTMLFormControlsCollection::formImageElements):
        (WebCore::HTMLFormControlsCollection::namedItem):
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::rendererIsNeeded):
        * html/HTMLFrameElementBase.h:
        (WebCore::isHTMLFrameElementBase):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::virtualForm):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLNameCollection.cpp:
        (WebCore::WindowNameCollection::elementMatchesIfNameAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatches):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerDataListElement):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::findParentTable):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):
        (WebCore::HTMLTableRowsCollection::lastRow):
        * html/HTMLTagNames.in:
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::elementMatches):
        * html/MediaDocument.cpp:
        (WebCore::descendentVideoElement):
        (WebCore::ancestorVideoElement):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::RadioNodeList):
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::hasImpliedEndTag):
        (WebCore::insert):
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::ownerDocumentForCurrentNode):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::areElementsOnSameLine):
        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToClickEvents):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::mediaSupportsFullscreen):
        (WebCore::HitTestResult::mediaElement):
        (WebCore::HitTestResult::enterFullscreenForVideo):
        (WebCore::HitTestResult::mediaIsVideo):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::paintAreaElementFocusRing):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::imageMap):
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::itemText):
        (RenderMenuList::itemIsEnabled):
        (RenderMenuList::itemIsLabel):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::meterElement):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):
        (WebCore::RenderObject::getTextDecorationColors):
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::progressElement):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageForRenderer):
        * testing/Internals.cpp:
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2014-09-25  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: Check event loop input extents during replay too
        https://bugs.webkit.org/show_bug.cgi?id=136316

        Reviewed by Timothy Hatcher.

        Sometimes we see different nondeterminism during capture and replay
        executions, so we should support determinism checks during replay too.

        Move the withinEventLoopInputExtent flag to the base class.

        No new tests, no behavior changed.

        * replay/CapturingInputCursor.cpp:
        (WebCore::CapturingInputCursor::CapturingInputCursor):
        (WebCore::CapturingInputCursor::setWithinEventLoopInputExtent): Deleted.
        * replay/CapturingInputCursor.h:
        * replay/EventLoopInput.cpp:
        (WebCore::EventLoopInputExtent::EventLoopInputExtent):
        (WebCore::EventLoopInputExtent::~EventLoopInputExtent):
        Make m_cursor a pointer and add a new constructor so we can conditionally
        enter event loop input extents. This is useful in some network replay situations.

        * replay/EventLoopInput.h:
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::willDispatchEvent): Expand the assertion to include replaying.

2014-09-25  Jeremy Jones  <jeremyj@apple.com>

        Race in ref pointer for WebVideoFullscreenInterfaceAVKit.
        https://bugs.webkit.org/show_bug.cgi?id=137123

        Reviewed by Eric Carlson.

        Add WebThreadRun to prevent race with RefPtr of WebVideoFullscreenInterfaceAVKit.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController didSetupFullscreen]): add WebThreadRun
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setDuration): ditto
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime): ditto
        (WebVideoFullscreenInterfaceAVKit::setRate): ditto
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions): ditto
        (WebVideoFullscreenInterfaceAVKit::setSeekableRanges): ditto
        (WebVideoFullscreenInterfaceAVKit::setAudioMediaSelectionOptions): ditto
        (WebVideoFullscreenInterfaceAVKit::setLegibleMediaSelectionOptions): ditto
        (WebVideoFullscreenInterfaceAVKit::setExternalPlayback): ditto
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto

2014-09-25  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r173944.

        Add a missing header include.
        See <rdar://problem/18454708> for more details.

        * html/parser/HTMLTreeBuilder.cpp:

2014-09-25  Christophe Dumez  <cdumez@apple.com>

        Stop using legacy NODE_TYPE_CASTS() macro in svg/
        https://bugs.webkit.org/show_bug.cgi?id=137106

        Reviewed by Ryosuke Niwa.

        Stop using legacy NODE_TYPE_CASTS() in svg/ and use the new
        SPECIALIZE_TYPE_TRAITS_*() macro instead so that is<>() / downcast<>()
        can be used for those types.

        No new tests, no behavior change.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * dom/Element.h:
        * dom/Node.h:
        (WebCore::is):
        * dom/make_names.pl:
        (printTypeHelpers):
        * html/HTMLElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInImageElement.h:
        * html/LabelableElement.h:
        * mathml/MathMLElement.h:
        Rename NodeTypeCastTraits::is() to NodeTypeCastTraits::isType() to
        avoid naming conflict with the global is<>() function. This was an
        issue when is<>() was called from one of the template specializations.

        * rendering/svg/RenderSVGBlock.h:
        (WebCore::RenderSVGBlock::graphicsElement):
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::gradientElement):
        * rendering/svg/RenderSVGInline.h:
        (WebCore::RenderSVGInline::graphicsElement):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::graphicsElement):
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResources.cpp:
        (WebCore::targetReferenceFromResource):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::isSVGAnimateElement): Deleted.
        Use is<>() / downcast<>() where appropriate.

        * svg/SVGAnimateElement.h:
        (WebCore::isSVGAnimateElement):
        Use SPECIALIZE_TYPE_TRAITS_*() instead of NODE_TYPE_CASTS() and add
        overload for isSVGAnimateElement() taking an SVGElement in argument to
        bypass the is<SVGElement>() check when the input type is an SVGElement.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getBoundingBox):
        Use is<>() / downcast<>() where appropriate.

        * svg/SVGElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        Use SPECIALIZE_TYPE_TRAITS_*() instead of NODE_TYPE_CASTS() and drop
        the pre-existing NodeTypeCastTraits template specialization as it is
        now generated by the macro.

        * svg/SVGGradientElement.cpp:
        (WebCore::isSVGGradientElement): Deleted.
        * svg/SVGGradientElement.h:
        (WebCore::isSVGGradientElement):
        Use SPECIALIZE_TYPE_TRAITS_*() instead of NODE_TYPE_CASTS() and add
        overload for isSVGAnimateElement() taking an SVGElement in argument to
        bypass the is<SVGElement>() check when the input type is an SVGElement.

        * svg/SVGGraphicsElement.h:
        (WebCore::isSVGGraphicsElement):
        Use SPECIALIZE_TYPE_TRAITS_*() instead of NODE_TYPE_CASTS().

        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::synchronizePoints):
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
        (WebCore::isSVGPolyElement): Deleted.
        Use is<>() / downcast<>() where appropriate.

        * svg/SVGPolyElement.h:
        (WebCore::isSVGPolyElement):
        Use SPECIALIZE_TYPE_TRAITS_*() instead of NODE_TYPE_CASTS() and add
        overload for isPolyElement() taking an SVGElement in argument to
        bypass the is<SVGElement>() check when the input type is an SVGElement.

        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::synchronizeTextLength):
        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
        (WebCore::SVGTextContentElement::elementFromRenderer):
        Use is<>() / downcast<>() where appropriate.

        * svg/SVGTextContentElement.h:
        WebCore::isSVGTextContentElement):
        Use SPECIALIZE_TYPE_TRAITS_*() instead of NODE_TYPE_CASTS().

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):
        Use is<>() / downcast<>() where appropriate. Also use tighter typing
        for value returned by shadowTreeElement().

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        Use is<>() / downcast<>() where appropriate.

        * svg/animation/SVGSMILElement.h:
        (WebCore::isSVGSMILElement):
        Use SPECIALIZE_TYPE_TRAITS_*() instead of NODE_TYPE_CASTS() and drop
        the pre-existing NodeTypeCastTraits template specialization as it is
        now generated by the macro.

2014-09-25  Brent Fulgham  <bfulgham@apple.com>

        Minor refactoring to mediaType/presentationType
        https://bugs.webkit.org/show_bug.cgi?id=137085

        Reviewed by Eric Carlson.

        Add overloads for presentationType for the audio and video
        HTML elements so that we don't have to explicity check the
        tag name (via string comparison) to identify the type of
        element.

        No new tests. Should create no change in behavior.

        * html/HTMLAudioElement.h: Overload presentationType to always
        indicate audio type.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaType): Use the presentationType
        method implementation, rather than duplicating that code.
        * html/HTMLVideoElement.h: Overload presentationType to always
        return video type.

2014-09-25  Javier Fernandez  <jfernandez@igalia.com>

        ASSERTION FAILED: columnCount in WebCore::CSSParser::parseGridTemplateAreasRow
        https://bugs.webkit.org/show_bug.cgi?id=136945

        Reviewed by Sergio Villar Senin.

        Checking out whether the grid-template-areas value contains a white-space only
        string, which is not valid as it does not produce a cell token.

        Test: fast/css-grid-layout/grid-template-areas-empty-string-crash.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateAreasRow):

2014-09-25  Csaba Osztrogonác  <ossy@webkit.org>

        Remove WinCE port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=136951

        Reviewed by Alex Christensen.

        * Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp:
        * PlatformWinCE.cmake: Removed.
        * accessibility/AXObjectCache.cpp:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modifyMovingRight):
        * loader/icon/wince/IconDatabaseWinCE.cpp: Removed.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey):
        * page/Settings.cpp:
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingDataTransfer):
        * platform/ContextMenu.h:
        * platform/DragImage.cpp:
        * platform/FileSystem.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::mayFillWithSolidColor):
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::glyphDataAndPageForCharacter):
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameAndActivateFont):
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/win/DIBPixelData.cpp:
        (WebCore::DIBPixelData::setRGBABitmapAlpha):
        * platform/graphics/win/GDIExtras.cpp: Removed.
        * platform/graphics/win/GDIExtras.h:
        (WebCore::hasAlphaBlendSupport):
        (WebCore::alphaBlendIfSupported):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::boundsForGDIGlyph):
        (WebCore::SimpleFontData::widthForGDIGlyph):
        (WebCore::SimpleFontData::scriptFontProperties):
        * platform/graphics/wince/FontCacheWinCE.cpp: Removed.
        * platform/graphics/wince/FontCustomPlatformData.cpp: Removed.
        * platform/graphics/wince/FontCustomPlatformData.h: Removed.
        * platform/graphics/wince/FontPlatformData.cpp: Removed.
        * platform/graphics/wince/FontPlatformData.h: Removed.
        * platform/graphics/wince/FontWinCE.cpp: Removed.
        * platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp: Removed.
        * platform/graphics/wince/GradientWinCE.cpp: Removed.
        * platform/graphics/wince/GraphicsContextWinCE.cpp: Removed.
        * platform/graphics/wince/ImageBufferDataWince.h: Removed.
        * platform/graphics/wince/ImageBufferWinCE.cpp: Removed.
        * platform/graphics/wince/ImageWinCE.cpp: Removed.
        * platform/graphics/wince/MediaPlayerPrivateWinCE.h: Removed.
        * platform/graphics/wince/MediaPlayerProxy.cpp: Removed.
        * platform/graphics/wince/MediaPlayerProxy.h: Removed.
        * platform/graphics/wince/PathWinCE.cpp: Removed.
        * platform/graphics/wince/PlatformPathWinCE.cpp: Removed.
        * platform/graphics/wince/PlatformPathWinCE.h: Removed.
        * platform/graphics/wince/SharedBitmap.cpp: Removed.
        * platform/graphics/wince/SharedBitmap.h: Removed.
        * platform/graphics/wince/SimpleFontDataWinCE.cpp: Removed.
        * platform/graphics/wince/WinCEGraphicsExtras.h: Removed.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        * platform/win/COMPtr.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        * platform/win/ContextMenuItemWin.cpp:
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::getContextMenuItems):
        (WebCore::ContextMenu::createPlatformContextMenuFromItems):
        * platform/win/DragImageWin.cpp:
        (WebCore::dragLabelFont):
        * platform/win/FileSystemWin.cpp:
        (WebCore::pathByAppendingComponent):
        (WebCore::pathGetFileName):
        (WebCore::storageDirectory):
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):
        * platform/win/PasteboardWin.cpp:
        (WebCore::PasteboardOwnerWndProc):
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::pathRemoveBadFSCharacters):
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::createGlobalHDropContent):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::deviceInfoForWidget):
        (WebCore::screenIsMonochrome):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::paint):
        (WebCore::PopupMenuWin::registerClass):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintButton):
        * platform/win/SharedBufferWin.cpp:
        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):
        (WebCore::initializeOffScreenTimerWindow):
        (WebCore::queueTimerProc):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):
        * platform/win/SoftLinking.h:
        * platform/win/SystemInfo.cpp:
        (WebCore::windowsVersion):
        (WebCore::processorArchitecture):
        (WebCore::architectureTokenForUAString):
        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::CopyMedium):
        * plugins/PluginDatabase.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop):
        * plugins/PluginViewNone.cpp:
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addWindowsMediaPlayerPluginDirectory):
        (WebCore::addMacromediaPluginDirectories):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::setUpOffscreenPaintingHooks):
        (WebCore::registerPluginView):
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintIntoTransformedContext):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::platformStart):
        * rendering/RenderThemeWinCE.cpp: Removed.
        * rendering/RenderThemeWinCE.h: Removed.
        * storage/wince/DatabaseThreadWinCE.cpp: Removed.
        * storage/wince/DatabaseThreadWinCE.h: Removed.
        * storage/wince/StorageThreadWinCE.cpp: Removed.
        * storage/wince/StorageThreadWinCE.h: Removed.

2014-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r173944.

        * page/ContextMenuController.cpp: Add missing include.

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Use tighter typing for render objects in RenderGeometryMap
        https://bugs.webkit.org/show_bug.cgi?id=137102

        Reviewed by Ryosuke Niwa.

        Use tighter typing for render objects in RenderGeometryMap for clarity
        and efficiency.

        In particular, using RenderElement type instead of RenderObject
        in canMapBetweenRenderers() allows us to call the faster
        RenderElement::style() instead of RenderObject::style().

        No new tests, no behavior change.

        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderers):
        (WebCore::RenderGeometryMap::pushMappingsToAncestor):

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Add initial is<>() / downcast<>() support for any type of Nodes
        https://bugs.webkit.org/show_bug.cgi?id=137056

        Reviewed by Benjamin Poulain.

        Add initial is<>() / downcast<>() support for any type of Nodes, not
        just Elements by:
        - Moving the is<>() / downcast<>() declarations from Element.h to
          Node.h
        - Introducing a SPECIALIZE_TYPE_TRAITS_*() macro that generates the
          needed template specializations for is<>() / downcast<>() to work.
          This macro will replace NODE_TYPE_CASTS() entirely once the code base
          is fully ported.

        This patch makes use of SPECIALIZE_TYPE_TRAITS_*() macro for
        HTMLFormControlElement, that is an HTMLElement for which the template
        specializations cannot be automatically generated because it requires
        special handling.

        This patch also makes use of SPECIALIZE_TYPE_TRAITS_*() macro for
        DocumentFragment to show that it can be used for non-Element Nodes.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isReadOnly):
        (WebCore::AccessibilityNodeObject::isRequired):
        (WebCore::AccessibilityNodeObject::isControl):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isAutofilled):
        (WebCore::isDisabled):
        (WebCore::isEnabled):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::adjustRenderStyle):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::setFocusedElement):
        * dom/DocumentFragment.h:
        (WebCore::isDocumentFragment):
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Element.h:
        (WebCore::is): Deleted.
        (WebCore::downcast): Deleted.
        * dom/Node.h:
        (WebCore::is):
        (WebCore::downcast):
        * dom/make_names.pl:
        (printTypeHelpers):
        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * html/FormAssociatedElement.h:
        * html/HTMLElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::updateFromControlElementsAncestorDisabledStateUnder):
        (WebCore::HTMLFieldSetElement::refreshElementsIfNeeded):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::enclosingFormControlElement):
        * html/HTMLFormControlElement.h:
        (WebCore::isHTMLFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::submitElementFromEvent):
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::formElementIndex):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::isClickableControl):
        * html/LabelableElement.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
        (WebCore::RadioNodeList::elementMatches):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::findFosterSite):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::disallowTelephoneNumberParsing):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * mathml/MathMLElement.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::formControlElement):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isReadOnlyControl):
        * svg/SVGElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/animation/SVGSMILElement.h:

2014-09-24  Darin Adler  <darin@apple.com>

        Old Turkic characters behave as left-to-right instead of right-to-left, because they are encoded as surrogate pairs.
        https://bugs.webkit.org/show_bug.cgi?id=70029

        Reviewed by Dan Bernstein.

        Test: fast/text/international/old-turkic-direction.html

        * CMakeLists.txt: Added InlineIterator.cpp.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderingAllInOne.cpp: Ditto.

        * rendering/InlineIterator.cpp: Added.
        (WebCore::InlineIterator::surrogateTextDirection): New function used to compute the direction
        when a surrogate pair is involved.
        * rendering/InlineIterator.h: Made the characterAt function private.
        (WebCore::InlineIterator::previousInSameNode): Took out unneeded range check. A zero will underflow
        and become a large number and the characterAt function will return 0 in that case.
        (WebCore::InlineIterator::direction): Added code to check U16_IS_SINGLE before calling
        u_charDirection, and call surrogateTextDirection instead.

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Unreviewed build fix after r173941.

        Rename shadow to m_shadow.

        * rendering/TextPainter.h:
        (WebCore::ShadowApplier::shadowIsCompletelyCoveredByText):

2014-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION: Text with a zero offset, zero blur shadow vanishes
        https://bugs.webkit.org/show_bug.cgi?id=136801

        Reviewed by Darin Adler.

        This patch performs some cleanup regarding TextPainter's shadow logic and handles an
        additional case of empty shadows. Previously, there was tight coupling between
        applyShadowToGraphicalContext() and paintTextWithShadows(), as they both used a
        collection of variables to determine how shadows are to be drawn. This complexity has
        been moved into a helper class, ShadowApplier, which performs what
        applyShadowToGraphicsContext() used to do, and cleans up correctly in its destructor.
        This removes the tight coupling mentioned earlier.

        Test: fast/text/empty-shadow.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::applyShadowToGraphicsContext): Moved to ShadowApplier.
        * rendering/InlineTextBox.h: Deleted applyShadowToGraphicsContext signature.
        * rendering/TextPainter.cpp:
        (WebCore::ShadowApplier::ShadowApplier): Perform the contents of applyShadowToGraphicsContext()
        (WebCore::ShadowApplier::~ShadowApplier): Undo the work done previously
        (WebCore::paintTextWithShadows): Create a ShadowApplier to do the relevant shadow work. In addition,
        refactor some boolean flags to more meaningful ones with relation to the computation at hand.
        (WebCore::isEmptyShadow): Moved to TextPainter.h, named shadowIsCompletelyCoveredByText()
        * rendering/TextPainter.h:
        (WebCore::ShadowApplier::ShadowApplier): Moved from InlineTextBox::applyShadowToGraphicsContext().
        (WebCore::ShadowApplier::extraOffset): Getter.
        (WebCore::ShadowApplier::~ShadowApplier): Moved from TextPainter::paintTextWithShadows().
        (WebCore::isLastShadowIteration): Helper function.
        (WebCore::shadowIsCompletelyCoveredByText): Determines whether or not we should not draw the shadow.
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows): Update to use ShadowApplier.

2014-09-24  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: subtract elapsed time while debugger is paused from profile nodes
        https://bugs.webkit.org/show_bug.cgi?id=136796

        Reviewed by Timothy Hatcher.

        * inspector/TimelineRecordFactory.cpp:
        (WebCore::buildInspectorObject):

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Use is<HTML*Element>() instead of isHTML*Element() - Part 1
        https://bugs.webkit.org/show_bug.cgi?id=137068

        Reviewed by Ryosuke Niwa.

        Start using is<HTML*Element>() instead of isHTML*Element().
        Remaining usages will be updated in a follow-up patch to
        reduce the size of the change.

        No new tests, no behavior change.

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isSelected):
        (WebCore::AccessibilityListBoxOption::canSetSelectedAttribute):
        (WebCore::AccessibilityListBoxOption::stringValue):
        (WebCore::AccessibilityListBoxOption::listBoxOptionParentNode):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaTimeline::valueDescription):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::setElement):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::isNativeTextControl):
        (WebCore::AccessibilityNodeObject::isNativeImage):
        (WebCore::AccessibilityNodeObject::isInputImage):
        (WebCore::AccessibilityNodeObject::isReadOnly):
        (WebCore::AccessibilityNodeObject::valueForRange):
        (WebCore::AccessibilityNodeObject::maxValueForRange):
        (WebCore::AccessibilityNodeObject::minValueForRange):
        (WebCore::isNodeActionElement):
        (WebCore::AccessibilityNodeObject::titleElementText):
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):
        (WebCore::AccessibilityNodeObject::colorValue):
        (WebCore::accessibleNameForNode):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFileUploadButton):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isDisabled):
        (WebCore::isEnabled):
        (WebCore::isChecked):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldPerformSmartReplace):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isInPasswordField):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processElement):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::elementURL):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendText):
        (WebCore::isPlainTextMarkup):
        (WebCore::collectElementsToRemoveFromFragment):
        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getTextFieldValues):
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLNameCollection.cpp:
        (WebCore::DocumentNameCollection::elementMatchesIfIdAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatchesIfNameAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatches):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::recalcSelectOptions):
        (WebCore::HTMLOptGroupElement::ownerSelectElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::index):
        (WebCore::HTMLOptionElement::ownerSelectElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::value):
        (WebCore::HTMLSelectElement::setValue):
        (WebCore::HTMLSelectElement::childShouldCreateRenderer):
        (WebCore::HTMLSelectElement::setLength):
        (WebCore::HTMLSelectElement::nextValidIndex):
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::selectOption):
        (WebCore::HTMLSelectElement::optionToListIndex):
        (WebCore::HTMLSelectElement::listToOptionIndex):
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::searchOptionsForValue):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::updateSelectedState):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        (WebCore::HTMLSelectElement::lastSelectedListIndex):
        (WebCore::HTMLSelectElement::optionAtIndex):
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex):
        (WebCore::HTMLSelectElement::length):
        * html/HTMLTagNames.in:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        (WebCore::RadioInputType::isKeyboardFocusable):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::hasImpliedEndTag):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isSelectScopeMarker):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::mediaControlElementType):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip):
        * page/EventHandler.cpp:
        (WebCore::isSubmitImage):
        (WebCore::EventHandler::handleMousePressEvent):
        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):
        * page/FrameView.cpp:
        (WebCore::FrameView::addEmbeddedObjectToUpdate):
        (WebCore::FrameView::updateEmbeddedObject):
        * page/PageSerializer.cpp:
        (WebCore::frameOwnerURLAttributeName):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absolutePDFURL):
        (WebCore::HitTestResult::isContentEditable):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::resizeTextPermitted):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateFromElement):
        (WebCore::RenderButton::canHaveGeneratedChildren):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::isOpen):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::addFocusRingRects):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderMenuList.cpp:
        (WebCore::selectedOptionCount):
        (RenderMenuList::updateOptionsWidth):
        (RenderMenuList::setTextFromOption):
        (RenderMenuList::itemText):
        (RenderMenuList::itemIsEnabled):
        (RenderMenuList::itemIsSelected):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):
        * testing/Internals.cpp:
        (WebCore::Internals::selectColorInColorChooser):
        (WebCore::Internals::wasLastChangeUserEdit):
        (WebCore::Internals::isSelectPopupVisible):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2014-09-24  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Remove MediaPlayer::setHasPlaybackTargetAvailabilityListeners
        https://bugs.webkit.org/show_bug.cgi?id=137075

        Reviewed by Dean Jackson.

        No new tests, this just removes unused code.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setHasPlaybackTargetAvailabilityListeners): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setHasPlaybackTargetAvailabilityListeners): Deleted.

2014-09-21  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector use a separate web process.

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

        Reviewed by Anders Carlsson.

        * English.lproj/Localizable.strings: Updated.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptGlobalObject.h:
        * bindings/js/ScriptState.h:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorPageAgent.h:
        * page/Chrome.h:
        Exported a few functions and private headers.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setInspectorFrontendClient):
        (WebCore::InspectorController::hasInspectorFrontendClient):
        (WebCore::InspectorController::show):
        * inspector/InspectorController.h:
        Make InspectorFrontendClient a pointer instead of a std::unique_ptr.
        This makes it easier to implement InspectorFrontendClient as
        part of an existing object that is externally owned.

        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::closeDummyInspectorFrontend):
        * testing/Internals.h:
        Change InspectorFrontendClientDummy from being moved to owned.

2014-09-23  Dean Jackson  <dino@apple.com>

        [Yosemite] Button text doesn't go white while pushing the button, like it does for real buttons
        https://bugs.webkit.org/show_bug.cgi?id=137054
        rdar://problem/17559038

        Reviewed by Sam Weinig.

        On Yosemite and above, system buttons paint with white-ish text when they
        are pressed. Since this isn't exposed by API, I've hardcoded the value
        into RenderThemeMac.

        The actual state is exposed by adding a :active rule to html.css that
        uses a new CSSValueKeyword: ActiveButtonText.

        Unfortunately I can't find a way to test this, because the active state isn't
        testable. We should really expose the Inspector's forcePseudoState function into
        window.internals.

        * css/CSSValueKeywords.in: Add "activebuttontext".
        * css/html.css:
        (input[type="button"]:active, input[type="submit"]:active, input[type="reset"]:active, input[type="file"]::-webkit-file-upload-button:active, button:active): New rule for active
        button elements.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::systemColor): Handle CSSValueActivebuttontext as black.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor): Handle CSSValueActivebuttontext as
        white with 75% opacity.

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Use is<SVG*Element>() instead of isSVG*Element()
        https://bugs.webkit.org/show_bug.cgi?id=137058

        Reviewed by Dirk Schulze.

        Use is<SVG*Element>() instead of isSVG*Element() and drop support for
        generated isSVG*Element().

        No new tests, no behavior change.

        * css/CSSCursorImageValue.cpp:
        (WebCore::resourceReferencedByCursorElement):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::useSVGZoomRulesForLength):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/make_names.pl:
        (printTypeHelpers):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::elementURL):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromCircleElement):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/svg/SVGResources.cpp:
        (WebCore::targetReferenceFromResource):
        * svg/SVGAltGlyphDefElement.cpp:
        (WebCore::SVGAltGlyphDefElement::hasValidGlyphElements):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::rootElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isOutermostSVGSVGElement):
        (WebCore::SVGElement::ownerSVGElement):
        (WebCore::SVGElement::viewportElement):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::findLightElement):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::ensureGlyphCache):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::associatedFontElement):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::srcValue):
        (WebCore::SVGFontFaceSrcElement::childrenChanged):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::invalidateGlyphCache):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedInto):
        (WebCore::SVGHKernElement::removedFrom):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLocatable.cpp:
        (WebCore::isViewportElement):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::pathElement):
        (WebCore::SVGMPathElement::notifyParentOfPathChange):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setupInitialView):
        * svg/SVGUseElement.cpp:
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::insertedInto):
        (WebCore::SVGVKernElement::removedFrom):

2014-09-24  Benjamin Poulain  <bpoulain@apple.com>

        Remove the style marking from :nth-child()
        https://bugs.webkit.org/show_bug.cgi?id=137055

        Reviewed by Andreas Kling.

        Previously, :nth-child() had to mark the RenderStyle as unique in order
        to prevent it from being used for style sharing.

        After r173229, :nth-child() use the more generic element marking
        "StyleIsAffectedByPreviousSibling".

        In StyleResolver::canShareStyleWithElement(), StyleIsAffectedByPreviousSibling
        is already used to prevent style sharing of those elements, making the "Unique"
        flag redundant.

        Since it is now useless, remove the style marking from SelectorChecker and the CSS JIT.

        Tests: fast/css/nth-child-style-sharing-even.html
               fast/css/nth-child-style-sharing-fixed-integer.html
               fast/css/nth-child-style-sharing-odd.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::setElementChildIndexAndUpdateStyle): Deleted.
        * rendering/style/RenderStyle.h:

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Add support for is<HTML*Element>() for type checking
        https://bugs.webkit.org/show_bug.cgi?id=137015

        Reviewed by Benjamin Poulain.

        Add support for is<HTML*Element>() for type checking while keeping
        support for the legacy toHTML*Element() form until the code base is
        ported.

        toHTML*Element() helpers are now macros to the new is<HTML*Element>()
        type checking helpers.

        No new tests, no behavior change.

        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:
        (WebCore::is):
        (WebCore::downcast):
        (WebCore::isElementOfType): Deleted.
        * dom/ElementAncestorIterator.h:
        (WebCore::lineageOfType):
        * dom/ElementIterator.h:
        (WebCore::findElementAncestorOfType):
        * dom/ElementTraversal.h:
        (WebCore::Traversal<ElementType>::firstChildTemplate):
        (WebCore::Traversal<ElementType>::lastChildTemplate):
        (WebCore::Traversal<ElementType>::firstWithinTemplate):
        (WebCore::Traversal<ElementType>::lastWithinTemplate):
        (WebCore::Traversal<ElementType>::nextTemplate):
        (WebCore::Traversal<ElementType>::previous):
        (WebCore::Traversal<ElementType>::nextSibling):
        (WebCore::Traversal<ElementType>::previousSibling):
        (WebCore::Traversal<ElementType>::nextSkippingChildren):
        * dom/TypedElementDescendantIterator.h:
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::from):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::from):
        * dom/make_names.pl:
        (printTypeHelpers):

2014-09-23  Benjamin Poulain  <bpoulain@apple.com>

        The style resolution cache applies properties incorrectly whenever direction != ltr
        https://bugs.webkit.org/show_bug.cgi?id=137052

        Reviewed by Andreas Kling.

        The optimization r135021 introduced a bug whenever the direction of subtree is not
        uniform in the whole page.

        When StyleResolver::applyMatchedProperties() resolves the style, some properties are
        resolved differently based on the writing-mode and the direction.

        In isCacheableInMatchedPropertiesCache(), the cases for writing-mode are already handled
        by not caching any style with anything else than the default.
        The direction was ignored, causing the bugs solved here.

        Tests: css3/flexbox/flex-flow-2.html
               fast/css/style-resolver-cache-direction-1.html
               fast/css/style-resolver-cache-direction-2.html
               fast/css/style-resolver-cache-direction-3.html

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

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Have CSS classes' methods return more references
        https://bugs.webkit.org/show_bug.cgi?id=137036

        Reviewed by Ryosuke Niwa.

        Have CSS classes' methods return more references instead of pointers
        when possible.

        No new tests, no behavior change.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::style):
        * css/CSSFontFaceRule.h:
        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::cssRules):
        * css/CSSGroupingRule.h:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::media):
        * css/CSSImportRule.h:
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::style):
        * css/CSSPageRule.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::style):
        * css/CSSStyleRule.h:
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::style):
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::cssRules):
        * css/WebKitCSSKeyframesRule.h:
        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::style):
        * css/WebKitCSSViewportRule.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyleSheet::setRuleSelector):
        (WebCore::InspectorStyleSheet::deleteRule):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::styleForId):
        (WebCore::InspectorStyleSheet::ruleIndexByStyle):
        (WebCore::InspectorStyleSheet::ruleId):
        (WebCore::InspectorStyleSheet::revalidateStyle):

2014-09-23  Roger Fong  <roger_fong@apple.com>

        [Windows] Enable CSS Supports Rule on Windows.

        * css/CSSAllInOne.cpp:

2014-09-23  Christophe Dumez  <cdumez@apple.com>

        Unreviewed build fix after r173893.

        Partial revert of r173893 to fix debug builds.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::text):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::makeContextStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::makeElementStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::isPlaceholderShown):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore::Element::updateName):
        (WebCore::Element::updateId):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::findFirstMarkable):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::matchesReadWritePseudoClass):
        (WebCore::HTMLElement::directionality):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::addPlugInsFromNodeListMatchingPlugInOrigin):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::enclosingTextFormControl):
        * page/FrameView.cpp:
        (WebCore::FrameView::addEmbeddedObjectToUpdate):
        (WebCore::FrameView::updateEmbeddedObject):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absolutePDFURL):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents):
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::plugInImageElement):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textFormControlElement):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * testing/Internals.cpp:
        (WebCore::Internals::visiblePlaceholder):

2014-09-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement snapping behavior for Mac overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=135774

        Reviewed by Beth Dakin.

        Hooks into AxisScrollSnapAnimator to implement overflow scroll snapping on Mac.

        We need to find a way to test this!

        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent):
        * page/EventHandler.cpp:
        (WebCore::handleWheelEventInAppropriateEnclosingBoxForSingleAxis):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers):
        (WebCore::ScrollAnimator::scrollOffsetInAxis):
        (WebCore::ScrollAnimator::immediateScrollInAxis):
        (WebCore::ScrollAnimator::startScrollSnapTimer):
        (WebCore::ScrollAnimator::stopScrollSnapTimer):
        (WebCore::ScrollAnimator::horizontalScrollSnapTimerFired):
        (WebCore::ScrollAnimator::verticalScrollSnapTimerFired):
        * platform/ScrollAnimator.h:
        * platform/mac/AxisScrollSnapAnimator.h:
        * platform/mac/AxisScrollSnapAnimator.mm:
        (WebCore::AxisScrollSnapAnimator::AxisScrollSnapAnimator):
        (WebCore::AxisScrollSnapAnimator::beginScrollSnapAnimation):
        (WebCore::AxisScrollSnapAnimator::endScrollSnapAnimation):
        (WebCore::AxisScrollSnapAnimator::initializeGlideParameters):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Use downcast<HTML*Element>() instead of toHTML*Element()
        https://bugs.webkit.org/show_bug.cgi?id=137007

        Reviewed by Benjamin Poulain.

        Use downcast<HTML*Element>() instead of toHTML*Element() and drop
        transition macros for toHTML*Element().

        This patch also cleans up the surrounding code.

        No new tests, no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::AXObjectCache::labelChanged):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::canSetSelectedChildrenAttribute):
        (WebCore::AccessibilityListBox::addChildren):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isSelected):
        (WebCore::AccessibilityListBoxOption::stringValue):
        (WebCore::AccessibilityListBoxOption::listBoxOptionParentNode):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaTimeline::valueDescription):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::isEnabled):
        (WebCore::AccessibilityMenuListOption::isSelected):
        (WebCore::AccessibilityMenuListOption::setSelected):
        (WebCore::AccessibilityMenuListOption::stringValue):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::isNativeTextControl):
        (WebCore::AccessibilityNodeObject::isNativeImage):
        (WebCore::AccessibilityNodeObject::isInputImage):
        (WebCore::AccessibilityNodeObject::isMultiSelectable):
        (WebCore::AccessibilityNodeObject::isReadOnly):
        (WebCore::AccessibilityNodeObject::valueForRange):
        (WebCore::AccessibilityNodeObject::maxValueForRange):
        (WebCore::AccessibilityNodeObject::minValueForRange):
        (WebCore::isNodeActionElement):
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):
        (WebCore::AccessibilityNodeObject::text):
        (WebCore::AccessibilityNodeObject::stringValue):
        (WebCore::AccessibilityNodeObject::colorValue):
        (WebCore::accessibleNameForNode):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFileUploadButton):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::labelElementContainer):
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::url):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        (WebCore::AccessibilityRenderObject::stringValueForMSAA):
        (WebCore::AccessibilityRenderObject::isLinked):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::inputElement):
        (WebCore::AccessibilitySliderThumb::elementRect):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::tableElement):
        (WebCore::AccessibilityTable::title):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (optionFromSelection):
        (webkitAccessibleSelectionGetSelectionCount):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetCaption):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetDescription):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::accessibilityPasswordFieldLength):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isChecked):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::getNamedItem):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::makeContextStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::makeElementStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::isPlaceholderShown):
        * dom/CurrentScriptIncrementer.h:
        (WebCore::CurrentScriptIncrementer::CurrentScriptIncrementer):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setDragImage):
        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::iconURLs):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::keyMatchesLowercasedUsemap):
        (WebCore::DocumentOrderedMap::getElementByMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedUsemap):
        (WebCore::DocumentOrderedMap::getElementByLabelForAttribute):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore::Element::updateName):
        (WebCore::Element::updateId):
        (WebCore::Element::updateLabel):
        (WebCore::Element::ensureCachedHTMLCollection):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/VisitedLinkState.cpp:
        (WebCore::linkHashForElement):
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * dom/make_names.pl:
        (printTypeHelpers):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::imageElementFromImageDocument):
        (WebCore::findFirstMarkable):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll):
        (WebCore::scanForForm):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldPerformSmartReplace):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::nonBoundaryShadowTreeRootNode):
        (WebCore::VisibleSelection::isInPasswordField):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processElement):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * editing/markup.cpp:
        (WebCore::isPlainTextMarkup):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::findAssociatedForm):
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::imageElement):
        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::matchesReadWritePseudoClass):
        (WebCore::HTMLElement::setInnerHTML):
        (WebCore::HTMLElement::directionality):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::refreshElementsIfNeeded):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::computeIsDisabledByFieldsetAncestor):
        (WebCore::shouldAutofocus):
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::formControlElements):
        (WebCore::HTMLFormControlsCollection::formImageElements):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getTextFieldValues):
        (WebCore::HTMLFormElement::assertItemCanBeInPastNamesMap):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList):
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::shadowSelect):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::virtualForm):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLNameCollection.cpp:
        (WebCore::DocumentNameCollection::elementMatchesIfIdAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatchesIfNameAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatches):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::recalcSelectOptions):
        (WebCore::HTMLOptGroupElement::ownerSelectElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerDataListElement):
        (WebCore::HTMLOptionElement::ownerSelectElement):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        * html/HTMLOptionsCollection.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::addPlugInsFromNodeListMatchingPlugInOrigin):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::hasPlaceholderLabelOption):
        (WebCore::HTMLSelectElement::value):
        (WebCore::HTMLSelectElement::setValue):
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::selectOption):
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::searchOptionsForValue):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::updateSelectedState):
        (WebCore::HTMLSelectElement::lastSelectedListIndex):
        (WebCore::HTMLSelectElement::optionAtIndex):
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::findParentTable):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):
        (WebCore::HTMLTableRowsCollection::lastRow):
        (WebCore::HTMLTableRowsCollection::customElementAfter):
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::cloneNode):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::enclosingTextFormControl):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::elementMatches):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::descendentVideoElement):
        (WebCore::ancestorVideoElement):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        (WebCore::RadioInputType::isKeyboardFocusable):
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::updateTickMarkValues):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::insert):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::ownerDocumentForCurrentNode):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::rendererIsNeeded):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MeterShadowElement.cpp:
        (WebCore::MeterShadowElement::meterElement):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressShadowElement::progressElement):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::willRespondToMouseClickEvents):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip):
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement):
        * page/EventHandler.cpp:
        (WebCore::isSubmitImage):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/FrameView.cpp:
        (WebCore::FrameView::addEmbeddedObjectToUpdate):
        (WebCore::FrameView::updateEmbeddedObject):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):
        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToClickEvents):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::absolutePDFURL):
        (WebCore::HitTestResult::enterFullscreenForVideo):
        (WebCore::HitTestResult::mediaControlsEnabled):
        (WebCore::HitTestResult::isLiveLink):
        (WebCore::HitTestResult::isContentEditable):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateFromElement):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents):
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::inputElement):
        (WebCore::RenderFileUploadControl::uploadButton):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::frameElement):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::frameSetElement):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasElement):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::iframeElement):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::paintAreaElementFocusRing):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::imageMap):
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::selectElement):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):
        * rendering/RenderMenuList.cpp:
        (WebCore::selectedOptionCount):
        (RenderMenuList::selectElement):
        (RenderMenuList::updateOptionsWidth):
        (RenderMenuList::setTextFromOption):
        (RenderMenuList::itemText):
        (RenderMenuList::itemIsSelected):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::meterElement):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::progressElement):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::element):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::plugInImageElement):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textFormControlElement):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::textAreaElement):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::inputElement):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoElement):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageForRenderer):
        * svg/svgtags.in:
        Generate helpers to SVGAElement so that isSVGAElement() can be used
        instead of hasTagName(SVGNames::aTag). I did such update in this
        patch.

        * testing/Internals.cpp:
        (WebCore::Internals::visiblePlaceholder):
        (WebCore::Internals::wasLastChangeUserEdit):
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks):
        (WebCore::Internals::isSelectPopupVisible):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Have DataTransfer::files() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=137039

        Reviewed by Ryosuke Niwa.

        Have DataTransfer::files() return a reference instead of a pointer as
        it can never return null.

        No new tests, no behavior change.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::files):
        * dom/DataTransfer.h:

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Have NamedNodeMap::element() and DOMStringMap::element() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=137040

        Reviewed by Ryosuke Niwa.

        Have NamedNodeMap::element() and DOMStringMap::element() return a
        reference instead of a pointer as they can never return null.

        No new tests, no behavior change.

        * dom/DatasetDOMStringMap.h:
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::element):

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Have DOMImplementation::document() and Element::attributes() return references
        https://bugs.webkit.org/show_bug.cgi?id=137035

        Reviewed by Andreas Kling.

        Have DOMImplementation::document() and Element::attributes() return
        references instead of pointers as they can never return null.

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Update the JS Bindings code generator to use WTF::getPtr() in a couple
        more places so that the implementation can return references instead
        of pointers even when [GenerateIsReachable=xxx] IDL extended attribute
        is used.

        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::document):
        * dom/Element.cpp:
        (WebCore::Element::attributes):
        * dom/Element.h:
        (WebCore::Node::attributes):

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Have Document::ensureTemplateDocument() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=137033

        Reviewed by Ryosuke Niwa.

        Have Document::ensureTemplateDocument() return a reference instead of
        a pointer as it can never return null.

        No new tests, no behavior change.

        * dom/Document.cpp:
        (WebCore::Document::ensureTemplateDocument):
        * dom/Document.h:
        * editing/markup.cpp:
        (WebCore::createFragmentForInnerOuterHTML):
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::content):
        (WebCore::HTMLTemplateElement::didMoveToNewDocument):

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Have Document::accessSVGExtensions() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=137030

        Reviewed by Ryosuke Niwa.

        Have Document::accessSVGExtensions() return a reference instead of a
        pointer as it can never return null.

        No new tests, no behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::removeChildren):
        * dom/Document.cpp:
        (WebCore::Document::commonTeardown):
        (WebCore::Document::implicitClose):
        (WebCore::Document::accessSVGExtensions):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::removedFrom):
        * editing/markup.cpp:
        (WebCore::isPlainTextMarkup):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::svgExtensionsFromElement):
        * rendering/svg/RenderSVGResourceContainer.h:
        (WebCore::getRenderSVGResourceContainerById):
        (WebCore::getRenderSVGResourceById):
        * rendering/svg/SVGResources.cpp:
        (WebCore::registerPendingResource):
        (WebCore::SVGResources::buildCachedResources):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::resourcesCacheFromRenderer):
        (WebCore::SVGResourcesCache::resourceDestroyed):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::reportAttributeParsingError):
        (WebCore::SVGElement::removedFrom):
        (WebCore::SVGElement::viewportElement):
        (WebCore::SVGElement::attributeChanged):
        (WebCore::SVGElement::buildPendingResourcesIfNeeded):
        (WebCore::SVGElement::accessDocumentSVGExtensions): Deleted.
        * svg/SVGElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::clearResourceReferences):
        (WebCore::SVGFEImageElement::buildPendingResource):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedInto):
        (WebCore::SVGFontFaceElement::removedFrom):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        (WebCore::SVGMPathElement::clearResourceReferences):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseAttribute):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::insertedInto):
        (WebCore::SVGSVGElement::removedFrom):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::detachTarget):
        (WebCore::SVGTRefElement::buildPendingResource):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::clearResourceReferences):
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearResourceReferences):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::toClipPath):
        (WebCore::SVGUseElement::buildInstanceTree):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::clearResourceReferences):
        (WebCore::SVGSMILElement::buildPendingResource):

2014-09-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Should be able to attach a debugger to a JSContext before anything is executed
        https://bugs.webkit.org/show_bug.cgi?id=136893

        Reviewed by Timothy Hatcher.

        Automatic inspection is currently disabled for web pages.
        This just updates the interfaces that changed.

        * WebCore.exp.in:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::show):
        * inspector/InspectorController.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        * page/PageDebuggable.h:
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend):

2014-09-23  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Adds implementation of subtle crypto HMAC algorithm
        https://bugs.webkit.org/show_bug.cgi?id=133320

        Reviewed by Philippe Normand.

        Tests are already in place under crypto/subtle/hmac-*.html

        * crypto/gtk/CryptoAlgorithmHMACGtk.cpp:
        (WebCore::getGnutlsDigestAlgorithm):
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):

2014-09-23  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Adds implementation of Subtle Crypto digest algorithms
        https://bugs.webkit.org/show_bug.cgi?id=133319

        Reviewed by Philippe Normand.

        Tests are already in place under crypto/subtle/sha-*.html

        * crypto/gtk/CryptoDigestGtk.cpp:
        (WebCore::CryptoDigest::CryptoDigest):
        (WebCore::CryptoDigest::~CryptoDigest):
        (WebCore::CryptoDigest::create):
        (WebCore::CryptoDigest::addBytes):
        (WebCore::CryptoDigest::computeHash):

2014-09-15  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Do not grow tracks when the growth factor is 0
        https://bugs.webkit.org/show_bug.cgi?id=136575

        Reviewed by Darin Adler.

        A couple of performance optimizations for the track sizing
        algorithm. On the one hand we avoid the computation of the
        available logical space share if the track has no growth potential
        (the current breadth is the maximum breadth) and on the other
        hand, we avoid calling RenderGrid::distributeSpaceToTracks() if
        the available logical space is not greater than 0.

        The combined effect of these two changes is an impressive +16%
        improvement in auto-grid-lots-of-data.html performance test.

        No new tests as there is no change in the functionality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::distributeSpaceToTracks):

2014-09-23  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] The composited layers isolated by the page group should blend with the default white background color.
        https://bugs.webkit.org/show_bug.cgi?id=136563

        Reviewed by Simon Fraser.

        If a blending layer is not isolated, then it should blend with a white backdrop:
        http://dev.w3.org/fxtf/compositing-1/#pagebackdrop

        Tests: css3/blending/blend-mode-body-composited-child-background-color.html
               css3/blending/blend-mode-body-composited-child.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        If the isolating composited layer is the root renderer, then it should have a backing store
        into which the initial white backdrop will be painted.

2014-09-22  Christophe Dumez  <cdumez@apple.com>

        Unreviewed build fix after r173859.

        Partial revert to fix debug build after r173859.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        * rendering/svg/RenderSVGBlock.h:
        (WebCore::RenderSVGBlock::graphicsElement):
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::gradientElement):
        * rendering/svg/RenderSVGInline.h:
        (WebCore::RenderSVGInline::graphicsElement):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::graphicsElement):
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResources.cpp:
        (WebCore::targetReferenceFromResource):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getBoundingBox):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::synchronizePoints):
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::synchronizeTextLength):
        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
        (WebCore::SVGTextContentElement::elementFromRenderer):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::hasSingleSecurityOrigin):
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::containerSize):
        (WebCore::SVGImage::embeddedContentBox):
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):
        (WebCore::SVGImage::computeIntrinsicDimensions):
        (WebCore::SVGImage::startAnimation):
        (WebCore::SVGImage::stopAnimation):

2014-09-22  Simon Fraser  <simon.fraser@apple.com>

        Ensure that layout is up-to-date before hit-testing via RenderView
        https://bugs.webkit.org/show_bug.cgi?id=136651

        Reviewed by David Hyatt.

        Ensure that layout is up-to-date before we do hit-testing via the RenderView.
        Previously, RenderLayer::hitTest() called updateLayout(), but it's better
        to push that responsibility onto RenderView before entering the RenderLayer
        tree.
        
        Make callers a little more consistent in getting the RenderView via
        Frame::contentRenderer(), though perhaps we should remove that and just
        call Document::renderView() everywhere.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press): Hit test via the RenderView, rather
        than doing so on the RenderView's layer, to ensure that we updateLayout().
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityHitTest): This code calls
        hitTest() on arbitrary layers, so needs to explicitly update layout.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::hitTestResultAtPoint): The explicit updateLayout() is
        no longer needed.
        (WebCore::EventHandler::updateCursor):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::hitTestResultInFrame):
        * page/Frame.cpp:
        (WebCore::Frame::contentRenderer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::hitTest): Here's where we ensure that layout is up-to-date.

2014-09-22  Christophe Dumez  <cdumez@apple.com>

        Use downcast<SVG*Element>() instead of toSVG*Element()
        https://bugs.webkit.org/show_bug.cgi?id=137004

        Reviewed by Benjamin Poulain.

        Use downcast<SVG*Element>() instead of toSVG*Element() for casting SVG
        Elements and get rid of the transition toSVG*Element() macros.

        Also use downcast<MathML*Element>() instead of toMathML*Element() for
        casting MathML Elements.

        The HTML Elements casting counterparts will be taken care of in a
        separate patch.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSCursorImageValue.cpp:
        (WebCore::resourceReferencedByCursorElement):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAllRules):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::boundsInRootViewSpace):
        (WebCore::Element::getBoundingClientRect):
        (WebCore::Element::childShouldCreateRenderer):
        (WebCore::Element::fastAttributeLookupAllowed):
        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules):
        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/make_names.pl:
        (printTypeHelpers):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPhrasingContent):
        (WebCore::MathMLElement::childShouldCreateRenderer):
        (WebCore::MathMLElement::attributeChanged):
        * mathml/MathMLElement.h:
        (WebCore::Node::hasTagName):
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::instanceAssociatedWithShadowTreeElement):
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::addChild):
        (WebCore::RenderMathMLMenclose::computePreferredLogicalWidths):
        (WebCore::RenderMathMLMenclose::updateLogicalHeight):
        (WebCore::RenderMathMLMenclose::paint):
        * rendering/svg/RenderSVGBlock.h:
        (WebCore::RenderSVGBlock::graphicsElement):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::foreignObjectElement):
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::gradientElement):
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageElement):
        * rendering/svg/RenderSVGInline.h:
        (WebCore::RenderSVGInline::graphicsElement):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::getElementCTM):
        (WebCore::RenderSVGModelObject::checkIntersection):
        (WebCore::RenderSVGModelObject::checkEnclosure):
        * rendering/svg/RenderSVGModelObject.h:
        (WebCore::RenderSVGModelObject::element):
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::rectElement):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::patternElement):
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::svgSVGElement):
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::graphicsElement):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::textElement):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::textPathElement):
        (WebCore::RenderSVGTextPath::layoutPath):
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::svgSVGElement):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromLineElement):
        (WebCore::updatePathFromPathElement):
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        (WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResources.cpp:
        (WebCore::targetReferenceFromResource):
        (WebCore::SVGResources::buildCachedResources):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createElementRenderer):
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAltGlyphDefElement.cpp:
        (WebCore::SVGAltGlyphDefElement::hasValidGlyphElements):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::SVGAnimatedTransformListAnimator):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::adjustForInheritance):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::rootElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::ownerSVGElement):
        (WebCore::SVGElement::viewportElement):
        (WebCore::SVGElement::getBoundingBox):
        (WebCore::SVGElement::childShouldCreateRenderer):
        (WebCore::SVGElement::title):
        (WebCore::SVGElement::updateRelativeLengthsInformation):
        * svg/SVGElement.h:
        (WebCore::Node::hasTagName):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::buildPendingResource):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::childShouldCreateRenderer):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::isSVGFilterPrimitiveStandardAttributes):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::ensureGlyphCache):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::childrenChanged):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::srcValue):
        (WebCore::SVGFontFaceSrcElement::childrenChanged):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::childrenChanged):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::invalidateGlyphCache):
        * svg/SVGGraphicsElement.h:
        (WebCore::isSVGGraphicsElement):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedInto):
        (WebCore::SVGHKernElement::removedFrom):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        (WebCore::SVGLocatable::computeCTM):
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        (WebCore::SVGMPathElement::pathElement):
        (WebCore::SVGMPathElement::notifyParentOfPathChange):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::synchronizeOrientType):
        (WebCore::SVGMarkerElement::lookupOrCreateOrientTypeWrapper):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        (WebCore::SVGPathElement::synchronizeD):
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::commitChange):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::synchronizePoints):
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setupInitialView):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::synchronizeTextLength):
        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
        (WebCore::SVGTextContentElement::elementFromRenderer):
        * svg/SVGTextContentElement.h:
        (WebCore::isSVGTextContentElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/SVGUseElement.cpp:
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::toClipPath):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::hasCycleUseReferencing):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::insertedInto):
        (WebCore::SVGVKernElement::removedFrom):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewTarget):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        * svg/animation/SVGSMILElement.h:
        (WebCore::isSVGSMILElement):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::hasSingleSecurityOrigin):
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::containerSize):
        (WebCore::SVGImage::embeddedContentBox):
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):
        (WebCore::SVGImage::computeIntrinsicDimensions):
        (WebCore::SVGImage::startAnimation):
        (WebCore::SVGImage::stopAnimation):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animValDidChange):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::contextElement):

2014-09-22  Pratik Solanki  <psolanki@apple.com>

        Follow on fix for [iOS] ASSERTION FAILED: WTF::isMainThread() in WebCore::memoryCache() when using WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=136962

        Rubber-stamped by Simon Fraser.

        Remove the const per review comment. It is not needed.

        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::DiskCacheMonitor):

2014-09-22  Simon Fraser  <simon.fraser@apple.com>

        Move nodeFromPoint() back to Document where it belongs
        https://bugs.webkit.org/show_bug.cgi?id=137012

        Reviewed by Zalan Bujtas.

        nodeFromPoint() was moved into TreeScope for ShadowDOM work, but now we can move
        it back to its logical place.
        
        Make versions of elementFromPoint and caretRangeFromPoint that take LayoutPoints,
        and change the current scale/offset code to be in layout units (which results
        in a small behavior change).
        
        elementFromPoint(int, int) and caretRangeFromPoint(int, int) are still required
        for bindings code.

        * dom/Document.cpp:
        (WebCore::Document::nodeFromPoint):
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):
        * dom/Document.h:
        (WebCore::Document::elementFromPoint): Move logic from TreeScope::elementFromPoint()
        here.
        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint): Deleted.
        (WebCore::TreeScope::elementFromPoint): Deleted.
        * dom/TreeScope.h:

2014-09-22  Benjamin Poulain  <bpoulain@apple.com>

        Add the baseline implementation of :nth-child(An+B of selector-list)
        https://bugs.webkit.org/show_bug.cgi?id=136975

        Reviewed by Darin Adler.

        Tests: fast/css/nth-child-of-classname.html
               fast/css/nth-child-of-complex-selector.html
               fast/css/nth-child-of-compound-selector.html
               fast/css/nth-child-of-tagname.html
               fast/selectors/nth-child-of-basics.html
               fast/selectors/nth-child-of-class-style-update.html
               fast/selectors/nth-child-of-complex-selectors.html
               fast/selectors/nth-child-of-selector-list.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        Pretty basic:
        -Go over the previous siblings.
        -For each sibling, test the selector list. If it matches, increase the count.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        Skip any case of the new selector. This will be implemented separately.

2014-09-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement 'vhea', 'vmtx', and 'kern' tables in SVG -> OTF converter
        https://bugs.webkit.org/show_bug.cgi?id=136971

        Reviewed by Darin Adler.

        This patch fills in the tables related to vertical metrics and kerning. The vertical metrics tables are
        fairly straightforward. On the other hand, the 'kern' table has subtables which can be in a variety
        of formats; however, according to Microsoft, Windows only allows one particular format, which doesn't
        allow for ranges of glyphs to be described and therefore might lead to a large 'kern' table size. In
        the interest of platform agnosticism I have implemented this particular format, and have not actually
        witnessed any extremely large 'kern' tables in any of the fonts that I have looked at.

        I also added basic support for the horiz-origin-x and horiz-origin-y SVG properties, though support
        might not be perfect based on my testing.

        Regarding testing, after this patch, almost all of our SVG fonts tests pass (barring tiny rebaselining;
        the platform font system calculates slightly different advances than we did. These differences are tiny
        and expected from such a dramatic shift in text handling engines.) There are around two dozen failing
        tests left that look like they are actually indiciative of code problems.

        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::ensureGlyphCache): Refactor to accept new signature of
        SVG*KernElement::build*KerningPair().
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::buildHorizontalKerningPair): Refactor to allow for intermediate data to be
        returned, which the SVG -> OTF font converter can use.
        * svg/SVGHKernElement.h: New signature for buildHorizontalKerningPair().
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::GlyphData::GlyphData): Save the glyph's vertical advance along with
        the glyph's horizontal advance.
        (WebCore::SVGToOTFFontConverter::KerningData::KerningData): This data represents a record in one of
        the two 'kern' subtables, and as such needs to be sorted.
        (WebCore::SVGToOTFFontConverter::KerningData::operator<): Sort comparator.
        (WebCore::SVGToOTFFontConverter::appendHEADTable): Save the unitsPerEm locally to save a conditional.
        (WebCore::SVGToOTFFontConverter::appendHHEATable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendHMTXTable): Ditto. Also use the horizontal advance as opposed to
        the vertical advance.
        (WebCore::SVGToOTFFontConverter::appendOS2Table): Save the unitsPerEm locally to save a conditional.
        Also if the average advance isn't found in the font, use the missing glyph's advance. If there is no
        missing glyph, bail and use the unitsPerEm.
        (WebCore::SVGToOTFFontConverter::appendVORGTable): If the default vertical origin isn't found in the
        font, use the missing glyphs's vertical origin. If there is no missing glyph, bail and use 0.
        (WebCore::SVGToOTFFontConverter::appendVHEATable): Parallel of 'hhea' table, except for vertical info.
        (WebCore::SVGToOTFFontConverter::appendVMTXTable): Parallel of 'hmtx' table, except for vertical info.
        (WebCore::SVGToOTFFontConverter::appendKerningHelperFields): Computes and appends 4 fields that font
        parsers need in order to do a binary search on the kern records.
        (WebCore::SVGToOTFFontConverter::addCodepointRanges): For each codepoint in the ranges, look up its
        representative glyph and append it to a set.
        (WebCore::SVGToOTFFontConverter::addCodepoints): For each codepoint in the range, look up its
        representative glyph and append it to a set.
        (WebCore::SVGToOTFFontConverter::addGlyphNames): For each glyph name, look up its representative glyph
        and append it to a set.
        (WebCore::SVGToOTFFontConverter::computeKerningData): Call SVG*KernElement::build*KerningPair() and
        iterate through all the data it returned, building up records into a Vector.
        (WebCore::SVGToOTFFontConverter::appendKERNTable): Go through the vector that computeKerningData()
        returned and actually write out the two subtables. One is for horizontal kerning and the other is for
        vertical kerning.
        (WebCore::CFFBuilder::CFFBuilder): Use the position of the glyph origin to perform the initial moveto
        command.
        (WebCore::transcodeGlyphPaths): Get the glyph's origin and pass it to the CFFBuilder.
        (WebCore::SVGToOTFFontConverter::appendGlyphData): Templated overloading so that the missing glyph
        gets a null SVGGlyphElement pointer but the rest of the glyphs get a non-null one.
        (WebCore::SVGToOTFFontConverter::processGlyphElement): Called on both SVGGlyphElements and
        SVGMissingGlyphElements, this pulls out information from the element and computs its path information.
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Use the new templated version of
        processGlyphElement so we can get the same glyph parsing behavior on SVGMissingGlyphElements. In
        addition, populate two maps for the kerning table creation function to use.
        (WebCore::SVGToOTFFontConverter::convertSVGToOTFFont): Append new tables.
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::buildVerticalKerningPair): Refactor to allow for intermediate data to be
        returned, which the SVG -> OTF font converter can use.
        * svg/SVGVKernElement.h: New signature for buildVerticalKerningPair().

2014-09-22  Alexey Proskuryakov  <ap@apple.com>

        WebSocket crash when a connection is closed from server side
        https://bugs.webkit.org/show_bug.cgi?id=137009
        rdar://problem/18333977
        rdar://problem/12708225

        Reviewed by Brady Eidson.

        I don't think that this can be tested with our test server.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel): Added logging.
        (WebCore::WebSocketChannel::~WebSocketChannel): Ditto.
        (WebCore::WebSocketChannel::close): Protect self, because startClosingHandshake
        can release the last reference.
        (WebCore::WebSocketChannel::fail): Added an assertion that the channel is always
        closed after this function.
        (WebCore::WebSocketChannel::startClosingHandshake): Protect self, and don't change
        the stack from closed back to closing if after failing to send closing handshake.
        (WebCore::WebSocketChannel::processOutgoingFrameQueue): Protect self.

2014-09-22  David Hyatt  <hyatt@apple.com>

        Bad cast in isValidColumnSpanner.
        https://bugs.webkit.org/show_bug.cgi?id=133380.

        Reviewed by Simon Fraser.

        Added fast/multicol/multicol-crazy-nesting.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::isValidColumnSpanner):
        The crawl up the chain looking for unsplittable objects should use containing blocks
        and not be casting to parent boxes. You can have an inline in the parent chain, so
        this was not the right way to walk up the tree.

2014-09-22  David Hyatt  <hyatt@apple.com>

        ASSERT in RenderMultiColumnSet::requiresBalancing.
        https://bugs.webkit.org/show_bug.cgi?id=136376.

        Reviewed by David Kilzer.

        Added fast/multicol/multicol-selection.html.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::isValidColumnSpanner):
        Don't allow an object to become a spanner if it does not have the flow
        thread as its containing block. Otherwise the flow thread won't get notified
        of spanner placeholder insertions, and so the spanner ends up orphaned.

2014-09-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement cap height in SimpleFontDataWin to enable initial-letter support for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=136841

        Reviewed by David Hyatt.

        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit): Add missing calls to set up our fonts.

2014-09-22  Eric Carlson  <eric.carlson@apple.com>

        Update HTMLMediaElement logging
        https://bugs.webkit.org/show_bug.cgi?id=136991

        Reviewed by Alexey Proskuryakov.

        No new tests, only logging was changed.

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

2014-09-22  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r173631): It broke the !ENABLE(VIDEO) build
        https://bugs.webkit.org/show_bug.cgi?id=136946

        Reviewed by Jer Noble.

        No new tests required, no new functionality.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2014-09-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use nullptr in regions code
        https://bugs.webkit.org/show_bug.cgi?id=137001

        Reviewed by Andrei Bucur.

        No new tests as no new functionality is introduced.

        * dom/DOMNamedFlowCollection.cpp:
        (WebCore::DOMNamedFlowCollection::item):
        (WebCore::DOMNamedFlowCollection::namedItem):
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::flowByName):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::WebKitNamedFlow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::getLayerListForRegion):
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        (WebCore::RenderFlowThread::mapFromFlowToRegion):
        (WebCore::RenderFlowThread::firstRegion):
        (WebCore::RenderFlowThread::lastRegion):
        (WebCore::RenderFlowThread::currentActiveRenderBox):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::nextRendererForElement):

2014-09-17  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Cannot play Vimeo video
        https://bugs.webkit.org/show_bug.cgi?id=134969

        Reviewed by Sergio Villar Senin.

        Ensure the GStreamer HTTP source element also sends cookies when
        it's sending its requests. Some streaming platforms such as Vimeo
        do server-side cookie checks on incoming requests before serving
        media data.

        Test: http/tests/media/hls/video-cookie.html

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart): Set first-party cookie URL to the request so
        the ResourceLoader properly sets cookies in the HTTP request.

2014-09-22  Mihnea Ovidenie  <mihnea@adobe.com>

        Leverage RenderLayerBacking::renderer() instead of m_owningLayer.renderer()
        https://bugs.webkit.org/show_bug.cgi?id=136954

        Reviewed by Darin Adler.

        No new tests just refactoring.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        (WebCore::RenderLayerBacking::paintIntoLayer):

2014-09-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Assertion failure and null dereference crash when using animations and regions
        https://bugs.webkit.org/show_bug.cgi?id=136918

        Reviewed by Andrei Bucur.

        In some situations, for instance when an image has an attached animation, the style change caused by the animation
        triggers a geometry update for the backing store associated with the image's layer. This may occur before
        the layout for the image has finished.

        Moreover, if the image in such situation - having a composited layer - is displayed in a region,
        sicne the layout did not finish yet, the mappings between the layers of the elements collected in the named flow
        and the regions associated with the named flow are not updated and cannot be used.

        Therefore in those situations, we have to bail out early and use these mappings only after the layout has finished.

        This patch also changes RenderLayerBacking method updateAfterDescendents -> updateAfterDescendants.

        Test: fast/regions/animated-image-in-region.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::cachedRegionForCompositedLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):

2014-09-21  Chris Dumez  <cdumez@apple.com>

        Generate Element casting helper functions
        https://bugs.webkit.org/show_bug.cgi?id=136839

        Reviewed by Darin Adler.

        Generate Element casting helper functions instead of requiring explicit
        use of NODE_TYPE_CASTS() macro. Casting is now done using the following
        form: downcast<HTMLDivElement>(), instead of toHTMLDivElement().

        The previous form (i.e. toHTMLDivElement()) is still supported for now
        by generating macros that convert these calls into the new form, until
        the code base is ported to the new casting helpers.

        The plan is also to use is<HTMLDivElement>() instead of
        isHTMLDivElement() for consistency but this was not changed in this
        patch to avoid blowing up the size.

        This CL also updates the way we convert a JSValue into an
        implementation pointer. Instead of using toHTMLDivElement(), which
        looked like a cast, we now use JSHTMLDivElement::toWrapped(). This
        avoids conflicting with the toXXXElement() macros and makes it
        clearer this is not a simple cast.

        No new tests, no behavior change.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * WebCore.exp.in:
        * bindings/js/JSAudioBufferSourceNodeCustom.cpp:
        (WebCore::JSAudioBufferSourceNode::setBuffer):
        * bindings/js/JSBlobCustom.cpp:
        (WebCore::constructJSBlob):
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::JSCommandLineAPIHost::getEventListeners):
        (WebCore::JSCommandLineAPIHost::databaseId):
        (WebCore::JSCommandLineAPIHost::storageId):
        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::toHTMLFormElementOrNull):
        (WebCore::constructJSDOMFormData):
        (WebCore::JSDOMFormData::append):
        (WebCore::toHTMLFormElement): Deleted.
        * bindings/js/JSDOMStringListCustom.cpp:
        (WebCore::JSDOMStringList::toWrapped):
        (WebCore::toDOMStringList): Deleted.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::toWrapped):
        (WebCore::toDOMWindow): Deleted.
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::createTouchList):
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::JSEventTarget::toWrapped):
        (WebCore::toEventTarget): Deleted.
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * bindings/js/JSHTMLMediaElementCustom.cpp:
        (WebCore::JSHTMLMediaElement::setController):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add):
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        (WebCore::selectIndexSetter):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::fillMessagePortArray):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::toWrapped):
        (WebCore::toNodeFilter): Deleted.
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        (WebCore::JSWebGLRenderingContext::getProgramParameter):
        (WebCore::JSWebGLRenderingContext::getShaderParameter):
        (WebCore::JSWebGLRenderingContext::getUniform):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::JSTestActiveDOMObject::toWrapped):
        (WebCore::toTestActiveDOMObject): Deleted.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::toWrapped):
        (WebCore::toTestCustomNamedGetter): Deleted.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::toWrapped):
        (WebCore::toTestEventConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        (WebCore::JSTestEventTarget::toWrapped):
        (WebCore::toTestEventTarget): Deleted.
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::toWrapped):
        (WebCore::toTestException): Deleted.
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::toWrapped):
        (WebCore::toTestGenerateIsReachable): Deleted.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceSupplementalNode):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        (WebCore::JSTestInterface::toWrapped):
        (WebCore::toTestInterface): Deleted.
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::toWrapped):
        (WebCore::toTestMediaQueryListListener): Deleted.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::toWrapped):
        (WebCore::toTestNamedConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministic::toWrapped):
        (WebCore::toTestNondeterministic): Deleted.
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithSequence):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithArray):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        (WebCore::JSTestObj::toWrapped):
        (WebCore::toTestObj): Deleted.
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors3):
        (WebCore::JSTestOverloadedConstructors::toWrapped):
        (WebCore::toTestOverloadedConstructors): Deleted.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::toWrapped):
        (WebCore::toTestSerializedScriptValueInterface): Deleted.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):
        (WebCore::JSTestTypedefs::toWrapped):
        (WebCore::toTestTypedefs): Deleted.
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattribute::toWrapped):
        (WebCore::toattribute): Deleted.
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonly::toWrapped):
        (WebCore::toreadonly): Deleted.
        * bindings/scripts/test/JS/JSreadonly.h:
        * dom/Element.h:
        (WebCore::downcast):
        * dom/make_names.pl:
        (printTypeHelpers):
        * html/HTMLAnchorElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLDataListElement.h:
        * html/HTMLDetailsElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLVideoElement.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::scriptValueAsNode):
        * mathml/MathMLMencloseElement.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.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/SVGMissingGlyphElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:

2014-09-21  Christophe Dumez  <cdumez@apple.com>

        Fix post-mortem nits for r173724
        https://bugs.webkit.org/show_bug.cgi?id=136986

        Reviewed by Darin Adler.

        Fix post-mortem nits for r173724.

        No new tests, no behavior change.

        * editing/EditingStyle.cpp:
        (WebCore::HTMLAttributeEquivalent::attributeValueAsCSSValue):
        (WebCore::HTMLFontSizeEquivalent::attributeValueAsCSSValue):
        Use nullptr instead of 0.

        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::doUnapply):
        Use getIdAttribute() / setIdAttribute().

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        Use fastHasAttribute() for nowrap and do an early return to avoid
        calling styleOrColLogicalWidth() if the nowrap attribute is missing.

2014-09-21  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, speculative build fix.
        
        If you use typed arrays, you gotta include runtime/TypedArrayInlines.h.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:

2014-09-19  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] Support secure proof of key release in the com.apple.fps.2_0 keysystem.
        https://bugs.webkit.org/show_bug.cgi?id=136898

        Reviewed by Eric Carlson.

        Add support for proof of key release to the CDM by supporting a new "mime" type called
        "keyrelease". When a session of type "keyrelease" is created, the initData is the server
        certificate, the keyMessage contains the first stored proof of key release if present,
        and closing the session will remove that proof from storage.

        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystemAndMimeType):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::CDMSessionMediaSourceAVFObjC):
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyRequest):
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys):
        (WebCore::sessionStorageDirectory):
        (WebCore::CDMSessionMediaSourceAVFObjC::update):
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyReleaseMessage):

2014-09-19  Jer Noble  <jer.noble@apple.com>

        [Media][Mac] Buffered range slides around as you resize a window
        https://bugs.webkit.org/show_bug.cgi?id=136960

        Reviewed by Dean Jackson.

        Rather than using a canvas as the background image for the timeline slider, use a generated SVG image
        to represent the buffered ranges.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-timeline):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.updateProgress):

2014-09-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CoordinatedGraphics][EFL] window.scrollTo(x, y) doesn't work when fixed layout is enabled
        https://bugs.webkit.org/show_bug.cgi?id=136917

        Reviewed by Darin Adler.

        When fixed layout is enabled, scrollTo doesn't work on EFL port with coordinated graphics.
        Since updateScrollbars() doesn't update scroll position when delegatesScrolling() is enabled. 
        To fix this issue, EFL port should update scroll position based on WK2 port. This patch
        update scroll position in FrameView::requestScrollPositionUpdate() as Mac port.

        TestWebKitAPI: Tools/TestWebKitAPI/Tests/WebKit2/efl/WKViewScrollTo

        * page/FrameView.cpp:
        (WebCore::FrameView::requestScrollPositionUpdate):

2014-09-19  Brent Fulgham  <bfulgham@apple.com>

        Latching in iframes is not working as expected
        https://bugs.webkit.org/show_bug.cgi?id=136729
        <rdar://problem/18370549>

        Reviewed by Simon Fraser.

        Test: platform/mac/fast/scrolling/scrolling-iframe-100pct.html

        Correct latching behavior by moving the concept of latching from the event handler to the main frame.
        The event handlers are per-document, and can improperly latch to the iframe element (rather than the
        scrollable content of the iframe) resulting in incorrect behavior.

        Also move the wheel event delta tracking to the main frame, as this is similarly "top-level" in nature.

        * WebCore.vcxproj/WebCore.vcxproj: Add new LatchedState class.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Update constructor after moving some members to the new
        LatchedState object.
        (WebCore::EventHandler::clear): Call 'clear' on the LatchedState class.
        (WebCore::EventHandler::platformRecordWheelEvent):  Update for new LatchedState class.
        (WebCore::EventHandler::handleWheelEvent): Ditto.
        (WebCore::EventHandler::clearLatchedState): Ditto.
        (WebCore::EventHandler::defaultWheelEventHandler): Ditto.
        * page/EventHandler.h:
        * page/LatchedState.cpp: Added.
        (WebCore::LatchedState::LatchedState):
        (WebCore::LatchedState::~LatchedState):
        (WebCore::LatchedState::clear):
        (WebCore::LatchedState::setWheelEventElement):
        (WebCore::LatchedState::setWidgetIsLatched):
        (WebCore::LatchedState::setPreviousWheelScrolledElement):
        (WebCore::LatchedState::setScrollableContainer):
        * page/LatchedState.h: Added.
        (WebCore::LatchedState::wheelEventElement):
        (WebCore::LatchedState::frame):
        (WebCore::LatchedState::setFrame):
        (WebCore::LatchedState::widgetIsLatched):
        (WebCore::LatchedState::previousWheelScrolledElement):
        (WebCore::LatchedState::scrollableContainer):
        (WebCore::LatchedState::startedGestureAtScrollLimit):
        (WebCore::LatchedState::setStartedGestureAtScrollLimit):
        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame): Update for new members (LatchedState and WheelEventDeltaTracker)
        * page/MainFrame.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents): Use mainFrame-located latching information.
        (WebCore::EventHandler::platformRecordWheelEvent): Use mainFrame-located wheel event delta tracking.
        (WebCore::EventHandler::platformCompleteWheelEvent): Make sure to use the latched frame as well as
        the latched element so that events get routed properly.
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): Update for new mainFrame
        location for latched state information.

2014-09-19  Chris Dumez  <cdumez@apple.com>

        Minimize virtual function calls in MarkupAccumulator
        https://bugs.webkit.org/show_bug.cgi?id=136957

        Reviewed by Benjamin Poulain.

        This patch minimizes the number of virtual function calls in
        MarkupAccumulator by:
        - De-virtualizing MarkupAccumulator::appendString(), which is never
          overridden
        - Having MarkupAccumulator::appendEndTag() virtual function take an
          Element in argument instead of a Node, as it only applies to Element.
          Also add a non-virtual overload that takes a Node in argument and
          that does the isElementNode() check so that we don't need to explicitly
          do the check at each call site.

        No new tests, no behavior change.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendEndTag):
        (WebCore::MarkupAccumulator::shouldSelfClose):
        (WebCore::MarkupAccumulator::appendEndMarkup):
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::appendEndTag):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::appendEndTag):

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

        [iOS] ASSERTION FAILED: WTF::isMainThread() in WebCore::memoryCache() when using WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=136962
        <rdar://problem/18342344>

        Reviewed by Geoffrey Garen.

        The disk cache monitor callback code was being executed on the main thread. This is wrong
        when the web thread is being used in WebKit1 on iOS. The code needs to run on the web
        thread. Use WebThreadRun to dispatch the block to the web thread. This works for WebKit2 as
        well since when web thread is not being used, WebThreadRun invokes the block directly.

        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::DiskCacheMonitor):

2014-09-19  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; pass duration into the lambda.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationChanged):

2014-09-19  Dean Jackson  <dino@apple.com>

        Multithreaded WebGL is a bad idea - remove it
        https://bugs.webkit.org/show_bug.cgi?id=136964
        <rdar://problem/18399858>

        Reviewed by Brent Fulgham.

        We should not allow multithreaded GL access. Remove the
        feature.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        * page/Settings.in:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2014-09-19  Eric Carlson  <eric.carlson@apple.com>

        [MSE][Mac] work around AVSampleBufferRenderSynchronizer early callbacks
        https://bugs.webkit.org/show_bug.cgi?id=136958

        Reviewed by Jer Noble.

        No new tests, we have been unable to come up with a test case that reproduces
        this issue reliably.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationChanged): Set the synchronizer
            time to duration when the duration time observer is called early. Add more logging.

2014-09-19  Benjamin Poulain  <bpoulain@apple.com>

        CSS JIT: allocate the minimum required register count in debug
        https://bugs.webkit.org/show_bug.cgi?id=136933

        Reviewed by Andreas Kling.

        It is hard to catch bugs of minimumRegisterRequirements() because every CPU has a different
        number of registers available by default.

        This patch aims at improving testing by creating artificial register pressure when running
        in debug. When running in debug, we no longer allocate all the available registers right away.
        Instead, we allocate just enough to satisfy minimumRegisterRequirements().

        The expectation with this is that under-allocation would be detected quicker since they would
        crash debug builds.

        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::RegisterAllocator):
        (WebCore::RegisterAllocator::reserveCallerSavedRegisters):
        (WebCore::RegisterAllocator::availableRegisterCount): Deleted.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):

2014-09-19  Benjamin Poulain  <bpoulain@apple.com>

        Add a size check for CSSSelector
        https://bugs.webkit.org/show_bug.cgi?id=136882

        Reviewed by Christophe Dumez.

        * css/CSSSelector.cpp:

2014-09-19  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r173464): It broke the !ENABLE(PICTURE_SIZES) build
        https://bugs.webkit.org/show_bug.cgi?id=136942

        Reviewed by Simon Fraser.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):

2014-09-19  Simon Fraser  <simon.fraser@apple.com>

        Provide a default argument for the most commonly used HitTestRequest variant
        https://bugs.webkit.org/show_bug.cgi?id=136653

        Reviewed by Darin Adler.

        Make the default HitTestRequest flags be ReadOnly | Active | DisallowShadowContent
        and change call sites using the default flags to use a HitTestRequest temporary.

        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::handleMousePressEvent):
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::HitTestRequest):

2014-09-19  Chris Dumez  <cdumez@apple.com>

        Allow DOM methods to return references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=136931

        Reviewed by Sam Weinig.

        It is common practice in WebKit to have methods return a reference
        instead of a pointer if the pointer can never be null. However, this
        unfortunately did not work for DOM methods (functions called by JS
        bindings). This prevented further refactoring.

        This patch brings support for having DOM methods to return references
        instead of pointers when the pointer cannot be null. The generated
        bindings were calling WTF::getPtr() on the pointer type returned by
        the implementation already (in case it was a smart pointer type).
        This patch leverages this by having WTF::getPtr() convert reference
        arguments into raw pointers.

        This patch also updates a few DOM methods on Document and Element
        classes to return a reference instead of a pointer, to test the change.
        There are likely more DOM methods that can be updated though.

        No new tests, no behavior change.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::classList):
        * bindings/js/JSDOMBinding.h:
        (WTF::getPtr): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::implementation):
        (WebCore::Document::webkitGetNamedFlows):
        (WebCore::Document::namedFlows):
        (WebCore::Document::setXMLVersion):
        (WebCore::Document::setXMLStandalone):
        (WebCore::Document::securityPolicy):
        (WebCore::Document::styleSheets):
        * dom/Document.h:
        (WebCore::Document::timing):
        * dom/Element.cpp:
        (WebCore::Element::classList):
        (WebCore::Element::dataset):
        * dom/Element.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::displayLastTextTrackCueBox):
        (WebCore::VTTRegion::willRemoveTextTrackCueBox):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::documentTiming):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName):

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

        Always assume internal SDK when building configuration Production
        https://bugs.webkit.org/show_bug.cgi?id=136925
        <rdar://problem/18362399>

        Reviewed by Dan Bernstein.

        As a side effect of this change we will always enable ENABLE_TOUCH_EVENTS, ENABLE_IOS_{GESTURE, TOUCH}_EVENTS,
        and ENABLE_XSLT when either building configuration Production or building with the Internal SDK.

        * Configurations/Base.xcconfig:

2014-09-19  Chris Dumez  <cdumez@apple.com>

        Optimize MarkupAccumulator::appendText()
        https://bugs.webkit.org/show_bug.cgi?id=136935

        Reviewed by Benjamin Poulain.

        MarkupAccumulator::appendText() was calling the generic appendNodeValue()
        method to append the text. appendNodeValue() supports any kind of Node and
        thus calls the Node::nodeValue() virtual function.

        Since appendText() is the only caller to appendNodeValue(), this patch
        inlines the code in appendText() and makes it specific to Text Node, and
        thus more efficient. The code now calls CharacterData::data() instead of
        the Node::nodeValue() virtual function. This patch also updates
        CharacterData::data() to return a const reference to avoid copying the
        return value.

        No new tests, no behavior change.

        * dom/CharacterData.h:
        (WebCore::CharacterData::data):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendText):
        (WebCore::MarkupAccumulator::appendNodeValue): Deleted.
        * editing/MarkupAccumulator.h:

2014-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Dot not allow to create delete-on-destroy GMainLoopSources
        https://bugs.webkit.org/show_bug.cgi?id=136923

        Reviewed by Gustavo Noronha Silva.

        * platform/gtk/GtkDragAndDropHelper.cpp:
        (WebCore::GtkDragAndDropHelper::handleDragLeave): Use GMainLoopSource::scheduleAndDeleteOnDestroy().

2014-09-18  Roger Fong  <roger_fong@apple.com>

        Add a move operator and constructor override to HashSet.
        https://bugs.webkit.org/show_bug.cgi?id=136934.

        * dom/Node.cpp:
        (WebCore::Document::invalidateNodeListAndCollectionCaches): Remove the now unneeded call to clear the HashSet.

2014-09-18  Roger Fong  <roger_fong@apple.com>

        [Windows] Media tests all fail because they cannot find localized strings.
        
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::mediaControlsScript):
        Make sure to use localized strings files in RenderThemeSafari.

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

        Remove generator/yield terminology in RenderInline's GeneratorContext
        https://bugs.webkit.org/show_bug.cgi?id=119278

        Reviewed by Sam Weinig.
        
        Get rid of the icky Generator/yield syntax used for collecting rects in RenderInline.
        Just replace the operator() with an explicit addRect().
        
        Also some drive-by nullptr cleanup, and removing default arguments from
        addChildIgnoringContinuation() calls.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::generateLineBoxRects):
        (WebCore::RenderInline::generateCulledLineBoxRects):
        * rendering/RenderInline.h:

2014-09-18  Jeremy Jones  <jeremyj@apple.com>

        Improve fullscreen video rotation animation.
        https://bugs.webkit.org/show_bug.cgi?id=136870

        Reviewed by Simon Fraser.

        Instead of setting the frame on the video layer, set position and bounds separately. This allows the position to be synchronized with the rest of the animation.
        When using a fencePort to synchronize animations, if the fence times out, pivoting around the center provides a better fallback.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer setVideoSublayer:]): added
        (-[WebAVVideoLayer videoSublayer]): added
        (-[WebAVVideoLayer setBounds:]):  set position and bounds insted of frame.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): use setVideoSublayer
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setVideoFullscreenLayer): set bounds and anchorPoint instead of frame
        (WebVideoFullscreenModelVideoElement::setVideoLayerFrame): set bounds instead of frame.

2014-09-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Text laid out with the SVG -> OTF font converter does not have the same metrics as with the SVG font code path
        https://bugs.webkit.org/show_bug.cgi?id=136907

        Reviewed by Darin Adler.

        There are three things that are causing text laid out with the SVG -> OTF font converter to not have metrics that
        measure our existing SVG codepath. They are:

        1. Creating a font with a 0 ascent or descent makes OS X think that something is wrong with the font, and take
        a different codepath when trying to parse ascent and descent information. This patch checks for this condition
        and sets the ascent/descent to 1 FUnit instead (which is generally much smaller than a pixel).
        2. Our SVG font codepath hardcodes a line gap of 1/10th of the font size for every font. This patch makes the
        font converter obey this.
        3. The converter was not allowing for default glyph advances as per the SVG font specification. This patch
        does so.

        No new tests yet, but they will come soon! I promise!

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendHHEATable):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

2014-09-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r168921): SVG elements may be unnecessarily rebuilt
        https://bugs.webkit.org/show_bug.cgi?id=136373

        Reviewed by David Kilzer.

        Fixes an issue where a SVG element may be unnecessarily rebuilt. In particular,
        it is unnecessary to rebuild a SVG element that will be removed from the document.

        Test: svg/custom/remove-subtree-including-use-with-child-textpath-that-references-earlier-path.html

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget): Modified to remove a SVG element
        from the list of elements to be rebuilt.

2014-09-18  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout r173731. Broke multiple builds.

        * WebCore.exp.in:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::show):
        * inspector/InspectorController.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        * page/PageDebuggable.h:
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend):

2014-09-18  Beth Dakin  <bdakin@apple.com>

        ASSERT in RenderBox::instrinsicScrollbarLogicalWidth opening the inspector
        https://bugs.webkit.org/show_bug.cgi?id=136929

        Reviewed by Simon Fraser.

        This is a regression from http://trac.webkit.org/changeset/173668 
        This code is wrong after that change because it assumes that overflow:scroll will 
        always have a scrollbar. That is no longer the case. We need to check to make sure 
        it’s an overflow:scroll that does NOT have overflow:auto behavior.

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

2014-09-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Should be able to attach a debugger to a JSContext before anything is executed
        https://bugs.webkit.org/show_bug.cgi?id=136893

        Reviewed by Timothy Hatcher.

        Automatic inspection is currently disabled for web pages.
        This just updates the interfaces that changed.

        * WebCore.exp.in:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::show):
        * inspector/InspectorController.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        * page/PageDebuggable.h:
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend):

2014-09-18  Chris Dumez  <cdumez@apple.com>

        Use fastHasAttribute() / fastGetAttribute() when possible
        https://bugs.webkit.org/show_bug.cgi?id=136900

        Reviewed by Benjamin Poulain.

        Use fastHasAttribute() / fastGetAttribute() when possible, that is when
        the attribute is not SVG-animated or the |style| attribute, to avoid
        synchronizing attributes unnecessarily.

        Also avoid calling hasAttribute(xxxAttr) then getAttribute(xxxAttr) as
        it causes 2 linear searches. It is best to call getAttribute(xxxAttr)
        directly and check if it returns the nullAtom.

        No new tests, no behavior change. Element::fastAttributeLookupAllowed()
        is there as a safety set for debug builds.

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isEnabled):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeTextForWebArea):
        (WebCore::AccessibilityNodeObject::hierarchicalLevel):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::contentEditableAttributeIsEnabled):
        * dom/Document.cpp:
        (WebCore::Document::hasManifest):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesLabelForAttribute):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::imageSourceURL):
        (WebCore::Element::pseudo):
        (WebCore::Element::spellcheckAttributeState):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        * editing/EditingStyle.cpp:
        (WebCore::HTMLAttributeEquivalent::attributeValueAsCSSValue):
        (WebCore::HTMLFontSizeEquivalent::attributeValueAsCSSValue):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::doUnapply):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::draggable):
        (WebCore::HTMLAnchorElement::sendPings):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::addSubresourceAttributeURLs):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::value):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::dir):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::imageSourceURL):
        (WebCore::HTMLEmbedElement::addSubresourceAttributeURLs):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::~HTMLFieldSetElement):
        (WebCore::updateFromControlElementsAncestorDisabledStateUnder):
        (WebCore::HTMLFieldSetElement::disabledAttributeChanged):
        (WebCore::HTMLFieldSetElement::disabledStateChanged):
        (WebCore::HTMLFieldSetElement::childrenChanged):
        (WebCore::HTMLFieldSetElement::didMoveToNewDocument):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::computeIsDisabledByFieldsetAncestor):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::action):
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::noResize):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::location):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedByParser):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::altText):
        (WebCore::HTMLImageElement::alt):
        (WebCore::HTMLImageElement::draggable):
        (WebCore::HTMLImageElement::src):
        (WebCore::HTMLImageElement::addSubresourceAttributeURLs):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::finishParsingChildren):
        (WebCore::HTMLInputElement::altText):
        (WebCore::HTMLInputElement::reset):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::rel):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::content):
        (WebCore::HTMLMetaElement::httpEquiv):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::imageSourceURL):
        (WebCore::HTMLObjectElement::addSubresourceAttributeURLs):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::groupLabelText):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::max):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::sourceAttributeValue):
        (WebCore::HTMLScriptElement::charsetAttributeValue):
        (WebCore::HTMLScriptElement::languageAttributeValue):
        (WebCore::HTMLScriptElement::forAttributeValue):
        (WebCore::HTMLScriptElement::eventAttributeValue):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::addSubresourceAttributeURLs):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rules):
        (WebCore::HTMLTableElement::summary):
        (WebCore::HTMLTableElement::addSubresourceAttributeURLs):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::align):
        (WebCore::HTMLTableSectionElement::ch):
        (WebCore::HTMLTableSectionElement::vAlign):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::maxLength):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::searchEventsShouldBeDispatched):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * page/Frame.cpp:
        (WebCore::Frame::matchLabelsAgainstElement):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImageToDataObject):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::autosaveName):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):

2014-09-18  Chris Dumez  <cdumez@apple.com>

        Have LiveNodeLists / HTMLCollections's elementMatches() take a reference
        https://bugs.webkit.org/show_bug.cgi?id=136902

        Reviewed by Darin Adler.

        Have LiveNodeLists / HTMLCollections's elementMatches() take a reference
        in argument instead of a pointer as the Element can never be null.

        No new tests, no behavior change.

        * dom/ClassNodeList.h:
        (WebCore::ClassNodeList::elementMatches):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesWindowNamedItem):
        (WebCore::keyMatchesDocumentNamedItem):
        * dom/Element.cpp:
        (WebCore::Element::updateNameForDocument):
        (WebCore::Element::updateIdForDocument):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/LiveNodeList.h:
        (WebCore::CachedLiveNodeList<NodeListType>::collectionBegin):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionLast):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseForward):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseBackward):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::elementMatches):
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::elementMatches):
        (WebCore::HTMLTagNodeList::elementMatches):
        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement):
        * html/HTMLNameCollection.cpp:
        (WebCore::WindowNameCollection::elementMatchesIfNameAttributeMatch):
        (WebCore::WindowNameCollection::elementMatches):
        (WebCore::DocumentNameCollection::elementMatchesIfIdAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatchesIfNameAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatches):
        * html/HTMLNameCollection.h:
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::elementMatches):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
        (WebCore::RadioNodeList::elementMatches):
        * html/RadioNodeList.h:

2014-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove unused methods from MediaPlayerClient
        https://bugs.webkit.org/show_bug.cgi?id=136884

        Reviewed by Eric Carlson.

        Remove unused methods from MediaPlayerClient that introduce
        dependencies on WebCore types.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerOwningDocument): Deleted.
        (WebCore::MediaPlayerClient::mediaPlayerHostWindow): Deleted.
        (WebCore::MediaPlayerClient::mediaPlayerWindowClipRect): Deleted.

2014-09-17  Iago Toral  <itoral@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add Wayland support to GLContextEGL
        https://bugs.webkit.org/show_bug.cgi?id=136829

        Reviewed by Martin Robinson.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::sharedEGLDisplay): Special-case the shared EGL display initialization
        for the GTK port when running under Wayland. In that case the pointer to the
        native wl_display object should be passed to eglGetDisplay(). If not running
        under Wayland we should fall back to using the shared X11 display (if support
        for that display system is enabled) or the EGL_DEFAULT_DISPLAY.

2014-09-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r173695.

        Broke building third-party Legacy WebKit apps; will
        investigate offline

        Reverted changeset:

        "[iOS] Make WebCore build with public iOS SDK"
        https://bugs.webkit.org/show_bug.cgi?id=136487
        http://trac.webkit.org/changeset/173695

2014-09-17  Roger Fong  <roger_fong@apple.com>

        Speculative fix for a fast\dom\html-collections-named-getter failing only in Debug builds.

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

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

        Add parsing for :nth-child(An+B of selector)
        https://bugs.webkit.org/show_bug.cgi?id=136845

        Reviewed by Antti Koivisto.

        Add support for parsing :nth-child(of). The implementation of selector matching
        will be in a follow up, there are enough edge cases here already.

        Spec here: http://dev.w3.org/csswg/selectors4/#the-nth-child-pseudo

        Test: fast/css/parsing-css-nth-child-of.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        (WebCore::CSSParser::realLex):
        The parser generate two new kinds of tokens:
        -NTHCHILDFUNCTION, matching the "nth-child" identifier.
        -NTHCHILDSELECTORSEPARATOR, matching the "of" keyword separating An+B from the selector list.

        NTHCHILDFUNCTION is used to extend the new syntax only for :nth-child() and not all the "nth" functions
        (e.g. :nth-of-type()).

        NTHCHILDSELECTORSEPARATOR exists for two reasons:
        -We must clear the "parsingMode" before parsing selectorList. If we failed to do that, the complex selectors
         would be parsed in NthChildMode, which has all kind of bad side effects.
        -The second reason is differentiacting "of" for all the other identifiers. Arguably, this could have been done
         in the grammar, but it is clearer this way since we already need the branches for the parsingMode.

        * css/CSSGrammar.y.in:
        Those are pretty much duplicates of the existing FUNCTION rules but supporting the new syntax.

        * css/CSSParserValues.cpp:
        (WebCore::selectorListMatchesPseudoElement):
        (WebCore::CSSParserSelector::matchesPseudoElement):
        Matching pseudo elements does not make much sense for those selectorList (e.g. :nth-child(2n of ::before)).
        Add helper function to fail parsing of those cases.

        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::selectorList):
        Updated serialization code for CSS OM.

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

        CSS value in whitespace-separated list attribute selector (~=) mishandles tab/newline/etc.
        https://bugs.webkit.org/show_bug.cgi?id=136807

        Reviewed by Antti Koivisto.

        The spec defines selector lists as token separated by white space.

        The definition of white space for CSS Selectors is:
        "White space in Selectors consists of the code points SPACE (U+0020),
        TAB (U+0009), LINE FEED (U+000A), CARRIAGE RETURN (U+000D), and FORM FEED (U+000C)
        can occur in whitespace. Other space-like code points, such as EM SPACE (U+2003)
        and IDEOGRAPHIC SPACE (U+3000), are never part of white space."

        The old code was only matching SPACE (U+0020) which is buggy. This patch
        adds support for the other caracters.

        Tests: fast/selectors/attr-list-01.html
               fast/selectors/attribute-list-with-whitespace-in-selector.html
               fast/selectors/attribute-list-with-whitespace-in-value.html

        * css/SelectorChecker.cpp:
        (WebCore::attributeValueMatches):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::attributeValueSpaceSeparetedListContains):
        Add the missing checks.

        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::setRegionSettings):
        (WebCore::VTTRegion::parseSettingValue):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::hasRequiredFileIdentifier):
        (WebCore::WebVTTParser::collectTimingsAndSettings):
        * html/track/WebVTTParser.h:
        While looking for affected code, I discovered WebVTT redefines isHTMLSpace().
        I cleaned that code.

2014-09-17  Gavin Barraclough  <baraclough@apple.com>

        Aways have a PageThrottler (sometimes have a UserActivity::Impl)
        https://bugs.webkit.org/show_bug.cgi?id=136892

        Reviewed by Geoffrey Garen.

        Some instances of Page have a PageThrottler to track activity on the Page, and some do not.
        (Specifically, those created from WebPage in WK2 do, those related to WK1, SVG & inspector do not).

        We do this for three reasons:
            * We do not need to take AppNap assertions on WK1.
            * Some Pages do not track their visibility correctly, and would always claim to be visible.
            * Page VisibilityState is not set until after construction, so if we instantiate

        Creating the entire PageThrottler lazily has the drawback that we have to check for its existence at
        numerous points throughout the code, and we'll miss activity that occurs between the Page being created
        & the PageThrottler added to it (really a theoretical problem right now, since they're currently always
        created pretty much back to back).

        Instead, Page should always have a PageThrottler, & instead make the UserActivity::Impl on the
        PageThrottler be added later.

        * WebCore.exp.in:
            - createPageThrottler -> enablePageThrottler
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
            - Page::pageThrottler now returns a reference rather than a pointer
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::started):
            - Page::pageThrottler now returns a reference rather than a pointer
        * page/Page.cpp:
        (WebCore::Page::Page):
            - instantiate PageThrottler in constructor
        (WebCore::Page::enablePageThrottler):
            - renamed from createPageThrottler, instead of creating the PageThrottler this method now
              instruct PageThrottler to create a UserActivity::Impl
        (WebCore::Page::setViewState):
            - m_pageThrottler is not a pointer
        (WebCore::Page::createPageThrottler): Deleted.
            - renamed to enablePageThrottler
        * page/Page.h:
        (WebCore::Page::pageThrottler):
            - now returns a reference
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - no longer instantiate m_activity
        (WebCore::PageThrottler::createUserActivity):
            - lazily instantiate m_activity, call updateUserActivity
        (WebCore::PageThrottler::updateUserActivity):
            - m_activity may not yet be instantiated; added early return
        * page/PageThrottler.h:
            - m_activity becomes a std::unique_ptr, added createUserActivity

2014-09-17  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebCore build with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=136487

        Reviewed by David Kilzer.

        Add headers that wrap Mac and iOS SPIs and update WebCore source files to include these
        headers instead of the corresponding actual SPI header(s).

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCG.props:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMInternal.mm:
        * bridge/objc/objc_instance.mm:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/cocoa/DisplaySleepDisablerCocoa.cpp:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/cg/BitmapImageCG.cpp:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        * platform/graphics/ios/FontCacheIOS.mm:
        * platform/graphics/ios/FontServicesIOS.mm:
        * platform/graphics/ios/SimpleFontDataIOS.mm:
        * platform/graphics/mac/FontMac.mm:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        * platform/graphics/mac/MediaPlayerProxy.h:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/ios/LegacyTileCache.mm:
        * platform/ios/LegacyTileGrid.mm:
        * platform/ios/LegacyTileGridTile.mm:
        * platform/ios/PlatformEventFactoryIOS.mm:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/ios/WebEvent.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        * platform/ios/wak/WAKAppKitStubs.h:
        * platform/ios/wak/WAKView.h:
        * platform/ios/wak/WKGraphics.h:
        * platform/ios/wak/WKGraphics.mm:
        * platform/ios/wak/WebCoreThread.mm:
        * platform/network/ios/QuickLook.mm:
        * platform/spi/ca/CALayerSPI.h: Added.
        * platform/spi/ca/CATiledLayerSPI.h: Added.
        * platform/spi/cf/CFLocaleSPI.h: Modified to use EXTERN_C.
        * platform/spi/cf/CFNetworkConnectionCacheSPI.h: Ditto. Also changed header visibility from private to project.
        * platform/spi/cf/CFURLRequestSPI.h: Ditto. Also modified to unconditionally include header <CoreFoundation/CFBase.h>.
        * platform/spi/cg/CGColorTransformSPI.h: Added.
        * platform/spi/cg/CGContextSPI.h: Added.
        * platform/spi/cg/CGFloatSPI.h: Added.
        * platform/spi/cg/CGFontGlyphSupportSPI.h: Added.
        * platform/spi/cg/CGFontInfoSPI.h: Added.
        * platform/spi/cg/CGFontRenderingSPI.h: Added.
        * platform/spi/cg/CGFontUnicodeSupportSPI.h: Added.
        * platform/spi/cg/CGImageSPI.h: Added.
        * platform/spi/cg/CGSRegionSPI.h: Added.
        * platform/spi/cocoa/DispatchSPI.h: Added.
        * platform/spi/cocoa/IOPMLibSPI.h: Added.
        * platform/spi/cocoa/MachVMSPI.h: Added.
        * platform/spi/cocoa/NSFileManagerSPI.h: Added.
        * platform/spi/cocoa/NSGeometrySPI.h: Added.
        * platform/spi/cocoa/NSPointerFunctionsSPI.h: Added.
        * platform/spi/cocoa/dyldSPI.h: Added.
        * platform/spi/ios/AVPlayerControllerSPI.h: Added.
        * platform/spi/ios/AVPlayerViewControllerSPI.h: Added.
        * platform/spi/ios/AVValueTimingSPI.h: Added.
        * platform/spi/ios/AVVideoLayerSPI.h: Added.
        * platform/spi/ios/CTFontDescriptorSPI.h: Added.
        * platform/spi/ios/CTFontSPI.h: Added.
        * platform/spi/ios/CUICatalogSPI.h: Added.
        * platform/spi/ios/CUIStyleEffectConfigurationSPI.h: Added.
        * platform/spi/ios/MPAVRoutingControllerSPI.h: Added.
        * platform/spi/ios/MobileGestaltSPI.h: Added.
        * platform/spi/ios/QLPreviewConverterSPI.h: Added.
        * platform/spi/ios/QuickLookSPI.h: Added.
        * rendering/RenderThemeIOS.mm:

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

        DOM timer throttling for hidden plugins
        https://bugs.webkit.org/show_bug.cgi?id=136197

        Reviewed by Geoff Garen & Andreas Kling.

        For non-visible web pages we slow timers (since they can't be driving animations, etc).
        We should do the same for plugins.

        There are a few steps to this:
            - JSPluginElementFunctions notifies DOMTimer when script interacts with a plugin.
            - DOMTimerFireState keeps a record of events that occur while a timer is firing.
            - DOMTimer::fired detects timers that interact with invisible/inaudible plugins, and flags itself for throtting.
            - DOMTimer::intervalClampedToMinimum sets timer intervals appropriately.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObject):
            - notify DOMTimer when script interacts with a plugin.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isDetectable):
        * html/HTMLPlugInElement.h:
            - added isDetectable, to check for visible / audible plugins.
        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::DOMTimerFireState):
        (WebCore::DOMTimerFireState::~DOMTimerFireState):
            - track current DOMTimerFireState.
        (WebCore::DOMTimer::DOMTimer):
            - initialize m_throttleState.
        (WebCore::DOMTimer::scriptDidInteractWithPlugin):
            - if interaction with a plugin occurs while a timer is firing, record on the DOMTimerFireState.
        (WebCore::DOMTimer::fired):
            - set DOMTimerFireState, and update m_throttleState accordingly.
        (WebCore::DOMTimer::updateTimerIntervalIfNecessary):
            - remove redundant check of maxTimerNestingLevel (covered by intervalClampedToMinimum).
        (WebCore::DOMTimer::intervalClampedToMinimum):
            - Also take m_throttleState into account when throttling.
        * page/DOMTimer.h:
            - added scriptDidInteractWithPlugin, m_throttleState.
        * platform/audio/AudioHardwareListener.h:
            - enum -> enum class.
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::audioHardwareActivity):
            - expose audioHardwareActivity on PluginViewBase (previously available in subclass).

2014-09-16  Gavin Barraclough  <baraclough@apple.com>

        Exclude page visibility from PageThrottler's hysteresis
        https://bugs.webkit.org/show_bug.cgi?id=136866

        Reviewed by Geoff Garen.

        Including visibility in the hysteresis mechanism has the effect of prolonging the visually
        idle timeout, and causing the page hide event to be run at foreground priority. Neither of
        these are particularly desirable. Instead separate visibility from the rest of the page
        activities we track (and apply hysteresis to), and feed this directly into determination
        of the UserActivity state.

        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - when the PageThrottler is instantiated call updateUserActivity to set initial UserActivity.
        (WebCore::PageThrottler::incrementActivityCount):
            - simplified - when m_activityCount becomes non-zero, start m_hysteresis.
        (WebCore::PageThrottler::decrementActivityCount):
            - simplified - when m_activityCount becomes zero, stop m_hysteresis.
        (WebCore::PageThrottler::updateUserActivity):
            - end the UserActivity (allow AppNap) if visually idle and no page activity is taking place.
        (WebCore::PageThrottler::setViewState):
            - when the visually idle state changed call updateUserActivity to update the UserActivity.
        (WebCore::PageThrottler::started):
        (WebCore::PageThrottler::stopped):
            - when the hysteresis state changed call updateUserActivity to update the UserActivity.
        (WebCore::PageThrottler::updateHysteresis): Deleted.
            - removed: simplified the hysteresis trigger, we now incorporate visually idle state in updateUserActivity.
        * page/PageThrottler.h:
            - removed updateHysteresis, added updateUserActivity.
        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::state):
            - determine the curent state of the HysteresisActivity - started, waiting, or stopped.

2014-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix runtime critical warnings when writing to the clipboard after r173687
        https://bugs.webkit.org/show_bug.cgi?id=136891

        Reviewed by Philippe Normand.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::writeClipboardContents): Check passed
        callback is not null before trying to ref/unref it since
        g_closure_ref/unref are not null safe.

2014-09-17  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add a helper function for display system deduction
        https://bugs.webkit.org/show_bug.cgi?id=136849

        Reviewed by Martin Robinson.

        getDisplaySystemType() is a helper function that checks the type of the
        default GdkDisplay object and initializes a static variable to the
        corresponding value. It then returns the value of that variable.

        When building with the GTK+2 API (still the case with the GTK+2 plugin
        process) we default to X11.

        The function is declared and implemented in GtkUtilities files.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::widgetIsOnscreenToplevelWindow):
        (WebCore::getDisplaySystemType):
        * platform/gtk/GtkUtilities.h:

2014-09-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        filterRootById accidentally clears inAdjacentChain flag
        https://bugs.webkit.org/show_bug.cgi?id=136851

        Reviewed by Benjamin Poulain.

        Test: fast/selectors/filter-root-node-with-selector-contains-adjacents.html

        * dom/SelectorQuery.cpp:
        (WebCore::filterRootById):

2014-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix layering violations in PasteboardGtk
        https://bugs.webkit.org/show_bug.cgi?id=136802

        Reviewed by Darin Adler.

        Refactor the Pasteboard code moving the WebCore parts to the Editor.

        * PlatformGTK.cmake: Add new file to compilation.
        * editing/Editor.cpp:
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * editing/gtk/EditorGtk.cpp: Added.
        (WebCore::createFragmentFromPasteBoardData):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::getImageAndURLForElement):
        (WebCore::Editor::writeImageToPasteboard):
        (WebCore::Editor::writeSelectionToPasteboard):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::declareAndWriteDragImage):
        * platform/Pasteboard.h:
        * platform/gtk/DataObjectGtk.cpp: Remove range member, the caller
        should call setText() + setMarkup() intead.
        (WebCore::DataObjectGtk::setText):
        (WebCore::DataObjectGtk::setMarkup):
        (WebCore::DataObjectGtk::clearText):
        (WebCore::DataObjectGtk::clearMarkup):
        (WebCore::DataObjectGtk::clearAllExceptFilenames):
        * platform/gtk/DataObjectGtk.h:
        (WebCore::DataObjectGtk::hasText):
        (WebCore::DataObjectGtk::hasMarkup):
        (WebCore::DataObjectGtk::clearImage):
        (WebCore::DataObjectGtk::text):
        (WebCore::DataObjectGtk::markup):
        (WebCore::DataObjectGtk::setRange): Deleted.
        * platform/gtk/GtkDragAndDropHelper.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::PasteboardImage::PasteboardImage):
        (WebCore::PasteboardImage::~PasteboardImage):
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::writeSelection): Deleted.
        (WebCore::getURLForImageElement): Deleted.
        (WebCore::Pasteboard::writeImage): Deleted.
        (WebCore::Pasteboard::documentFragment): Deleted.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::displayFromFrame): Deleted.
        (WebCore::PasteboardHelper::getPrimarySelectionClipboard): Deleted.
        * platform/gtk/PasteboardHelper.h:

2014-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        DragData should not depend on Clipboard, DocumentFragment, and Document
        https://bugs.webkit.org/show_bug.cgi?id=21358

        Reviewed by Darin Adler.

        Refactor DragData to not depend on Frame, DocumentFragment,
        Document and Range. DragData::asFragment() has been moved to
        DragController and implemented in the platform specific file.
        DragData methods using Frame has been reworked in Mac to not use
        Frame, since all other ports were ignoreing the frame parameter.

        * page/DragController.cpp:
        (WebCore::DragController::documentFragmentFromDragData): Make it
        a static member to be able to use createFragmentFromDragData().
        (WebCore::DragController::performDragOperation): Update to
        DragData API changes.
        (WebCore::DragController::dispatchTextInputEventFor): Ditto.
        (WebCore::DragController::concludeEditDrag): Ditto.
        (WebCore::documentFragmentFromDragData): Deleted.
        * page/DragController.h:
        * page/efl/DragControllerEfl.cpp:
        (WebCore::DragController::createFragmentFromDragData): Move
        DragData::asFragment() implementation here.
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::createFragmentFromDragData): Ditto.
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::createFragmentFromDragData): Ditto.
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::createFragmentFromDragData): Ditto.
        * platform/DragData.h:
        * platform/efl/DragDataEfl.cpp:
        (WebCore::DragData::asPlainText): Remove Frame parameter.
        (WebCore::DragData::containsURL): Ditto.
        (WebCore::DragData::asURL): Ditto.
        (WebCore::DragData::asFragment): Deleted.
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::asPlainText): Remove Frame parameter.
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL): Ditto.
        (WebCore::DragData::asURL): Ditto.
        (WebCore::DragData::asFragment): Deleted.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asPlainText): Same implementation as the
        Editor.
        (WebCore::DragData::containsURL): Remove Frame parameter.
        (WebCore::DragData::asURL): Use URLByCanonicalizingURL() instead
        of using the Editor client.
        (WebCore::DragData::asFragment): Deleted.
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsURL): Remove Frame parameter.
        (WebCore::DragData::asURL): Ditto.
        (WebCore::DragData::asPlainText): Ditto.
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asFragment): Deleted.

2014-09-16  Chris Dumez  <cdumez@apple.com>

        Rename Node::childNode(index) to traverseToChildAt(index) for clarity
        https://bugs.webkit.org/show_bug.cgi?id=136825

        Reviewed by Benjamin Poulain.

        Rename Node::childNode(index) to traverseToChildAt(index) to make it
        clearer that the method is actually traversing the children and thus
        potentially expensive.

        This patch also avoids calling traverseToChildAt() in a couple of
        easily avoidable cases.

        No new tests, no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        Remove symbol for ContainerNode::childNode() as it was renamed. It does
        not seem we need to expose ContainerNode::traverseToChildAt().

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        Mechanical renaming.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::traverseToChildAt):
        (WebCore::ContainerNode::childNode): Deleted.
        * dom/ContainerNode.h:
        (WebCore::Node::traverseToChildAt):
        (WebCore::Node::childNode): Deleted.
        * dom/Node.h:
        - Rename Node / ContainerNode's childNode(index) to
          traverseToChildAt(index) to make it clear that it is actually
          traversing the children and thus potentially expensive.
        - Clean up the implementation of ContainerNode::traverseToChildAt()
          to avoid the use of an extra |i| variable.

        * dom/Position.cpp:
        (WebCore::Position::computeNodeBeforePosition):
        Avoid calling traverseToChildAt(-1). Relying on the unsigned argument
        wrapping and the method returning null in this case is a bit obscure
        and causes unnecessary traversal of all children.

        (WebCore::Position::computeNodeAfterPosition):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        Mechanical renaming and update variable names to stop using
        abbreviations as per coding style.

        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::checkNodeWOffset):
        (WebCore::Range::firstNode):
        (WebCore::Range::pastLastNode):
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::set):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::nextInPreOrderCrossingShadowBoundaries):
        (WebCore::TextIterator::node):
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        * editing/VisibleUnits.cpp:
        (WebCore::nextLinePosition):
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedStringFromRange):
        Mechanical renaming.

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchChildren):
        Iterate over children while incrementing the |i| variable to avoid
        calling traverseToChildAt(index) repeatedly and thus traversing the
        children from the beginning every time.

2014-09-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Reduce a bit of churn setting initial remote inspection state
        https://bugs.webkit.org/show_bug.cgi?id=136875

        Reviewed by Timothy Hatcher.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::finishCreation):
        We no longer need to toggle this state.

2014-09-16  Enrica Casucci  <enrica@apple.com>

        Should have an editing behavior specific for IOS.
        https://bugs.webkit.org/show_bug.cgi?id=136876

        Reviewed by Sam Weinig.

        This patch introduces a new editing behavior type to be able
        to perform editing tasks that are specific to iOS.
        All the existing EditingBehavior methods return the same boolean
        value for for Mac and iOS. A new one has been introduced to support
        a specific behavior in the DeleteSelectionCommand.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldConsiderSelectionAsDirectional):
        (WebCore::EditingBehavior::shouldCenterAlignWhenSelectionIsRevealed):
        (WebCore::EditingBehavior::shouldToggleStyleBasedOnStartOfSelection):
        (WebCore::EditingBehavior::shouldAlwaysGrowSelectionWhenExtendingToBoundary):
        (WebCore::EditingBehavior::shouldSelectOnContextualMenuClick):
        (WebCore::EditingBehavior::shouldExtendSelectionByWordOrLineAcrossCaret):
        (WebCore::EditingBehavior::shouldRebalanceWhiteSpacesInSecureField):
        * editing/EditingBehaviorTypes.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::positionForPlatform):
        * page/Settings.cpp:
        (WebCore::editingBehaviorTypeForPlatform):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setEditingBehavior):

2014-09-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r173670.
        https://bugs.webkit.org/show_bug.cgi?id=136871

        Creates layering violation (Requested by enrica on #webkit).

        Reverted changeset:

        "Move HTMLConverter from editing/cocoa to platform/cocoa."
        https://bugs.webkit.org/show_bug.cgi?id=136474
        http://trac.webkit.org/changeset/173670

2014-09-16  Eric Carlson  <eric.carlson@apple.com>

        [Mac] MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput doesn't work with rotated movies
        https://bugs.webkit.org/show_bug.cgi?id=136872

        Reviewed by Tim Horton.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithImageGenerator): Add logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput): Apply the video track
            preferred transform.

2014-09-16  Enrica Casucci  <enrica@apple.com>

        Move HTMLConverter from editing/cocoa to platform/cocoa.
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Benjamin Poulain.

        This is a platform specific class and it belongs to the platform folder.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa: Removed.
        * editing/cocoa/HTMLConverter.h: Removed.
        * editing/cocoa/HTMLConverter.mm: Removed.
        * platform/cocoa/HTMLConverter.h: Copied from editing/cocoa/HTMLConverter.h.
        * platform/cocoa/HTMLConverter.mm: Copied from editing/cocoa/HTMLConverter.mm.

2014-09-16  Enrica Casucci  <enrica@apple.com>

        Remove PLATFORM(IOS) from WebCore/editing (Part 3).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Benjamin Poulain.

        This is the updated version of the patch that was landed in r173340.
        This patch removes the use of PLATFORM(IOS) from TextAffinity.h
        and removes the assumption that EAffinity values match NSSelectionAffinity
        values. It also removes the includes in TextAffinity.h, creating the need to
        include explicitly the files when necessary.

        * editing/TextAffinity.h:
        (kit): Deleted.
        (core): Deleted.
        * editing/cocoa/HTMLConverter.mm:
        * page/mac/WebCoreFrameView.h:

2014-09-16  Beth Dakin  <bdakin@apple.com>

        overflow:scroll should not leave space for a scroll corner with overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=136861

        Reviewed by Sam Weinig.

        overflow:scroll should behave like overflow:auto when the scrollbar will render as 
        an overlay scrollbar.

        Re-name hasAutoVerticalScrollbar()/Horizontal to 
        hasVerticalScrollbarWithAutoBehavior()/Horizontal, and return true for 
        overflow:scroll scrollbars that will render as overlay scrollbars.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasVerticalScrollbarWithAutoBehavior):
        (WebCore::RenderBox::hasHorizontalScrollbarWithAutoBehavior):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::scrollsOverflowX):
        (WebCore::RenderBox::scrollsOverflowY):
        (WebCore::RenderBox::hasAutoVerticalScrollbar): Deleted.
        (WebCore::RenderBox::hasAutoHorizontalScrollbar): Deleted.

        Re-name overflowRequiresScrollbar() to styleRequiresScrollbar() and also re-name 
        overflowDefinesAutomaticScrollbar() to styleDefinesAutomaticScrollbar(), and make         
        these functions take into account the fact that overflow:scroll should act like 
        overflow:auto when the scrollbar will render as an overlay scrollbar.
        * rendering/RenderLayer.cpp:
        (WebCore::styleRequiresScrollbar):
        (WebCore::styleDefinesAutomaticScrollbar):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::calculateClipRects):

2014-09-16  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Sometimes incomplete or empty content can be loaded from cache.
        https://bugs.webkit.org/show_bug.cgi?id=136855

        Reviewed by Alex Christensen.

        Sometimes, when two requests with the same url are started at the same time,
        there is a possibility of loading incomplete or empty content from the cache.
        This happens because the method CurlCacheEntry::isLoading() is returning the wrong status
        in the time period between the headers are received, and the content data is received.
        This can be fixed by using a flag for the load status, instead of checking whether
        the content file is open. 

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::CurlCacheEntry): Initialize loading flag.
        (WebCore::CurlCacheEntry::isLoading): Return loading flag.
        (WebCore::CurlCacheEntry::didFail): Call new method to set loading flag.
        (WebCore::CurlCacheEntry::didFinishLoading): Ditto.
        (WebCore::CurlCacheEntry::setIsLoading): Added new method to set loading flag.
        * platform/network/curl/CurlCacheEntry.h: Added loading flag and new method to set it.
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::didReceiveResponse): Call new method to set loading flag.

2014-09-16  Chris Dumez  <cdumez@apple.com>

        Rename Node::nodeIndex() to computeNodeIndex() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=136826

        Reviewed by Benjamin Poulain.

        Rename Node::nodeIndex() to computeNodeIndex() to make it clear that
        index is being computed and that calling this method is potentially
        expensive.

        No new tests, no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        Rename exported symbol for Node::nodeIndex() as well.

        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * dom/Node.cpp:
        (WebCore::Node::computeNodeIndex):
        (WebCore::Node::nodeIndex): Deleted.
        * dom/Node.h:
        * dom/NodeWithIndex.h:
        (WebCore::NodeWithIndex::index):
        Clean up implementation to reduce the scope of the Node variable and
        to follow coding style (variable naming, spacing, star placement).

        * dom/Position.cpp:
        (WebCore::Position::computeOffsetInContainerNode):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        * dom/Position.h:
        (WebCore::positionInParentBeforeNode):
        (WebCore::positionInParentAfterNode):
        * dom/Range.cpp:
        (WebCore::Range::compareNode):
        (WebCore::Range::intersectsNode):
        (WebCore::Range::processContents):
        (WebCore::Range::insertNode):
        (WebCore::Range::setStartAfter):
        (WebCore::Range::setEndBefore):
        (WebCore::Range::setEndAfter):
        (WebCore::Range::setStartBefore):
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::ensureOffsetIsValid):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/Editor.cpp:
        (WebCore::Editor::avoidIntersectionWithDeleteButtonController):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::range):
        (WebCore::SimplifiedBackwardsTextIterator::handleReplacedElement):
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode):
        * editing/htmlediting.cpp:
        (WebCore::updatePositionForNodeRemoval):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::setContainerAndOffsetForRange):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::containsNode):
        (WebCore::DOMSelection::shadowAdjustedOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::nodePosition):

2014-09-16  Jer Noble  <jer.noble@apple.com>

        Videos with controls enabled never receive 'dragstart' events.
        https://bugs.webkit.org/show_bug.cgi?id=136837

        Reviewed by Eric Carlson.

        Fixes a crash regression introduced by r173631. Node::contains() has an interesting property of returning false
        if `this` is NULL. Rather than depending on this behavior, explicitly NULL-check state.source and bail early.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2014-09-16  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r173659.

        After r173659 convertToIntLength() is used only inside ENABLE(DASHBOARD_SUPPORT), so it
        became unused function and caused build failure if ENABLE(DASHBOARD_SUPPORT) is false.

        Source/WebCore/css/StyleResolver.cpp:1471:15: error: 'WebCore::Length WebCore::convertToIntLength(const WebCore::CSSPrimitiveValue*, const WebCore::CSSToLengthConversionData&)'
        defined but not used [-Werror=unused-function] cc1plus: all warnings being treated as errors

        * css/StyleResolver.cpp: Missing ENABLE(DASHBOARD_SUPPORT) guard added.

2014-09-14  Darin Adler  <darin@apple.com>

        Scroll snap properties don't handle inherit and initial propertly.
        https://bugs.webkit.org/show_bug.cgi?id=136643

        Reviewed by Beth Dakin.

        Restructured scroll snap code both to handle inherit and initial, and to reduce the
        total code size a bit, fixing a few minor bugs along the way. Updated the regression
        tests to cover the new parts.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::addValuesForNamedGridLinesAtIndex): Use a modern for loop.
        (WebCore::scrollSnapDestination): Changed to take a LengthSize. Also streamlined.
        (WebCore::scrollSnapPoints): Changed to to take a ScrollSnapPoints. Also streamlined and
        added code to handle the "uses elements" case; serialize that as an identifier, not the
        string "elements", fixing a minor bug.
        (WebCore::scrollSnapCoordinates): Changed to take a Vector<LengthSize>. Also streamlined
        and added code to handle the empty vector case; serialize that as an identifier, not the
        string "none", fixing a minor bug.
        (WebCore::ComputedStyleExtractor::getFontSizeCSSValuePreferringKeyword): Use nullptr.
        (WebCore::counterToCSSValue): Use nullptr.
        (WebCore::ComputedStyleExtractor::styledNode): Use nullptr.
        (WebCore::ComputedStyleExtractor::propertyValue): Use nullptr. Moved CSS_SCROLL_SNAP
        to a more appropriate section of the switch statement. Made it just call through to
        the functions above in a more straightforward way.
        (WebCore::CSSComputedStyleDeclaration::getPropertyValue): Reversed logic to use early
        return and to call emptyString.
        (WebCore::CSSComputedStyleDeclaration::item): Use emptyString.
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForSidesShorthand): Use nullptr.
        (WebCore::CSSComputedStyleDeclaration::parentRule): Use nullptr.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Use nullptr.
        (WebCore::CSSComputedStyleDeclaration::getPropertyPriority): Use emptyString.
        (WebCore::CSSComputedStyleDeclaration::getPropertyShorthand): Use emptyString.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyMarqueeIncrement::applyValue): Use the switch statement for the
        invalid value as well as for the valid values, rather than a separate if statement.
        Call convertToLength directly rather than through a StyleResolver static member function.

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyValue): Fixed a formatting mistake.

        * css/StyleResolver.cpp:
        (WebCore::convertToIntLength): Made this function local to this file instead of a
        static member function.
        (WebCore::convertToFloatLength): Ditto.
        (WebCore::StyleResolver::parseSnapCoordinate): Added. Used to keep snap point parsing
        code small.
        (WebCore::StyleResolver::parseSnapCoordinatePair): Ditto.
        (WebCore::StyleResolver::parseSnapPoints): Added. Parses an entire snap points property.
        (WebCore::StyleResolver::applyProperty): Removed various bits of redundant code that
        were not using the primitiveValue value already in a local variable. Added the
        HANDLE_INHERIT_AND_INITIAL to all the scroll snap properties and updated since the
        RenderStyle structure now more closely matches the CSS properties.

        * css/StyleResolver.h: Updated for above changes, and removed a redundant "private:".

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::appendChildSnapOffsets): Use auto& instead of SnapCoordinate since that type
        is now gone. Updated since coordinates are now LengthSize.
        (WebCore::updateFromStyle): Changed to take a reference instead of a pointer and
        also to fetch the data from RenderStyle in a new way that more closely matches the
        CSS properties.
        (WebCore::updateSnapOffsetsForScrollableArea): Ditto. Also moved some memory allocation
        inside if statements so we don't wastefully allocate and destroy.

        * rendering/style/RenderStyle.cpp: Added an include of StyleScrollSnapPoints.h now
        that the header doesn't include them. Moved the conditional includes out of the main
        include paragraph (even though I don't think conditional includes are usually a good
        idea).
        (WebCore::RenderStyle::initialScrollSnapPointsX): Added.
        (WebCore::RenderStyle::initialScrollSnapPointsY): Added.
        (WebCore::RenderStyle::initialScrollSnapDestination): Added.
        (WebCore::RenderStyle::initialScrollSnapCoordinates): Added.
        (WebCore::RenderStyle::scrollSnapPointsX): Added.
        (WebCore::RenderStyle::scrollSnapPointsY): Added.
        (WebCore::RenderStyle::scrollSnapDestination): Added.
        (WebCore::RenderStyle::scrollSnapCoordinates): Added.
        (WebCore::RenderStyle::setScrollSnapPointsX): Added.
        (WebCore::RenderStyle::setScrollSnapPointsY): Added.
        (WebCore::RenderStyle::setScrollSnapDestination): Added.
        (WebCore::RenderStyle::setScrollSnapCoordinates): Added.

        * rendering/style/RenderStyle.h: Replaced the include of StyleScrollSnapPoints.h with
        a forward declaration of ScrollSnapPoints. Removed getters and setters for the old
        style properties and replaced them with new ones that match the CSS properties more
        closely. Tweaked formatting a bit. Added initial value functions for the the scroll snap
        properties.

        * rendering/style/StyleRareNonInheritedData.cpp: Added include of StyleScrollSnapPoints.h
        now that RenderStyle.h doesn't include it.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Updated since
        m_scrollSnapType is now unsigned instead of ScrollSnapType.

        * rendering/style/StyleRareNonInheritedData.h: Fixed type of m_scrollSnapType to be
        unsigned instead of ScrollSnapType. This should have been causing problems on Windows,
        but I think we got lucky and had no detectable problems.

        * rendering/style/StyleScrollSnapPoints.cpp:
        (WebCore::ScrollSnapPoints::ScrollSnapPoints): Added.
        (WebCore::operator==): Added overloads for both ScrollSnapPoints and also for
        StyleScrollSnapPoints; using a free function for both since both have public data.
        (WebCore::defaultScrollSnapDestination): Added, replaces a static member function.
        (WebCore::StyleScrollSnapPoints::StyleScrollSnapPoints): Updated both the default
        constructor and the copy constructor for the new design.

        * rendering/style/StyleScrollSnapPoints.h: Added a ScrollSnapPoints struct for the
        type of the snap-points-x and snap-points-y CSS properties. Changed the data members
        of StyleScrollSnapPoints to match the various CSS properties rather than breaking
        out all the data into separate data members.
        (WebCore::StyleScrollSnapPoints::defaultRepeatOffset): Deleted. Replaced by the
        default constructor for ScrollSnapPoints.
        (WebCore::StyleScrollSnapPoints::defaultDestinationOffset): Deleted. Replaced by
        a function inside the .cpp file.

2014-09-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [GStreamer] http/tests/media/video-auth.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=126619

        Reviewed by Philippe Normand.

        Test: http/tests/media/video-auth-cors.html

        Use stored credentials when retrieving videos following image loading behavior
        (i.e. stored credentials are always used except when in cors anonymous mode),
        except that requesting credentials from user remains disabled for cross-origin requests.

        Patch is covered by http/tests/media/video-auth.html.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::CachedResourceStreamingClient): Enable using stored credentials except when using cors anonymous mode.

2014-09-16  Jinho Bang  <jinho.bang@samsung.com>

        Add version of drawFocusIfNeeded that take a Path2D parameter.
        https://bugs.webkit.org/show_bug.cgi?id=136846

        Reviewed by Dirk Schulze.

        Tests: fast/canvas/draw-focus-if-needed-with-path.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeeded):
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2014-09-15  Iago Toral  <itoral@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WaylandDisplay
        https://bugs.webkit.org/show_bug.cgi?id=136216

        Reviewed by Martin Robinson.

        Add the WaylandDisplay class. This class is used in the LayerTreeHostGtk,
        in the WebProcess, and controls the connection to the nested Wayland
        compositor in the UIProcess. Only one instance of the class is used in the
        WebProcess, accessible via the static WaylandDisplay::instance() method.

        The WaylandDisplay constructor performs the EGL initialization while also
        querying the Wayland register, resulting in initializing client-side objects
        that can interact with the wl_compositor and wl_webkitgtk interfaces
        implemented in the nested Wayland compositor. The single class instance is
        only deemed properly initialized if it picked up the Wayland interface objects
        and has properly acquired the EGL display and config.

        WaylandDisplay::createSurface() is called by the LayerTreeHostGtk during
        its own initialization. The method creates a new wl_surface object via the
        wl_compositor interface and a new wl_egl_window object that's based on that
        surface. For the wl_egl_window object, we fall back to a width or height of 1
        in case the passed-in value for either is 0. This avoids problems in Mesa
        where widths or heights of 0 are not supported.

        We associate the created surface with the passed-in widget ID, as provided
        by LayerTreeHostGtk, via the wl_webkitgtk interface. This enables proper
        mapping of Wayland surfaces and the GtkWidgets in the UIProcess and makes
        it possible for the nested Wayland compositor to correctly determine which
        GtkWidget has to be redrawn after some surface has been committed.

        WaylandDisplay::createSharingGLContext() creates a new GLContextEGL object
        that's to be used as a sharing context. The method creates a new surface
        via the wl_compositor interface and uses it to create a dummy native EGL
        window that's 1x1px in size. The GLContextEGL object is then created
        through the static GLContextEGL::createWindowContext() method.

        * PlatformGTK.cmake:
        * platform/graphics/wayland/WaylandDisplay.cpp: Added.
        (WebCore::WaylandDisplay::globalCallback):
        (WebCore::WaylandDisplay::globalRemoveCallback):
        (WebCore::WaylandDisplay::instance):
        (WebCore::WaylandDisplay::WaylandDisplay):
        (WebCore::WaylandDisplay::createSurface):
        (WebCore::WaylandDisplay::createSharingGLContext):
        * platform/graphics/wayland/WaylandDisplay.h: Added.
        (WebCore::WaylandDisplay::nativeDisplay):
        (WebCore::WaylandDisplay::eglDisplay):
        * platform/graphics/wayland/WaylandSurface.cpp:
        (WebCore::WaylandSurface::~WaylandSurface): Assert that the WaylandDisplay
        instance is present before going on to destroy the surface resources.

2014-09-15  Chris Dumez  <cdumez@apple.com>

        Rename LiveNodeLists / HTMLCollections's nodeMatches() to elementMatches()
        https://bugs.webkit.org/show_bug.cgi?id=136844

        Reviewed by Sam Weinig.

        Rename LiveNodeLists / HTMLCollections's nodeMatches() to elementMatches()
        for clarity as the argument is an Element.

        No new tests, no behavior change.

        * dom/ClassNodeList.h:
        (WebCore::ClassNodeList::elementMatches):
        (WebCore::ClassNodeList::nodeMatches): Deleted.
        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesWindowNamedItem):
        (WebCore::keyMatchesDocumentNamedItem):
        * dom/Element.cpp:
        (WebCore::Element::updateNameForDocument):
        (WebCore::Element::updateIdForDocument):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/LiveNodeList.h:
        (WebCore::CachedLiveNodeList<NodeListType>::collectionBegin):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionLast):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseForward):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseBackward):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::elementMatches):
        (WebCore::NameNodeList::nodeMatches): Deleted.
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::elementMatches):
        (WebCore::HTMLTagNodeList::elementMatches):
        (WebCore::TagNodeList::nodeMatches): Deleted.
        (WebCore::HTMLTagNodeList::nodeMatches): Deleted.
        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement):
        * html/HTMLNameCollection.cpp:
        (WebCore::WindowNameCollection::elementMatchesIfNameAttributeMatch):
        (WebCore::WindowNameCollection::elementMatches):
        (WebCore::DocumentNameCollection::elementMatchesIfIdAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatchesIfNameAttributeMatch):
        (WebCore::DocumentNameCollection::elementMatches):
        (WebCore::WindowNameCollection::nodeMatchesIfNameAttributeMatch): Deleted.
        (WebCore::WindowNameCollection::nodeMatches): Deleted.
        (WebCore::DocumentNameCollection::nodeMatchesIfIdAttributeMatch): Deleted.
        (WebCore::DocumentNameCollection::nodeMatchesIfNameAttributeMatch): Deleted.
        (WebCore::DocumentNameCollection::nodeMatches): Deleted.
        * html/HTMLNameCollection.h:
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::elementMatches):
        (WebCore::LabelsNodeList::nodeMatches): Deleted.
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::elementMatches):
        (WebCore::RadioNodeList::nodeMatches): Deleted.
        * html/RadioNodeList.h:

2014-09-15  Chris Dumez  <cdumez@apple.com>

        Use an AtomicString as key for caching ClassNodeList objects
        https://bugs.webkit.org/show_bug.cgi?id=136830

        Reviewed by Benjamin Poulain.

        Use an AtomicString as key for caching ClassNodeList objects instead of
        a String. ClassNodeList is the only type using a String instead of an
        AtomicString as key in the cache HashTable. This brings some
        complexity.

        I believe this was done to avoid unnecessarily atomizing the String,
        for performance reasons. However, at the moment, the String gets
        atomized anyway when constructing the ClassNodeList object. This is
        because the ClassNodeList::m_classNames member is of SpaceSplitString
        type and the SpaceSplitString constructor takes an AtomicString in
        argument.

        Using an AtomicString to cache ClassNodeLists simplifies the code quite
        a bit and decreases the size of NodeListsNodeData as well.

        Test: fast/dom/getElementsByClassName/conflict-tag-name.html

        * WebCore.order:
        Remove symbol corresponding to addCacheWithName() as it was removed.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::~ClassNodeList):
        Update the constructor to take an AtomicString in argument instead of
        a String, for clarity. The String gets atomized when initializing
        m_classNames anyway.

        (WebCore::ClassNodeList::ClassNodeList):
        Call removeCacheWithAtomicName() instead of removeCacheWithName() now
        that m_originalClassNames is an AtomicString.

        * dom/ClassNodeList.h:
        Use AtomicString instead of String type for classNames, in both the
        constructor argument and the m_originalClassNames data member.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByClassName):
        Call addCacheWithAtomicName() instead of addCacheWithName() now that
        addCacheWithName() has been removed.

        * dom/Node.cpp:
        (WebCore::NodeListsNodeData::invalidateCaches):
        Stop invalidating m_nameCaches as this HashMap no longer exists.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListCacheMapEntryHash::hash):
        (WebCore::NodeListsNodeData::NodeListCacheMapEntryHash::equal):
        (WebCore::NodeListsNodeData::isEmpty):
        (WebCore::NodeListsNodeData::adoptDocument):
        (WebCore::NodeListsNodeData::namedNodeListKey):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList):
        (WebCore::NodeListsNodeData::addCacheWithName): Deleted.
        (WebCore::NodeListsNodeData::removeCacheWithName): Deleted.
        - Drop addCacheWithName() / removeCacheWithName() now that no NodeList
          uses a String as HashMap key.
        - Drop m_nameCaches now that ClassNodeLists are cached in
          m_atomicNameCaches instead.
        - Remove StringType template parameter and hardcode AtomicString
          instead.

2014-09-15  Chris Dumez  <cdumez@apple.com>

        Return early in SelectorChecker::checkOne() if selector.isAttributeSelector() is true
        https://bugs.webkit.org/show_bug.cgi?id=136838

        Reviewed by Benjamin Poulain.

        Return early in SelectorChecker::checkOne() if selector.isAttributeSelector()
        is true and the selector matched. Previously, we were only returning early if
        the selector did not match and we were falling through if it did. This means
        that we ended up doing the 2 if() checks below in the method unnecessarily:
        - selector.m_match == CSSSelector::PseudoClass
        - selector.m_match == CSSSelector::PseudoElement

        No new tests, no behavior change.

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

2014-09-15  Chris Dumez  <cdumez@apple.com>

        Un-inline the Node constructor
        https://bugs.webkit.org/show_bug.cgi?id=136842

        Reviewed by Benjamin Poulain.

        Un-inline the Node constructor as it does not seem to impact
        performance, based on my testing:
        http://dromaeo.com/?id=226992,226998

        This reduces the stripped binary size by ~4Kb.

        No new tests, no behavior change.

        * dom/Document.h:
        (WebCore::Node::Node): Deleted.
        * dom/Node.cpp:
        (WebCore::Node::Node):

2014-09-15  Shivakumar JM  <shiva.jm@samsung.com>

        Web Core: Websocket state should be set to closed in didReceiveMessage call back.
        https://bugs.webkit.org/show_bug.cgi?id=136219

        Reviewed by Alexey Proskuryakov.

        Set the Websocket state to closed in didReceiveMessage call back.

        Test: http/tests/websocket/tests/hybi/error-event-ready-state.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveMessageError):

2014-09-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Naming clean-up.

        Rubber-stamped by Andy Estes.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::requestAutocomplete):
        (WebCore::HTMLFormElement::finishRequestAutocomplete):
        Remove superfluous "AutocompleteResult".

        * html/HTMLFormElement.h:
        Ditto.

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

        Crash when logging in to optionshouse.com
        https://bugs.webkit.org/show_bug.cgi?id=136834

        Reviewed by Anders Carlsson.

        No test, because I couldn't make one. I don't have a way to reproduce first-hand.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):

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

        Unreviewed build fix for 32-bit builds.

        Make casts from unsigned long long -> size_t explicit, rather than implicit. Also
        make CARingBuffer be protected by USING_MEDIA_TOOLBOX so ports without that flag
        won't try to compile unused code.

        * platform/audio/mac/CARingBuffer.cpp:
        (WebCore::CARingBuffer::fetch):
        * platform/audio/mac/CARingBuffer.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::provideInput):

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

        Unreviewed logic fix from r173631. Logic for includeShadowDOM was reversed.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

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

        Videos with controls enabled never receive 'dragstart' events.
        https://bugs.webkit.org/show_bug.cgi?id=136837

        Reviewed by Simon Fraser.

        When initiating a drag, the DragController checks whether the hit-tested element at a
        drag location is a child of the drag source, and bails if early if that is not the case.
        For a <video> element with controls, the hit-tested element is an element within the
        <video> element's Shadow DOM. Because the DragController uses a method which does not
        take Shadow DOM into account when determining a child-parent relationship, this test fails
        and all drag operations fail as well.

        For <video> elements only, when testing whether the drag source is an ancestor of the
        hit-tested element, use containsIncludingShadowDOM() instead of contains(). To ensure that
        the controls are still usable when a drag listener is active on a <video> element, mark
        the controls as a draggable element, but simply call preventDefault() in the controls'
        'dragstart' handler, ensuring the timeline and volume controls are themselves still draggable.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handlePanelDragStart):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2014-09-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Add an unimplemented case to handle CSSPropertyWebkitInitialLetter so we don't get an assertion failure.

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):

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

        [Mac] Support audioSourceProvider() in MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=135042

        Reviewed by Eric Carlson.

        Add support for AudioSourceProvider in MediaPlayerPrivateAVFoundationObjC, thereby
        supporting MediaElementAudioSourceNode.

        Import the CARingBuffer from CoreAudio sample code, making the necessary modifications
        for WebKit style and coding conventions. The threading assumptions for this class are
        that there will be a single writer thread and a single reader thread.

        * platform/audio/mac/CARingBuffer.cpp: Added.
        (WebCore::CARingBuffer::create): Create a unique_ptr.
        (WebCore::CARingBuffer::CARingBuffer): Simple constructor.
        (WebCore::CARingBuffer::~CARingBuffer): Simple destructor.
        (WebCore::CARingBuffer::allocate): Initialize the buffers and time bounds structures.
        (WebCore::CARingBuffer::deallocate): Destroy same.
        (WebCore::ZeroRange): Static utility method.
        (WebCore::StoreABL): Ditto.
        (WebCore::FetchABL): Ditto.
        (WebCore::ZeroABL): Ditto.
        (WebCore::CARingBuffer::store): Store the passed in buffer in the ring buffer, wrapping
            if necessary.
        (WebCore::CARingBuffer::setTimeBounds): Set the new time bounds by incrementing the
            bounds index locally, filling in the new values, then atomically incrementing the
            reader-visible index.
        (WebCore::CARingBuffer::getTimeBounds): Get the new time bounds by masking the time
            bounds index, and using it as an offset to the time bounds array. Protect against
            CPU starvation on the reading thread by checking the index against the stored
            index in the array entry. This check will fail if the writing thread has wrapped
            more than the size of the array.
        (WebCore::CARingBuffer::clipTimeBounds): Clamp the passed values to the available bounds.
        (WebCore::CARingBuffer::startFrame): Simple accessor.
        (WebCore::CARingBuffer::endFrame): Ditto.
        (WebCore::CARingBuffer::fetch): Read an audio buffer list from the ring buffer, possbily
            wrapping around to the start of the ring buffer.
        * platform/audio/mac/CARingBuffer.h: Added.
        (WebCore::CARingBuffer::numberOfChannels): Simple accessor.
        (WebCore::CARingBuffer::frameOffset): Ditto.
        (WebCore::CARingBuffer::TimeBounds::TimeBounds): Struct holding the start and end frame values.

        Add an implementation of AudioSourceProvider, using AVAudioMix and MTAudioProcessingTap
        to tap an AVPlayerItem's audio output and feed it to a MediaElementAudioSourceNode.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h: Added.
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm: Added.
        (WebCore::AudioSourceProviderAVFObjC::create): Simple factory.
        (WebCore::AudioSourceProviderAVFObjC::AudioSourceProviderAVFObjC): Simple constructor.
        (WebCore::AudioSourceProviderAVFObjC::~AudioSourceProviderAVFObjC): Simple destructor.
        (WebCore::AudioSourceProviderAVFObjC::provideInput): Push audio into the ring buffer.
        (WebCore::AudioSourceProviderAVFObjC::setClient): Call destroyMix()/createMix() as appropriate.
        (WebCore::AudioSourceProviderAVFObjC::setPlayerItem): Ditto.
        (WebCore::AudioSourceProviderAVFObjC::destroyMix): Detach and destroy the AVAudioMix and tap.
        (WebCore::AudioSourceProviderAVFObjC::createMix): Set up the AVAudioMix and tap and attach to
            the AVPlayerItem.
        (WebCore::AudioSourceProviderAVFObjC::initCallback): Pass to class method.
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback): Ditto.
        (WebCore::AudioSourceProviderAVFObjC::prepareCallback): Ditto.
        (WebCore::AudioSourceProviderAVFObjC::unprepareCallback): Ditto.
        (WebCore::AudioSourceProviderAVFObjC::processCallback): Ditto.
        (WebCore::AudioSourceProviderAVFObjC::init): Set up the storage pointer for the tap.
        (WebCore::AudioSourceProviderAVFObjC::finalize): No-op.
        (WebCore::operator==): Compare two AudioStreamBasicDescription objects.
        (WebCore::operator!=): Ditto.
        (WebCore::AudioSourceProviderAVFObjC::prepare): Create an AudioCoverter object if necessary,
            create the ring buffer, and notify the client of format changes.
        (WebCore::AudioSourceProviderAVFObjC::unprepare): Destroy same.
        (WebCore::AudioSourceProviderAVFObjC::process): Copy samples out of the ring buffer,
            format converting them if necessary. Mute original audio.

        Create the AudioSourceProviderAVFObjC object and notify it when the current AVPlayerItem changes.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::audioSourceProvider):

        Enable SOFT_LINK_MAY_FAIL on the Mac platform.

        * platform/mac/SoftLinking.h:

        Add new files to the project.

        * WebCore.xcodeproj/project.pbxproj:

2014-09-15  Chris Dumez  <cdumez@apple.com>

        Avoid redundant isElementNode() checks in Traversal<HTML*Element> / Traversal<SVG*Element>
        https://bugs.webkit.org/show_bug.cgi?id=136719

        Reviewed by Darin Adler.

        Avoid redundant isElementNode() checks in Traversal<HTML*Element> /
        Traversal<SVG*Element>.  We used to iterate through Elements, and then
        call isElementOfType<HTML*Element>()  on each Element. This made sense
        because hasTagName() used to be defined on Element. However, after
        http://trac.webkit.org/changeset/165699, hasTagName() is now defined on
        Node for HTMLQualifiedName / SVGQualifiedName arguments.

        Node::hasTagName(HTMLQualifiedName) basically does the following check
        "isHTMLElement() &&  toHTMLElement(*this).hasTagName(tagName)". As a
        consequence, doing an isElementNode() check is now redundant as
        isHTMLElement() is defined on Node.

        This patch adds a template parameter to isElementOfType() so that it can
        take any type in argument (particulaly Node, Element, HTMLElement,
        SVGElement, MathMLElement), not just an Element. I had to add an
        ElementTypeCastTraits struct to support partial specialization as C++
        does not support partial specialization of template functions.
        This patch also updates Traversal<ElementType> so that the methods use
        NodeTraversal internally instead of Traversal<ElementType>. As a result,
        we now iterate over Nodes (not Elements) and call the new
        isElementOfType<ElementType>(Node) helpers (which are efficient after
        r165699).

        Before the patch, the code ended up doing the following checks for
        Traversal<HTML*element>:
        node.isElementNode() && toElement(node).isHTMLElement()
            && toHTMLElement(node).hasTagName(HTMLNames::fooTag)

        After the patch, the code only does:
        node.isHTMLElement()
            && toHTMLElement(node).hasTagName(HTMLNames::fooTag)

        No new tests, no behavior change.

        * dom/Element.h:
        (WebCore::Element>):
        (WebCore::isElementOfType):
        Add template parameter to isElementOfType() function so that it can
        handle any argument type, not just Elements. Also introduce an
        ElementTypeCastTraits struct that is called by isElementOfType()
        function so that we can so partial template specialization.

        * dom/ElementTraversal.h:
        (WebCore::Traversal<ElementType>::firstWithinTemplate):
        (WebCore::Traversal<ElementType>::lastWithinTemplate):
        (WebCore::Traversal<ElementType>::nextTemplate):
        (WebCore::Traversal<ElementType>::previousTemplate):
        Use NodeTraversal API internally instead of Traversal<Element> to avoid
        redundant isElementNode() checks.

        (WebCore::Traversal<Element>::lastWithinTemplate): Deleted.
        The code is now identical to the generic version.

        (WebCore::Traversal<Element>::previousTemplate): Deleted.
        The code is now identical to the generic version.

        * dom/make_names.pl:
        (printTypeHelpers):
        - Generate template specializations for ElementTypeCastTraits struct
          instead of isElementOfType(). This avoids having to provide overloads
          for specific argument types (e.g. Node, Element, HTMLElement, ...).
        - Share more code between HTML code path and the other path (for SVG,
          MTHML).

        * html/HTMLElement.h:
        (WebCore::HTMLElement>):
        Provide HTMLElement template specialization for ElementTypeCastTraits
        struct instead of isElementOfType().

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement>):
        Provide HTMLFormControlElement template specialization for
        ElementTypeCastTraits struct instead of isElementOfType().

        * html/HTMLFrameElementBase.h:
        (WebCore::isHTMLFrameElementBase):
        - Remove helper taking an Element in argument as it does not bring any
          benefit. Instead, update the overload taking a Node in argument to
          remove the unnecessary isElementNode() check as isHTMLFrameElement(Node)
          is now efficient.
        - Add an overload taking an HTMLElement in argument so that we can bypass
          the isHTMLElement() check when we know the input is an HTMLElement.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement>):
        Provide HTMLMediaElement template specialization for ElementTypeCastTraits
        struct instead of isElementOfType().

        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement>):
        Provide HTMLPlugInImageElement template specialization for
        ElementTypeCastTraits struct instead of isElementOfType().

        * html/LabelableElement.h:
        (WebCore::LabelableElement>):
        Provide LabelableElement template specialization for ElementTypeCastTraits
        struct instead of isElementOfType().

        * mathml/MathMLElement.h:
        (WebCore::MathMLElement>):
        Provide MathMLElement template specialization for ElementTypeCastTraits
        struct for consistency with HTMLElement / SVGElement.

        * svg/SVGElement.h:
        (WebCore::SVGElement>):
        - Provide SVGElement template specialization for ElementTypeCastTraits
          struct instead of isElementOfType().
        - include SVGElementTypeHelpers.h at the end of the file (similarly to
          what is already done in HTMLElement.h because
          isElementOfType(const SVGElement&) needs to be defiend because the
          include.

        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes>):
        Provide SVGFilterPrimitiveStandardAttributes template specialization for
        ElementTypeCastTraits struct instead of isElementOfType().

        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement>):
        Provide SVGSMILElement template specialization for ElementTypeCastTraits
        struct instead of isElementOfType().


2014-08-07  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Sort items by span when resolving content-based track sizing functions
        https://bugs.webkit.org/show_bug.cgi?id=135701

        Reviewed by Darin Adler.

        Section 10.4 of the specs mentions that we should first treat non
        spanning items and then incrementally proceed with items with
        greater spans when resolving the track breaths in the Track Sizing
        Algorithm.

        As a nice side effect we're removing the multiple processing of
        spanning grid items caused by GridIterator (it returns the same
        item as many times as the number of cells it spans). This adds a
        ~4% performance penalty in auto-grid-lots-of-data.html mainly due
        to the use of a hash to remove duplicates.

        Test: fast/css-grid-layout/grid-item-order-in-content-sized-columns-resolution.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridItemSpan):
        (WebCore::gridItemWithSpanSorter):
        (WebCore::uniquePointerInPair):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        * rendering/RenderGrid.h:

2014-09-15  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][CMake] Build WebCore with Wayland-specific include directories, libraries
        https://bugs.webkit.org/show_bug.cgi?id=136815

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Add the platform/graphics/wayland/ directory to the list of
        WebCore's include directories. Add include directories of the Wayland dependency
        to the list of WebCore's include directories. Same for the Wayland libraries.

2014-09-15  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Make it easier to enable/disable GStreamer.
        https://bugs.webkit.org/show_bug.cgi?id=135766

        Reviewed by Brent Fulgham.

        Make it possible to enable/disable GStreamer by editing the new user macro ENABLE_GSTREAMER_WINCAIRO.

        * WebCore.vcxproj/WebCoreDebugWinCairo.props: Import GStreamer property file.
        * WebCore.vcxproj/WebCoreReleaseWinCairo.props: Ditto.

2014-09-12  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Crash at CSSParser::parseGridTemplateRowsAndAreas
        https://bugs.webkit.org/show_bug.cgi?id=136778

        Reviewed by Darin Adler.

        An empty list of grid line names (represented by "()") does not
        add anything to the list of parsed values. That's why trying to
        concatenate an adjacent list of grid line names was failing,
        because we were trying to concatenate a list with the last parsed
        CSSValue which was not the expected grid line names list.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateRowsAndAreas):
        (WebCore::CSSParser::parseGridLineNames):
        * css/CSSParser.h:

2014-09-15  Andres Gomez  <agomez@igalia.com>

        [GStreamer] don't send transferMode HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=136781

        Reviewed by Philippe Normand.

        No header at all is better than having the wrong header as DLNA
        mandates that a missing header has to be tolerated while a wrong
        header is an error.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        * platform/network/HTTPHeaderNames.in:

2014-09-14  Christophe Dumez  <cdumez@apple.com>

        Fix post-mortem nits for r173528 & r173549
        https://bugs.webkit.org/show_bug.cgi?id=136808

        Reviewed by Darin Adler.

        Fix post-mortem nits for r173528 & r173549.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeTextForWebArea):
        - Use auto* instead of more specific types.
        - Use fastGetAttribute() instead of getAttribute() as this is
          supported for the "title" attribute.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionFromNone):
        Use auto* instead of more specific types.

2014-09-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce FONT_DATA_TYPE_CASTS, and use it
        https://bugs.webkit.org/show_bug.cgi?id=136766

        Reviewed by Darin Adler.

        As a step to use toFoo, this patch introduces FONT_DATA_TYPE_CASTS macro for toFooFontData().
        This will help to detect wrong type cast.

        * platform/graphics/FontData.h:
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::releaseFontData):
        (WebCore::FontGlyphs::determinePitch):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):

2014-09-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toCSSStyleSheet using STYLE_SHEET_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=136774

        Reviewed by Darin Adler.

        As a step to use toFoo, this patch introduces STYLE_SHEET_TYPE_CASTS for toCSSStyleSheet().
        This will help to detect wrong type cast. Additonally this patch helps to remove argument type of RefPtr.

        No new tests, no behavior changes.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * css/CSSStyleSheet.h:
        * css/StyleSheet.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::collectStyleSheets):

2014-09-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toFooElementData() using ELEMENT_DATA_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=136775

        Reviewed by Darin Adler.

        As a step to use toFoo, this patch introduces ELEMENT_DATA_TYPE_CASTS for toFooElementData().
        This will help to detect wrong type cast. Additonally this patch helps to remove argument type of RefPtr.

        No new tests, no behavior changes.

        * dom/Element.cpp:
        (WebCore::Element::cloneAttributesFromElement):
        (WebCore::Element::createUniqueElementData):
        * dom/ElementData.cpp:
        (WebCore::ElementData::destroy):
        * dom/ElementData.h:
        (WebCore::ElementData::length):
        (WebCore::ElementData::attributeBase):
        (WebCore::ElementData::presentationAttributeStyle):
        (WebCore::ElementData::attributesIterator):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setupInitialView): Remove static_cast<SVGSVGElement*>

2014-09-14  Chris Dumez  <cdumez@apple.com>

        Remove unnecessary overloads taking a ContainerNode in Element Traversal
        https://bugs.webkit.org/show_bug.cgi?id=136767

        Reviewed by Darin Adler.

        Remove unnecessary overloads taking a ContainerNode in Element Traversal.
        Several of those don't bring any performance improvements as the needed
        methods are defined on Node (not ContainerNode).

        No new tests, no behavior change.

        * dom/ElementTraversal.h:
        (WebCore::Traversal<Element>::previous):
        NodeTraversal::previous() takes a const Node* in argument so the
        ContainerNode overload is not needed.

        (WebCore::Traversal<ElementType>::previous):
        Unnecessary now that Traversal<Element>::previous() takes a const Node*
        in argument.

        (WebCore::Traversal<ElementType>::nextSibling):
        nextSibling() is defined on Node, not ContainerNode, so the overload
        is not needed.

        (WebCore::Traversal<ElementType>::previousSibling):
        previousSibling() is defined on Node, not ContainerNode, so the overload
        is not needed.

        (WebCore::Traversal<Element>::previousTemplate): Deleted.
        (WebCore::Traversal<ElementType>::previousTemplate): Deleted.
        (WebCore::Traversal<ElementType>::nextSiblingTemplate): Deleted.
        (WebCore::Traversal<ElementType>::previousSiblingTemplate): Deleted.
        No need to have those functions templated anymore.

2014-09-14  Daniel Bates  <dabates@apple.com>

        [iOS] Attempt to fix the iOS build after <http://trac.webkit.org/changeset/173606>
        (https://bugs.webkit.org/show_bug.cgi?id=136789)

        Substitute Node::countChildNodes() for Node::childNodeCount() in more places.

        Although I updated a comment in WebCore::lastOffsetForEditing() (defined in file
        editing/htmlediting.cpp) to refer to Node::countChildNodes(), I'm unclear what the
        comment is trying to explain that isn't otherwise explained by the code or the
        comments that precede this function. Specifically, I don't understand the use of
        the word "preempt" in the comment. We should look to improve the readability of
        this comment.

        * editing/htmlediting.cpp:
        (WebCore::lastOffsetForEditing):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot):

2014-09-14  Chris Dumez  <cdumez@apple.com>

        Drop NodeTraversal::nextSkippingChildren() overload taking a ContainerNode
        https://bugs.webkit.org/show_bug.cgi?id=136764

        Reviewed by Darin Adler.

        Drop NodeTraversal::nextSkippingChildren() overload taking a
        ContainerNode argument. This one does not bring any performance
        improvement because nextSibling() is defined on Node and
        nextAncestorSibling() takes a Node in argument.

        Also remove the overload in ElementTraversal as it no longer makes
        sense after this change.

        No new tests, no behavior change.

        * dom/ElementTraversal.h:
        (WebCore::Traversal<ElementType>::nextSkippingChildren):
        (WebCore::Traversal<ElementType>::nextSkippingChildrenTemplate): Deleted.
        * dom/NodeTraversal.h:
        (WebCore::NodeTraversal::nextSkippingChildren):
        (WebCore::NodeTraversal::next):
        (WebCore::NodeTraversal::traverseNextSkippingChildrenTemplate): Deleted.

2014-09-14  Chris Dumez  <cdumez@apple.com>

        Rename Node::childNodeCount() to countChildNodes() and avoid inefficient uses
        https://bugs.webkit.org/show_bug.cgi?id=136789

        Reviewed by Darin Adler.

        Rename Node::childNodeCount() to countChildNodes() to make it clearer
        that the method actually computes the result rather than returning a
        cached value.

        This patch also introduces a new Node::hasOneChild() method that is
        used to check if a Node has a single child. This is much more efficient
        than calling countChildNodes() == 1.

        The patch also leverages Node::hasChildNodes() in a lot of places
        instead of calling countChildNodes().

        Finally, in a couple of places, we now use childrenOfType() to iterate
        over children more efficient than using countChildNodes() and
        childNode(index).

        No new tests, no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        Update the name of the exposed symbol for countChildNodes().

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::countChildNodes):
        (WebCore::ContainerNode::childNodeCount): Deleted.
        Rename childNodeCount() to countChildNodes() to make it obvious it is
        computing the result rather than returning a cached value.

        * dom/ContainerNode.h:
        (WebCore::ContainerNode::hasOneChild):
        Introduce an efficient way to check in a ContainerNode has a single
        child as "countChildNodes() == 1" calls were frequent and inefficient.

        (WebCore::Node::countChildNodes):
        (WebCore::Node::childNodeCount): Deleted.
        * dom/Node.h:
        Rename childNodeCount() to countChildNodes().

        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent):
        * dom/Position.h:
        (WebCore::lastOffsetInNode):
        * dom/Range.cpp:
        Mechanical renaming.

        (WebCore::lengthOfContentsInNode):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        Call hasChildNodes() rather than countChildNodes() as it is a lot more
        efficient.

        * editing/Editor.cpp:
        (WebCore::Editor::setTextAsChildOfElement):
        (WebCore::Editor::rangeOfString):
        (WebCore::Editor::countMatchesForText):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::elementRangeContainingCaretSelection):
        Mechanical renaming.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        Call hasOneChild() instead of countChildNodes() == 1. Also remove
        redundant listElement->hasChildNodes() check as hasOneChild() takes
        care of this already.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        * editing/VisibleUnits.cpp:
        (WebCore::endOfDocument):
        * editing/htmlediting.cpp:
        (WebCore::lastOffsetForEditing):
        Mechanical renaming.

        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        Call hasChildNodes() instead of converting countChildNodes() to a
        boolean.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):
        Call !hasChildNodes() instead of !countChildNodes().

        (WebCore::isPlainTextMarkup):
        - Drop !node->isElementNode() check as !node->hasTagName(divTag) takes
          care of discarding non-Element Nodes already.
        - Cast the Node to an HTMLDivElement as soon as possible to avoid
          calling calling the slower Node APIs in several cases.
        - Call hasOneChild() instead of countChildNodes() == 1.

        * html/HTMLDivElement.h:
        * html/HTMLTagNames.in:
        Generate casting helpers as I use them in WebCore::isPlainTextMarkup().

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setText):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText):
        Call hasOneChild() / hasChildNodes() instead of countChildNodes().

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineContainerElement::setTimeDisplaysHidden):
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        Use childrenOfType<Element>() to iterate of child Elements instead of
        slower childNodeCount() + childNode(index) + isElementNode(). Also,
        childNodeCount() was not even cached before the loop.

        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::displayLastTextTrackCueBox):
        Use childrenOfType<Element>() to iterate of child Elements, thus
        avoiding calling childNodeCount() + childNode(index).

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::extend):
        (WebCore::DOMSelection::selectAllChildren):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::caretMaxOffset):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::isSelected):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        Mechanical renaming.

2014-09-13  Chris Dumez  <cdumez@apple.com>

        Un-inline Element constructor
        https://bugs.webkit.org/show_bug.cgi?id=136786

        Reviewed by Benjamin Poulain.

        Un-inline Element constructor as it is non-trivial and it does not seem
        to impact performance based on my testing:
        http://dromaeo.com/?id=226865,226869

        This reduces the stripped binary size by 8 Kb.

        No new tests, no behavior change.

        * dom/Element.cpp:
        (WebCore::Element::Element):
        * dom/Element.h:
        (WebCore::Element::Element): Deleted.

2014-09-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Build fix with REQUEST_AUTOCOMPLETE enabled

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::requestAutocomplete):
        (WebCore::HTMLFormElement::finishRequestAutocomplete):

2014-09-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Re-add the request autocomplete feature

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

        This feature was rolled out in r148731 because it was only used by
        Chromium. As we consider supporting this feature, roll it back in, but
        leave it disabled.

        This rolls out r148731 (which removed the feature) with small changes
        needed to make the code build in ToT, to match modern style, to make
        the tests run, and to remove unused code.

        Reviewed by Andy Estes.

        Tests: fast/events/constructors/autocomplete-error-event-constructor.html
               fast/forms/form-request-autocomplete.html

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/AutocompleteErrorEvent.h: Added.
        (WebCore::AutocompleteErrorEvent::create):
        (WebCore::AutocompleteErrorEvent::reason):
        (WebCore::AutocompleteErrorEvent::AutocompleteErrorEvent):
        * dom/AutocompleteErrorEvent.idl: Added.
        * dom/EventNames.h:
        * dom/EventNames.in:
        * html/HTMLAttributeNames.in:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::requestAutocomplete):
        (WebCore::HTMLFormElement::finishRequestAutocomplete):
        (WebCore::HTMLFormElement::requestAutocompleteTimerFired):
        (WebCore::HTMLFormElement::parseAttribute):
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * page/DOMWindow.idl:

2014-09-12  Vivek Galatage  <vivek.vg@samsung.com>

        CanvasRenderingContext2D should update the computed style while setting the font
        https://bugs.webkit.org/show_bug.cgi?id=136737

        Reviewed by Darin Adler.

        Before accessing the computed style for populating 'font' property of CanvasRenderingContext2D
        make sure to have an up-to-date computed style avoiding any stale reference.

        Test: fast/canvas/canvas-set-font-with-updated-style.html

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

2014-09-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Apply CSS JIT to SelectorQuery with multiple selectors
        https://bugs.webkit.org/show_bug.cgi?id=135255

        Reviewed by Benjamin Poulain.

        After dropping SelectorCheckerFastPath, Dromaeo cssquery-jquery test
        result becomes significantly worse. 400.26/s to 348.16/s, 13%
        performance regression.

        Investigated the cause of it and we found that the test results for
        querySelector with multiple selectors causes performance regressions.

        To solve this, we attempt to JIT compile all selectors in multiple
        selectors. And if compiling some selectors is failed, SelectorQuery
        fallbacks to the slower implementation.

        This change improves the performance. After applying this patch,
        cssquery-jquery test result becomes 418.71/s, 4.61% better than the
        previous good performance case.

        Test: fast/selectors/querySelector-multiple-selectors.html

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::SelectorDataList):
        (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:

2014-09-12  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Taking embedded youtube video full screen takes the whole page full screen
        https://bugs.webkit.org/show_bug.cgi?id=136792

        Reviewed by Beth Dakin.

        Recalculate style after beginning the enter fullscreen animation, but before sending the
        "webkitfullscreenchange" event to listeners.

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

2014-09-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r173575.
        https://bugs.webkit.org/show_bug.cgi?id=136790

        Failing tests (Requested by enrica on #webkit).

        Reverted changeset:

        "Remove PLATFORM(IOS) from WebCore/editing (Part 3)."
        https://bugs.webkit.org/show_bug.cgi?id=136474
        http://trac.webkit.org/changeset/173575

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

        Remove PLATFORM(IOS) from WebCore/editing (Part 3).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Benjamin Poulain.

        This is the updated version of the patch that was landed in r173340.
        I changed the use of IntPoint to FloatPoint since it was causing tests
        to fail.
        This patch removes the use of PLATFORM(IOS) from TextAffinity.h
        and removes the assumption that EAffinity values match NSSelectionAffinity
        values. It also removes the includes in TextAffinity.h, creating the need to
        include explicitly the files when necessary. It also removes the unnecessary
        use of platform specific types, replacing them with WebCore types.

        * WebCore.exp.in:
        * editing/TextAffinity.h:
        (kit): Deleted.
        (core): Deleted.
        * editing/cocoa/HTMLConverter.mm:
        * page/mac/WebCoreFrameView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::platformSetScrollPosition):
        * platform/ios/wak/WAKScrollView.mm:
        (-[WAKScrollView setScrollOrigin:updatePositionAtAll:immediately:]):
        (-[WAKScrollView scrollOrigin]):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetScrollPosition):

2014-09-12  Dean Jackson  <dino@apple.com>

        Unprefix the flexbox CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=98420

        Unreviewed fix up, that missed the original
        commit. Tony Chang made some comments
        on the bugzilla.

        "justify-self" should not have been unprefixed.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-09-12  Dean Jackson  <dino@apple.com>

        Unprefix the flexbox CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=98420

        Reviewed by Benjamin Poulain.

        Remove the need for a "-webkit-" prefix on flexbox
        and related properties. This includes:
        - align-content
        - align-items
        - align-self
        - flex-basis
        - flex-direction
        - flex-wrap
        - flex-grow
        - flex-shrink
        - flex
        - flex-flow
        - justify-content
        - order

        ... as well as the display keyword values "flex" and
        "inline-flex".

        * css/CSSComputedStyleDeclaration.cpp:  Change names.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp: Ditto.
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFlex):
        * css/CSSPrimitiveValueMappings.h: Since we need to still handle the old
        keywords for display, this has added two new keywords.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EDisplay): If the older keywords were used in
        content, map them to the new value names.
        * css/CSSPropertyNames.in: Add aliases for the prefixed properties.
        * css/CSSValueKeywords.in: Add "flex" and "inline-flex".
        * css/DeprecatedStyleBuilder.cpp: Change names.
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleProperties.cpp: Change names.
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::asText):
        * css/StylePropertyShorthand.cpp: Rename shorthand methods to remove the prefix.
        (WebCore::flexFlowShorthand):
        (WebCore::flexShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        (WebCore::webkitFlexFlowShorthand): Deleted.
        (WebCore::webkitFlexShorthand): Deleted.
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::equivalentBlockDisplay):
        (WebCore::StyleResolver::applyProperty):
        * page/animation/CSSPropertyAnimation.cpp: Change names.
        (WebCore::PropertyWrapperFlex::PropertyWrapperFlex):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor): Handle the two new display values (the same way as
        the old values).
        * rendering/style/RenderStyleConstants.h: Add constants for the new display values.

2014-09-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        ASSERTION FAILED: e in WebCore::StyleResolver::adjustRenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=136366

        Reviewed by Benjamin Poulain.

        Since element becomes nullptr when resolving styles for pseudo elements,
        so don't do `ASSERT(e)` and use pointer for that.

        Test: fast/css/appearance-with-pseudo-elements.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderThumb::updateAppearance):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbSize):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::adjustMenuListButtonStyle):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::adjustTextAreaStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        (WebCore::RenderThemeEfl::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustCheckboxStyle):
        (WebCore::RenderTheme::adjustRadioStyle):
        (WebCore::RenderTheme::adjustButtonStyle):
        (WebCore::RenderTheme::adjustInnerSpinButtonStyle):
        (WebCore::RenderTheme::adjustTextFieldStyle):
        (WebCore::RenderTheme::adjustTextAreaStyle):
        (WebCore::RenderTheme::adjustMenuListStyle):
        (WebCore::RenderTheme::adjustMeterStyle):
        (WebCore::RenderTheme::adjustProgressBarStyle):
        (WebCore::RenderTheme::adjustMenuListButtonStyle):
        (WebCore::RenderTheme::adjustMediaControlStyle):
        (WebCore::RenderTheme::adjustSliderTrackStyle):
        (WebCore::RenderTheme::adjustSliderThumbStyle):
        (WebCore::RenderTheme::adjustSliderThumbSize):
        (WebCore::RenderTheme::adjustSearchFieldStyle):
        (WebCore::RenderTheme::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderTheme::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustButtonStyle):
        (WebCore::RenderThemeGtk::adjustMenuListStyle):
        (WebCore::RenderThemeGtk::adjustMenuListButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle):
        (WebCore::RenderThemeGtk::adjustSliderTrackStyle):
        (WebCore::RenderThemeGtk::adjustSliderThumbStyle):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeGtk::adjustProgressBarStyle):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustCheckboxStyle):
        (WebCore::RenderThemeIOS::adjustRadioStyle):
        (WebCore::RenderThemeIOS::adjustMenuListButtonStyle):
        (WebCore::RenderThemeIOS::adjustSliderTrackStyle):
        (WebCore::RenderThemeIOS::adjustSliderThumbSize):
        (WebCore::RenderThemeIOS::adjustSearchFieldStyle):
        (WebCore::RenderThemeIOS::adjustButtonStyle):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustTextFieldStyle):
        (WebCore::RenderThemeMac::adjustTextAreaStyle):
        (WebCore::RenderThemeMac::adjustProgressBarStyle):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        (WebCore::RenderThemeSafari::adjustTextFieldStyle):
        (WebCore::RenderThemeSafari::adjustTextAreaStyle):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):
        (WebCore::RenderThemeSafari::adjustSliderThumbStyle):
        (WebCore::RenderThemeSafari::adjustSliderThumbSize):
        (WebCore::RenderThemeSafari::adjustSearchFieldStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeSafari::adjustMeterStyle):
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWin::adjustMeterStyle):
        * rendering/RenderThemeWin.h:

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

        Fix casing in method name - formatNumberForCustomCSSText
        https://bugs.webkit.org/show_bug.cgi?id=136758

        Reviewed by Benjamin Poulain.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::CSSPrimitiveValue::formatNumberForcustomCSSText): Deleted.
        * css/CSSPrimitiveValue.h:

2014-09-12  Chris Dumez  <cdumez@apple.com>

        Make all CSSSelector data members private
        https://bugs.webkit.org/show_bug.cgi?id=136784

        Reviewed by Benjamin Poulain.

        Make all CSSSelector data members private. Previously, some of the data
        members such as m_relation / m_match / m_pseudoType were public and
        accessed directly from outside the class. The new approach is better
        because:
        - Those members are bit fields so by using getters, we can hide the
          casts inside the getters. The setters can now also check that the
          bitfield is big enough to actually store the enum value.
        - When using those in switch() statements, the compiler now complains
          if we fail to test some of the enum values as the value is now an
          enum, and not merely an unsigned integer.
        - Some of these members already has getters (e.g. relation()).
        - Better encapsulation.

        No new tests, no behavior change.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePagePseudoSelector):
        (WebCore::CSSParserSelector::parsePseudoElementSelector):
        (WebCore::CSSParserSelector::parsePseudoElementCueFunctionSelector):
        (WebCore::CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector):
        (WebCore::CSSParserSelector::setPseudoClassValue):
        (WebCore::CSSParserSelector::isSimple):
        (WebCore::CSSParserSelector::prependTagSelector):
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::setMatch):
        (WebCore::CSSParserSelector::setRelation):
        (WebCore::CSSParserSelector::isPseudoElementCueFunction):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::createRareData):
        (WebCore::CSSSelector::specificityForOneSelector):
        (WebCore::CSSSelector::specificityForPage):
        (WebCore::CSSSelector::operator==):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::setPseudoElementType):
        (WebCore::CSSSelector::setPagePseudoType):
        (WebCore::CSSSelector::pseudoClassType):
        (WebCore::CSSSelector::setPseudoClassType):
        (WebCore::CSSSelector::pseudoElementType):
        (WebCore::CSSSelector::pagePseudoClassType):
        (WebCore::CSSSelector::setRelation):
        (WebCore::CSSSelector::match):
        (WebCore::CSSSelector::setMatch):
        (WebCore::CSSSelector::matchesPseudoElement):
        (WebCore::CSSSelector::isUnknownPseudoElement):
        (WebCore::CSSSelector::isCustomPseudoElement):
        (WebCore::CSSSelector::isSiblingSelector):
        (WebCore::CSSSelector::isAttributeSelector):
        (WebCore::CSSSelector::setValue):
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::tagQName):
        (WebCore::CSSSelector::value):
        * css/CSSSelectorList.cpp:
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        * css/PageRuleCollector.cpp:
        (WebCore::checkPageSelectorComponents):
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::collectFeaturesFromSelector):
        * css/RuleSet.cpp:
        (WebCore::isSelectorMatchingHTMLBasedOnRuleHash):
        (WebCore::determinePropertyWhitelistType):
        (WebCore::RuleSet::addRule):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::anyAttributeMatches):
        (WebCore::canMatchHoverOrActiveInQuirksMode):
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::checkScrollbarPseudoClass):
        (WebCore::SelectorChecker::determineLinkMatchType):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::isCommonPseudoClassSelector):
        * css/SelectorFilter.cpp:
        (WebCore::collectDescendantSelectorIdentifierHashes):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueMatching):
        * dom/SelectorQuery.cpp:
        (WebCore::isSingleTagNameSelector):
        (WebCore::isSingleClassNameSelector):
        (WebCore::findIdMatchingType):
        (WebCore::SelectorDataList::SelectorDataList):
        (WebCore::selectorForIdLookup):
        (WebCore::filterRootById):

2014-09-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r173441): [GTK] All buttons appear insensitive
        https://bugs.webkit.org/show_bug.cgi?id=136614

        Reviewed by Sergio Villar Senin.

        Do not use RenderTheme::isReadOnlyControl() to decide whether to
        render non text based forms sensitive or unsensitive, isEnabled()
        is enough in those cases.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::paintToggle):
        (WebCore::renderButton):
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):

2014-09-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r173423): CertificateInfo is never sent to the UI process when using shared secondary process model
        https://bugs.webkit.org/show_bug.cgi?id=136669

        Reviewed by Antti Koivisto.

        Add CertificateInfoPolicy option to ResourceLoaderOptions. It's
        set to DoNotIncludeCertificateInfo for all loads except the main
        resource load.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource): Pass
        IncludeCertificateInfo to ResourceLoaderOptions.
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        Pass DoNotIncludeCertificateInfo to ResourceLoaderOptions().
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::shouldIncludeCertificateInfo): Return
        true if IncludeCertificateInfo option was given.
        * loader/ResourceLoaderOptions.h:
        (WebCore::ResourceLoaderOptions::ResourceLoaderOptions):
        (WebCore::ResourceLoaderOptions::certificateInfoPolicy):
        (WebCore::ResourceLoaderOptions::setCertificateInfoPolicy):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): If
        IncludeCertificateInfo option is present, call
        includeCertificateInfo() on the response.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet): Pass
        DoNotIncludeCertificateInfo to ResourceLoaderOptions().
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions): Ditto.
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading): Ditto.
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::startLoading): Ditto.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading): Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::CachedResourceStreamingClient): Ditto.

2014-09-11  Ryuan Choi  <ryuan.choi@gmail.com>

        Unreviewed build fix attempt on windows port since r173553.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2014-09-11  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: disambiguate integral and real number primitive types in the protocol
        https://bugs.webkit.org/show_bug.cgi?id=136606

        Reviewed by Timothy Hatcher.

        Update clients of InspectorValue to disambiguate integer and double primitive types.

        No new tests, no behavior changed.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        (WebCore::parseQuad):
        (WebCore::InspectorDOMAgent::performSearch):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForPoint):
        (WebCore::buildObjectForRect):
        (WebCore::buildObjectForSize):
        (WebCore::appendPathCommandAndPoints):
        (WebCore::InspectorOverlay::reset):
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::replayToPosition):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didCompleteRecordEntry):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createBackgroundRecord):
        (WebCore::TimelineRecordFactory::createGCEventData):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        (WebCore::TimelineRecordFactory::createResourceFinishData):
        (WebCore::TimelineRecordFactory::createReceiveResourceData):
        (WebCore::TimelineRecordFactory::createLayoutData):
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        (WebCore::TimelineRecordFactory::createAnimationFrameData):
        (WebCore::createQuad):
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::createWebSocketCreateData):
        (WebCore::TimelineRecordFactory::createGenericWebSocketData):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):

2014-09-11  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL][CoordinatedGraphics] Move CoordinatedGraphicsScene and CoordinatedBackingStore to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=136770

        Reviewed by Gyuyoung Kim.

        CoordinatedGraphicsScene and CoordinatedBackingStore is only for UIProcess.
        This patch moved them from WebCore to WebKit2/UIProcess/CoordinatedGraphics/.

        No new tests, no behavior change.

        * PlatformEfl.cmake:

2014-09-11  Shivakumar JM  <shiva.jm@samsung.com>

        The overrideMimeType in XMLHttpRequest should throw the exception.
        https://bugs.webkit.org/show_bug.cgi?id=136699

        Reviewed by Darin Adler.

        No new tests, modifed test http/tests/xmlhttprequest/exceptions.html.

        Set XMLHttpRequest::overrideMimeType to throw an "InvalidStateError" exception, if the state is LOADING or DONE.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::overrideMimeType):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2014-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Occasional ASSERT closing web inspector
        https://bugs.webkit.org/show_bug.cgi?id=136762

        Reviewed by Timothy Hatcher.

        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/PageScriptDebugServer.h:

2014-09-11  Chris Dumez  <cdumez@apple.com>

        Simplify DOM tree traversal in FrameSelection::setSelectionFromNone()
        https://bugs.webkit.org/show_bug.cgi?id=136763

        Reviewed by Ryosuke Niwa.

        We only need to traverse the direct children of the Document element to
        find the body. The previous code was potentially traversing descendants.
        The new code is consistent with Document::body() except that we only
        look for an HTMLBodyElement (and ignore HTMLFrameSetElement).

        Also update the code to use tighter typing for clarity.

        No new tests, no behavior change.

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

2014-09-11  Chris Fleizach  <cfleizach@apple.com>

        AX: Size of web view in Safari as reported by AX changes when adding/removing bars is wrong
        https://bugs.webkit.org/show_bug.cgi?id=136756

        Reviewed by Beth Dakin.

        topContentInset not only seems to push the scroll view's origin down, but it also shrinks its height as well, which
        was not accounted for in the original fix.

        Modified: platform/mac-wk2/accessibility/content-inset-scrollview-frame.html

        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::elementRect):

2014-09-11  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking):

2014-09-11  Beth Dakin  <bdakin@apple.com>

        WebKit scrollbars flash in non-dominant spaces when entering Mission Control
        https://bugs.webkit.org/show_bug.cgi?id=136761
        -and corresponding-
        rdar://problem/18195616

        Reviewed by Tim Horton.

        This patch makes our logic about when to call ScrollableArea::contentAreaDidHide/
        Show match the logic in AppKit. We only want these notifications when the window 
        has become both visible and active (or lost both, in the case of hide).

        Re-name setIsVisibleInternal() to setIsVisibleAndActiveInternal(), and call it 
        only when both visibility and active-state have changed.
        * page/FocusController.cpp:
        (WebCore::FocusController::setViewState):
        (WebCore::FocusController::setIsVisibleAndActiveInternal):
        (WebCore::FocusController::setIsVisibleInternal): Deleted.
        * page/FocusController.h:

        FocusController::setViewState() is the only place that needs to call 
        ScrollableArea::contentAreaDidHide/Show, so remove these callers.
        * page/FrameView.cpp:
        (WebCore::FrameView::didMoveOnscreen): Deleted.
        (WebCore::FrameView::willMoveOffscreen): Deleted.
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):

2014-09-10  Michael Saboff  <msaboff@apple.com>

        Move JSScope out of JSFunction into separate JSCallee class
        https://bugs.webkit.org/show_bug.cgi?id=136725

        Reviewed by Oliver Hunt.

        Created new JSCallee class that contains a JSScope*.  Changed JSFunction to inherit from
        JSCallee.

        * ForwardingHeaders/runtime/JSCallee.h: New forwarding header.

2014-09-11  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix iOS.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking):

2014-09-11  Jer Noble  <jer.noble@apple.com>

        Add site-specific quirk for entering fullscreen on YouTube.com.
        https://bugs.webkit.org/show_bug.cgi?id=136742

        Reviewed by Eric Carlson.

        YouTube only resizes its <video> content when entering fullscreen after receiving the "webkitfullscreenchange"
        event, which is fired once the animation to enter fullscreen completes. This leaves the apparent <video> content
        too small during the animation, especially at the beginning of the animation. Add a site-specific hack for
        YouTube sites which fires the "webkitfullscreenchange" event synchronously with the beginning of the enter
        fullscreen animation. This will cause YouTube to resize their <video> content during the period of time where we
        disable screen updates, and makes the enter fullscreen animation seamless.

        Add a static utility method, hostIsYouTube(), for the various pieces of this site-specific hack, and expand it
        to match youtube.co.uk, youtube.fr, etc.

        * dom/Document.cpp:
        (WebCore::hostIsYouTube): Added.
        (WebCore::Document::webkitWillEnterFullScreenForElement): Fire fullscreenchange event if hacks are enabled.
        (WebCore::Document::webkitDidEnterFullScreenForElement): Don't fire the event if same.
        (WebCore::Document::webkitDidExitFullScreenForElement): Use hostIsYouTube().
        
2014-09-11  Bear Travis  <betravis@adobe.com>

        [CSS Font Loading] Enable CSS Font Loading on Mac
        https://bugs.webkit.org/show_bug.cgi?id=135473

        Reviewed by Antti Koivisto.

        Enable CSS Font Loading in FeatureDefines, and in
        RuntimeEnabledFeatures.

        Font Loading tests have been toggled back on in the Mac
        TestExpectations file.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):

2014-09-11  Chris Dumez  <cdumez@apple.com>

        Use tighter typing for Document::ownerElement() return value
        https://bugs.webkit.org/show_bug.cgi?id=136746

        Reviewed by Ryosuke Niwa.

        Use tighter typing for Document::ownerElement() return value at call
        sites to increase code readability a bit and allow the compiler to
        generate slightly more efficient code in some cases. In particular,
        the more efficient HTMLElement::hasTagName(HTMLQualifiedName) is
        now called in several cases instead of the one on Node. This bypasses
        unnecessary isHTMLElement() checks.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeTextForWebArea):
        * dom/Document.cpp:
        (WebCore::Document::updateLayout):
        (WebCore::Document::topDocument):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedInto):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2014-09-10  Roger Fong  <roger_fong@apple.com>

        Check for varying packing restrictions per program instead of per shader.
        https://bugs.webkit.org/show_bug.cgi?id=136585.
        <rdar://problem/16308409>.

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/conformance/ogles/GL/build/build_009_to_016.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::linkProgram): 
        Check for varying packing restrictions when linking the program.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking): 
        Checks varyings shared by both vertex and fragment shaders and makes sure
        they satisfy packing restrictions.

2014-09-11  Beth Dakin  <bdakin@apple.com>

        Support rubber-banding in sub-frames
        https://bugs.webkit.org/show_bug.cgi?id=136726
        -and corresponding-
        rdar://problem/10011924

        Reviewed by Tim Horton.

        Set the appropriate scroll elasticity for all frames! As long as its enabled, sub-
        frames want an elasticity of ScrollElasticityAutomatic, which will allow for 
        latching. 
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

        Account for rubber-banding in sub-frames.
        (WebCore::FrameView::isScrollableOrRubberbandable):
        (WebCore::FrameView::hasScrollableOrRubberbandableAncestor):

        This patch also re-names rubberBandingForOverflowScrollEnabled to 
        rubberBandingForSubScrollableRegionsEnabled
        * page/Settings.in:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::overhangAmount):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):

2014-09-11  Myles C. Maxfield <mmaxfield@apple.com>  <litherum@gmail.com>

        Initial implementation of SVG to OTF font converter
        https://bugs.webkit.org/show_bug.cgi?id=136688

        Reviewed by Darin Adler.

        This patch creates a new file and new function which turns an SVG font into an OpenType font.
        This function is not very full featured, and as such is never called. However, it works with
        fonts that only support simple horizontal basic multilingual plane codepoints. It has only
        been tested on OS X, and does not have any automated tests. This patch is only jumping off
        point, laying the basic groundwork for a more robust font converter.

        The goal of this patch is to eventually allow us to delete the codepath with which we draw
        text using SVG fonts. Using a native codepath instead will allow for better performance,
        security, and code clarity. In my initial benchmarks, using this converter instead of the
        SVG codepath is at least a 100x speed improvement (after running for 4 hours I stepped
        away from my machine).

        No new tests because the function is not ready to be called (yet!)
        Initial implementation of SVG to OTF font converter
        https://bugs.webkit.org/show_bug.cgi?id=136688

        * WebCore.xcodeproj/project.pbxproj: Add new file.
        * svg/SVGPathBuilder.h: Single function. Takes a SVGFontElement and returns a byte
        * svg/SVGToOTFFontConversion.cpp: Added.
        (WebCore::write32): Write a big-endian Int32.
        (WebCore::write16): Write a big-endian Int16.
        (WebCore::overwrite32): Overwrite an existing Int32 in a vector (instead of appending)
        (WebCore::SVGToOTFFontConverter::GlyphData::GlyphData): Internal class to hold state during
        function calls.
        (WebCore::roundDownToPowerOfTwo):
        (WebCore::SVGToOTFFontConverter::appendCMAPTable): See function name.
        (WebCore::SVGToOTFFontConverter::appendHEADTable): Ditto.
        (WebCore::clampTo): Used to clamp data types to fit into other data types.
        (WebCore::SVGToOTFFontConverter::appendHHEATable): See function name.
        (WebCore::SVGToOTFFontConverter::appendHMTXTable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendMAXPTable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendNAMETable): Ditto.
        (WebCore::SVGToOTFFontConverter::appendOS2Table): Ditto.
        (WebCore::SVGToOTFFontConverter::appendPOSTTable): Ditto.
        (WebCore::isValidStringForCFF): The CFF font format only allows strings with particular
        characters in them.
        (WebCore::appendCFFValidString): Append a string assuming it's valid to append.
        (WebCore::SVGToOTFFontConverter::appendCFFTable): See function name.
        (WebCore::SVGToOTFFontConverter::appendVORGTable): Ditto.
        (WebCore::writeCFFEncodedNumber): CFF has this wacky encoding scheme for encoding and
        decoding numbers.
        (WebCore::CFFBuilder::CFFBuilder): Subclass of SVGPathBuilder, which is used for building
        CFF CharStrings (which are glyph path representations).
        (WebCore::CFFBuilder::updateForConstituentPoint): Invoked for every point in a path, does
        things like updates glyph bounding box information.
        (WebCore::CFFBuilder::boundingBox): Getter.
        (WebCore::transcodeGlyphPaths): SVG path data string -> CFF CharString
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Generate internal state ahead of
        time before generating any tables.
        (WebCore::isFourByteAligned):
        (WebCore::calculateChecksum): OTF files have checksums.
        (WebCore::SVGToOTFFontConverter::appendTable): Invoked for each entry in the table of
        contents of the OTF font.
        (WebCore::SVGToOTFFontConverter::convertSVGToOTFFont): Write out the tables.
        (WebCore::convertSVGToOTFFont): Entry point.
        * svg/SVGToOTFFontConversion.h: Added.

2014-09-11  Jer Noble  <jer.noble@apple.com>

        [EME] REGRESSION(??): test media/encrypted-media/encrypted-media-v2-syntax.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=136723

        Reviewed by Eric Carlson.

        Update a comment to point to the implemented Working Draft 18 Feburary 2014 version of the spec.

        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::createSession):

2014-09-11  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [WK2] Authentication dialog is displayed for cross-origin XHR
        https://bugs.webkit.org/show_bug.cgi?id=131349

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Export of isAllowedToAskUserForCredentials.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::isAllowedToAskUserForCredentials): Replacing clientCredentialPolicy method. Returns true if credentials can be requested to the user.
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge): Updated to use isAllowedToAskUserForCredentials.
        * loader/ResourceLoader.h: Removing clientCredentialPolicy method and adding isAllowedToAskUserForCredentials method.

2014-09-11  Chris Fleizach  <cfleizach@apple.com>

        AX: Children inside a <legend> are not accessible
        https://bugs.webkit.org/show_bug.cgi?id=136735

        Reviewed by Mario Sanchez Prada.

        The AX children of a <legend> are being hidden currently, which makes it impossible for
        VoiceOver to activate control elements inside of a <legend>.
        The solution is that legend elements SHOULD be allowed to have children.

        Test: accessibility/legend-children-are-visible.html

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

2014-09-11  Brendan Long  <b.long@cablelabs.com>

        Fix FIXME's in JSTrackCustom now that AudioTrack and VideoTrack exist.
        https://bugs.webkit.org/show_bug.cgi?id=136552

        Reviewed by Eric Carlson.

        * bindings/js/JSTrackCustom.cpp:
        (WebCore::toTrack): Add casts for AudioTrack and VideoTrack.

2014-09-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Merge WebKitAuthenticationWidget into WebKitAuthenticationDialog
        https://bugs.webkit.org/show_bug.cgi?id=136700

        Reviewed by Sergio Villar Senin.

        Remove WebKitAuthenticationWidget. The only reason why we had this
        widget separated in WebCore was to share it between WebKit1 and
        WebKit2, but now it's only used by WebKitAuthenticationDialog in WebKit2.

        * PlatformGTK.cmake: Remove files from compilation.
        * platform/gtk/WebKitAuthenticationWidget.cpp: Removed.
        * platform/gtk/WebKitAuthenticationWidget.h: Removed.

2014-09-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use ASSERT instead of ASSERT_WITH_SECURITY_IMPLICATION
        https://bugs.webkit.org/show_bug.cgi?id=136732

        Reviewed by Andy Estes.

        Since r173458 changed to use static_cast<> with toFoo, ASSERT_WITH_SECURITY_IMPLICATION doesn't
        need to be used anymore. ASSERT is enough for it.

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::document):

2014-09-10  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [SVG] Cleanup iterator code in SMILTimeContainer using range-based loop
        https://bugs.webkit.org/show_bug.cgi?id=136720

        Reviewed by Filip Pizlo.

        No new tests, no change on behavior.

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::updateAnimations):

2014-09-10  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/network/ResourceHandle.h:
        * platform/network/mac/ResourceHandleMac.mm:

2014-09-09  Myles C. Maxfield <mmaxfield@apple.com>  <litherum@gmail.com>

        Delete class SavedDrawingStateForMask
        https://bugs.webkit.org/show_bug.cgi?id=136498

        Reviewed by Darin Adler.

        This class is left over from when text-decoration-skip: ink used
        GraphicsContext masking.

        No new tests because there is no behavior change.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::applyShadowToGraphicsContext):
        * rendering/InlineTextBox.h:
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::TextPainter):
        (WebCore::paintTextWithShadows):
        (WebCore::TextPainter::paintText):
        * rendering/TextPainter.h:
        (WebCore::SavedDrawingStateForMask::SavedDrawingStateForMask): Deleted.
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows):

2014-09-10  Tim Horton  <timothy_horton@apple.com>

        Call setCollectsTimingData only once, and before making any {CF,NS}URLConnections
        https://bugs.webkit.org/show_bug.cgi?id=136731
        <rdar://problem/18252844>

        Reviewed by Simon Fraser.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        Move setCollectsTimingData to before createCFURLConnection, so the first connection
        has timing data associated with it.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        Move setCollectsTimingData to before we create our NSURLConnection, so the first connection
        has timing data associated with it.
        Use setCollectsTimingData instead of the NSURLConnection SPI directly.

        (WebCore::ResourceHandle::setCollectsTimingData):
        Only call _setCollectsTimingData once.

2014-09-10  Enrica Casucci  <enrica@apple.com>

        Remove iOS-only -webkit-composition-fill-color CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=136728
        rdar://problem/10439154

        Reviewed by Tim Horton.

        This property is no longer used on iOS.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * editing/EditingStyle.cpp:
        * platform/graphics/Color.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionBackground):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2014-09-10  Tim Horton  <timothy_horton@apple.com>

        Remove ImageSource::ShouldSkipMetadata
        https://bugs.webkit.org/show_bug.cgi?id=136713

        Reviewed by Pratik Solanki.

        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::createImageSourceOptions):
        (WebCore::imageSourceOptions):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        Remove ShouldSkipMetadata and users. Nobody ever uses DoNotSkipMetadata.

2014-09-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=136650
        Rubber-banding in the DOM view of the WebInspector is really jumpy
        -and corresponding-
        rdar://problem/18166043

        Reviewed by Darin Adler.

        This patch implements the ScrollableArea virtual function isRubberBandInProgress() 
        for RenderLayer, and then uses that to determine whether to clamp the scroll 
        position in updateScrollInfoAfterLayout().
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isRubberBandInProgress):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:

2014-09-10  Tim Horton  <timothy_horton@apple.com>

        Remove a workaround in frameIsCompleteAtIndex for a problem that was fixed in Lion
        https://bugs.webkit.org/show_bug.cgi?id=136652

        Reviewed by Dan Bernstein.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        ImageIO returns the right thing now.

2014-09-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Laying out a TextRun using an SVG font is O(n^2)
        https://bugs.webkit.org/show_bug.cgi?id=136584

        Reviewed by Darin Adler.

        Addressing post-commit review from Darin.

        No new tests.

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsSpace): Un-inline.
        (WebCore::Font::treatAsZeroWidthSpace): Ditto.
        (WebCore::Font::treatAsZeroWidthSpaceInComplexScript): Ditto.
        * svg/SVGFontData.cpp:
        (WebCore::computeNormalizedSpaces): Avoid unnecessary copy.

2014-09-10  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Optimization; avoid reallocating string many times.
        https://bugs.webkit.org/show_bug.cgi?id=136704

        Reviewed by Alex Christensen.

        Adding individual characters to a string is inefficient, the string will be reallocated each time.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::readCurlCookieToken):

2014-09-10  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile error, CertificateInfo.h is not found.
        https://bugs.webkit.org/show_bug.cgi?id=136703

        Reviewed by Alex Christensen.

        Curl also needs to implement the CertificateInfo class.

        * platform/network/curl/CertificateInfo.h: Added.
        (WebCore::CertificateInfo::CertificateInfo):

2014-09-10  Simon Fraser  <simon.fraser@apple.com>

        Clean up some ENABLE(PICTURE_SIZES) stuff, don't change function signatures inside #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=136654

        Reviewed by Darin Adler.

        Adding parameters inside an #ifdef makes for unreadable code, so remove some
        #if ENABLE(PICTURE_SIZES) related to the preload scanner and always pass the arguments.
        Reduced the argument count on some functions by just passing a Document&. 
        
        Also fix a couple of uses of #if ENABLE_PICTURE_SIZES.

        * html/HTMLImageElement.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::pickBestImageCandidate):
        (WebCore::bestFitSourceForImageAttributes):
        * html/parser/HTMLSrcsetParser.h:

2014-09-10  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-labelledby is not honoring sub-node text
        https://bugs.webkit.org/show_bug.cgi?id=136689

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/aria-labelledby-with-descendants.html

        When aria-labelledby retrieves the textUnderElements it needs to consider
        all sub-children, including focusable content.

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

2014-09-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use toDocument instead of static_cast<Document*>
        https://bugs.webkit.org/show_bug.cgi?id=136694

        Reviewed by Andy Estes.

        Clean up static_cast<Document*>.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::document):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::document):
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::dispatchErrorEvent): Add a line to remove .get().
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::document):
        (WebCore::XMLHttpRequest::open):

2014-09-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Merge CheckingContexts from SelectorCompiler and SelectorChecker
        https://bugs.webkit.org/show_bug.cgi?id=135255

        Reviewed by Benjamin Poulain.

        In this patch, we merge SelectorChecker::SelectorCheckingContext and SelectorCompiler::CheckingContext.
        We expose only SelectorChecker::CheckingContext. That is the same to the old SelectorCompiler::CheckingContext.

        In SelectorChecker.cpp, we define SelectorChecker::CheckingContextWithStatus and use it internally.
        And we move VisitedMatchType from SelectorChecker.h to SelectorChecker.cpp.

        VisitedMatchType is also explicitly used by SelectorCheckerFastPath. However, SelectorCheckerFastPath is now
        used only from SelectorQuery (Style resolution algorithm no longer uses it: r171059).
        In this patch, we remove SelectorCheckerFastPath since the major cases are covered by CSS JIT.
        In `RightMostWithIdMatch`, `Element#matches` and multiple selectors `querySelector('a, b')` cases,
        CSS JIT is not used. So dropping fast path affects them. But 1) these cases are rare or 2) the target node
        is typically only one since nodes are filtered before matching. So it doesn't have performance regression.

        And now since CheckingContextWithStatus is the derived class of CheckingContext, we can use
        the same test functions; template parameter is not necessary. It reduces code size.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::CheckingContextWithStatus::CheckingContextWithStatus):
        (WebCore::SelectorChecker::match):
        (WebCore::checkingContextForParent):
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::canMatchHoverOrActiveInQuirksMode):
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::checkScrollbarPseudoClass):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::CheckingContext::CheckingContext):
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext): Deleted.
        * css/SelectorCheckerFastPath.cpp: Removed.
        * css/SelectorCheckerFastPath.h: Removed.
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::scrollbarMatchesEnabledPseudoClass):
        (WebCore::scrollbarMatchesDisabledPseudoClass):
        (WebCore::scrollbarMatchesHoverPseudoClass):
        (WebCore::scrollbarMatchesActivePseudoClass):
        (WebCore::scrollbarMatchesHorizontalPseudoClass):
        (WebCore::scrollbarMatchesVerticalPseudoClass):
        (WebCore::scrollbarMatchesDecrementPseudoClass):
        (WebCore::scrollbarMatchesIncrementPseudoClass):
        (WebCore::scrollbarMatchesStartPseudoClass):
        (WebCore::scrollbarMatchesEndPseudoClass):
        (WebCore::scrollbarMatchesDoubleButtonPseudoClass):
        (WebCore::scrollbarMatchesSingleButtonPseudoClass):
        (WebCore::scrollbarMatchesNoButtonPseudoClass):
        (WebCore::scrollbarMatchesCornerPresentPseudoClass):
        * css/StyleResolver.h:
        (WebCore::checkRegionSelector):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext):
        (WebCore::SelectorCompiler::addScrollbarPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::addFlagsToElementStyleFromContext):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::branchOnResolvingModeWithCheckingContext):
        (WebCore::SelectorCompiler::elementIsActiveForStyleResolution):
        (WebCore::SelectorCompiler::setElementStyleFromContextIsAffectedByEmptyAndUpdateRenderStyleIfNecessary):
        (WebCore::SelectorCompiler::elementIsHoveredForStyleResolution):
        (WebCore::SelectorCompiler::makeContextStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::makeElementStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRequestedPseudoElementEqualsToSelectorPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsScopeRoot):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateMarkPseudoStyleForPseudoElement):
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompiler::CheckingContext::CheckingContext): Deleted.
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::SelectorDataList):
        (WebCore::SelectorDataList::selectorMatches):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithCheckingContext):
        (WebCore::isCompiledSelector):
        (WebCore::SelectorDataList::compileSelector):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:
        (WebCore::SelectorDataList::SelectorData::SelectorData):

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

        [MSE] http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html failing after r173318
        https://bugs.webkit.org/show_bug.cgi?id=136676

        Reviewed by Eric Carlson.

        Revert the inadvertant conditional change introduced in r173318.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setDurationInternal):

2014-09-09  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix for Windows.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:

2014-09-09  Dan Bernstein  <mitz@apple.com>

        FrameLoader::prepareForHistoryNavigation is unused
        https://bugs.webkit.org/show_bug.cgi?id=136683

        Reviewed by Tim Horton.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForHistoryNavigation): Deleted.
        * loader/FrameLoader.h: Removed the declaration.

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

        [CSS Grid Layout] Ignore ::first-letter pseudo-element
        https://bugs.webkit.org/show_bug.cgi?id=136625

        Reviewed by Darin Adler.

        According to the spec the ::first-letter pseudo-element do not apply to
        grid containers (neither to flexboxes).

        Fixed issue in RenderBlock::getFirstLetter() that applies to both grids
        and flexboxes. Basically if the grid's or flexbox's container was
        defining the ::first-line pseudo-element and the grid or flexbox itself
        too, the value from the grid or flexbox was being applied to the items.
        Added the proper check to avoid this.

        Added two new tests for grid and modified one flexbox test to cover the
        issue explained above.

        Tests: css3/flexbox/flexbox-ignore-container-firstLetter.html
               fast/css-grid-layout/grid-container-ignore-first-letter.html
               fast/css-grid-layout/grid-item-first-letter-valid.html

        * rendering/RenderBlock.cpp:
        (WebCore::isRenderBlockFlowOrRenderButton): New method refactoring
        similar calls through the source code.
        (WebCore::RenderBlock::firstLineBlock): Use
        isRenderBlockFlowOrRenderButton().
        (WebCore::findFirstLetterBlock): Modify it to use
        isRenderBlockFlowOrRenderButton() in order to include grids and not only
        check flexboxes.
        (WebCore::RenderBlock::getFirstLetter): Use
        isRenderBlockFlowOrRenderButton().
        (WebCore::RenderBlock::updateFirstLetter): Early return if
        firstLetterContainer is null (in the case of flexboxes or grids).

2014-09-09  Benjamin Poulain  <benjamin@webkit.org>

        Add support for :read-write/:read-only matching editable content
        https://bugs.webkit.org/show_bug.cgi?id=136668

        Reviewed by Antti Koivisto.

        This is the second part of the update of :read-write/:read-only to the latest spec
        (http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting.html#selectors).

        The selectors :read-write/:read-only should match elements that are editable. The exact definition is:
        "elements that are editing hosts or editable and are neither input elements nor textarea elements".

        Matching that definition is really easy. It was done by updating HTMLElement's matchesReadWritePseudoClass()
        to consider both contentEditable and designMode.

        The tricky part is making that efficient in all cases. Matching contentEditable is horribly inefficient
        compared to the other primitives. We don't want to execute that for every element.

        Since matchesReadWritePseudoClass() was used by the theming code, that code was adjusted to
        -Avoid calling that on regular HTMLElement, limiting the query to <input> and <textarea> where it is fast.
        -Avoid the call entirely when possible.

        Tests: fast/css/read-only-read-write-contenteditable-basics.html
               fast/css/read-only-read-write-designmode-basics.html
               fast/css/read-only-read-write-webkit-user-modify.html
               fast/selectors/read-only-read-write-contenteditable-basics.html
               fast/selectors/read-only-read-write-contenteditable-svg-foreignObject.html
               fast/selectors/read-only-read-write-designmode-basics.html
               fast/selectors/read-only-read-write-style-update.html

        * html/HTMLElement.cpp:
        (WebCore::contentEditableType):
        This code is a generalization of the code that was in HTMLElement::contentEditable().
        It is used by both matchesReadWritePseudoClass() and contentEditable() to determine
        a valid state from the value of contentEditable.

        (WebCore::HTMLElement::matchesReadWritePseudoClass):
        Per the definition of editable content, we first check if the current element is an editing host,
        if not we look for an editing host. If there are none, test for designMode.

        (WebCore::HTMLElement::contentEditable):

        (WebCore::RenderTheme::isReadOnlyControl):
        The old definition would only match <input> and <textarea>. The code was updated to keep the same
        behavior after matchesReadWritePseudoClass() is udpated. This avoids the performance problem of calling
        matchesReadWritePseudoClass() on regular HTMLElement.

        * platform/ControlStates.h:
        ReadOnlyState was only used by ThemeMac for convertControlStatesToThemeDrawState().
        In turn, convertControlStatesToThemeDrawState() was only used for painting
        "-webkit-inner-spin-button". Buttons are not read-write to begin with.
        The whole code looks like legacy from styling of input elements and was removed.

        Removing ReadOnlyState removes the expensive part of extractControlStatesForRenderer().

        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::readOnlyAttributeChanged):
        * platform/mac/ThemeMac.mm:
        (WebCore::convertControlStatesToThemeDrawState):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::extractControlStatesForRenderer):

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

        [MSE] media/media-source tests broken after r173318
        https://bugs.webkit.org/show_bug.cgi?id=136675

        Reviewed by Eric Carlson.

        Fixes the following tests:
            http/tests/media/media-source/mediasource-play.html
            http/tests/media/media-source/mediasource-remove.html
            media/media-source/media-source-monitor-source-buffers.html
            media/media-source/media-source-overlapping-append-buffered.html   

        In r173318, a for loop was converted to a C++11 loop, but in so doing, left
        pre-initialized, empty values in the beginning of returned Vector, which caused
        the calling algorithm to miscalculate the amount of data buffered by the media
        source.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::activeRanges):

2014-09-09  Takeshi Kurosawa  <taken.spc@gmail.com>

        AX: HTML5 landmark (and related) elements should not be ignored.
        https://bugs.webkit.org/show_bug.cgi?id=135116

        Reviewed by Chris Fleizach.

        Make sure following element should not be ignored in computeAccessibilityIsIgnored
        - header, aside, address, main, nav, article, section
        - dt, dd

        Tests: platform/mac/accessibility/descriptionlist-not-ignored.html
               platform/mac/accessibility/landmark-not-ignored.html

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

2014-09-08  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] RenderGrid methods should take RenderBox references
        https://bugs.webkit.org/show_bug.cgi?id=136630

        Reviewed by Darin Adler.

        RenderGrid has several methods that take pointers to RenderBox
        instances but the body of those methods assumes that the objects
        will never be NULL. We should replace them by references.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::insertItemIntoGrid):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::cachedGridCoordinate):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        * rendering/RenderGrid.h:

2014-09-09  Antti Koivisto  <antti@apple.com>

        Remove unnecessary assert that is getting hit in some scenarios.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::certificateInfo):

2014-09-09  Antti Koivisto  <antti@apple.com>

        Try to fix windows build.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformCertificateInfo):

2014-09-08  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Incorrect layout for multicol element transformed into region
        https://bugs.webkit.org/show_bug.cgi?id=136459

        Reviewed by David Hyatt.

        Until we will support the multicolumn region functionality, a multicolumn element
        that also has flow-from style is not transformed into a region (https://bugs.webkit.org/show_bug.cgi?id=135153).
        However, when a multicolumn element with flow-from style dynamically loses
        its multicolumn style while keeping the flow-from style, we have to transform
        the element into a region by detaching and attaching the associated DOM node,
        in the same way we are proceeding when an element receives a different flow-from style.

        Test: fast/regions/multicol/nested-multicol-into-region-dynamic.html

        * style/StyleResolveTree.cpp:
        (WebCore::Style::determineChange):

2014-09-08  Antti Koivisto  <antti@apple.com>

        Pass certificate info as part of ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=136611

        Reviewed by Darin Adler.

        The current way of passing certificate info separately from ResourceResponse and then jamming it back
        is complex and confusing. This patch makes it a true part of the ResourceResponse.

        With this patch we also only create and pass the certificate info object for the main resource. It is
        a big and complex object and we never look into it for any other resource type.

        * WebCore.exp.in:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):

            Mark initialized for synthetic responses, unitialized for those backed by a platform request.

        (WebCore::ResourceResponseBase::initializeCertificateInfo):

            Calling this pulls the certificate info out from the platform type.
            It shoud only be used for resources that need it.

        (WebCore::ResourceResponseBase::certificateInfo):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformCertificateInfo):
        (WebCore::ResourceResponseBase::platformSuggestedFileName):
        (WebCore::ResourceResponseBase::encode):
        (WebCore::ResourceResponseBase::decode):

            Encode and decode certificate info if it is present.

        * platform/network/cf/ResourceResponse.h:
        * platform/network/mac/CertificateInfo.h:
        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::CertificateInfo):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformCertificateInfo):
        (WebCore::ResourceResponse::setCertificateChain): Deleted.
        (WebCore::ResourceResponse::certificateChain): Deleted.
        * platform/network/soup/ResourceResponse.h:
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::platformCertificateInfo):

2014-09-09  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use C++11 range-based loops in FlowThreadController
        https://bugs.webkit.org/show_bug.cgi?id=136634

        Reviewed by Andrei Bucur.

        No new tests as no new functionality was introduced.

        * 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::updateFlowThreadsIntoMeasureContentPhase):
        (WebCore::FlowThreadController::updateFlowThreadsLayerToRegionMappingsIfNeeded):
        (WebCore::FlowThreadController::updateNamedFlowsLayerListsIfNeeded):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        (WebCore::FlowThreadController::isAutoLogicalHeightRegionsCountConsistent):

2014-09-08  Simon Fraser  <simon.fraser@apple.com>

        Minor refactor in CSSComputedStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=136664

        Reviewed by Darin Adler.

        The "if (length.isPercentNotCalculated()) createValue() else zoomAdjustedPixelValue()"
        pattern occurred a number of times here, so factor into percentageOrZoomAdjustedValue().

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue): l -> length
        (WebCore::percentageOrZoomAdjustedValue):
        (WebCore::getBorderRadiusCornerValues):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::scrollSnapDestination):
        (WebCore::scrollSnapPoints):
        (WebCore::scrollSnapCoordinates):

2014-09-08  Alexey Proskuryakov  <ap@apple.com>

        Application Cache Storage: failed to execute statement "DELETE FROM CacheGroups" error "no such table: CacheGroups"
        https://bugs.webkit.org/show_bug.cgi?id=136647

        Reviewed by Darin Adler.

        * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        Don't try to delete the tables if we can't expect to have them yet.

2014-09-08  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION (r172153): Text drawn with wrong color when second text shadow has zero offset and blur (breaks buttons at aws.amazon.com)
        https://bugs.webkit.org/show_bug.cgi?id=136612

        Reviewed by Darin Adler.

        r172153 was fundamentally broken, and would restore graphics contexts that had never been saved. This patch
        reimplements r172153 by using "continue" to skip loop iterations instead of changing the internal logic of
        the loop.

        In addition, I have refactored InlineTextBox::applyShadowToGraphicsContext() to take an extra boolean
        reference as an out parameter in order to make it obvious it if saved a graphics context that needs
        to be restored. This should make it less likely to make these kinds of mistakes in the future.

        Test: fast/text/empty-shadow-with-color.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::applyShadowToGraphicsContext): Add bool reference out param.
        * rendering/InlineTextBox.h: Ditto.
        * rendering/TextPainter.cpp:
        (WebCore::isEmptyShadow): Change logic to not skip loop iterations on a null shadow.
        (WebCore::paintTextWithShadows): Use continue to skip loop iterations for empty shadows. In addition,
        use the out param in InlineTextBox::applyShadowToGraphicsContext().
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows): Update for new sigurature of
        InlineTextBox::applyShadowToGraphicsContext().

2014-09-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r173402.
        https://bugs.webkit.org/show_bug.cgi?id=136649

        Breaking buildw with error "unable to restore file position to
        0x00000c60 for section __DWARF.__debug_info (errno = 9)"
        (Requested by mlam_ on #webkit).

        Reverted changeset:

        "Move CallFrame and Register inlines functions out of
        JSScope.h."
        https://bugs.webkit.org/show_bug.cgi?id=136579
        http://trac.webkit.org/changeset/173402

2014-09-05  Mark Lam  <mark.lam@apple.com>

        Move CallFrame and Register inlines functions out of JSScope.h.
        <https://webkit.org/b/136579>

        Reviewed by Geoffrey Garen.

        No new tests.

        Added #include of the appropriate *Inlines.h files.  Unlike in
        JavaScriptCore, I #include'd the specific needed *Inlines.h instead of
        JSCInlines.h.  This is done to minimize the need for WebCore to be
        rebuilt when JSC changes are introduced.

        * ForwardingHeaders/interpreter/RegisterInlines.h: Added.
        * bindings/js/JSAudioBufferSourceNodeCustom.cpp:
        * bindings/js/JSAudioTrackCustom.cpp:
        * bindings/js/JSBiquadFilterNodeCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMStringListCustom.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSOscillatorNodeCustom.cpp:
        * bindings/js/JSPannerNodeCustom.cpp:
        * bindings/js/JSPopStateEventCustom.cpp:
        * dom/TreeWalker.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * inspector/CommandLineAPIModule.cpp:
        * inspector/InspectorController.cpp:

2014-09-08  Dean Jackson  <dino@apple.com>

        Separate the Apple media controls module from other ports
        https://bugs.webkit.org/show_bug.cgi?id=136644
        rdar://problem/18270969

        Reviewed by Eric Carlson.

        Make a mediaControlsBase.{js|css} that acts as the base
        class for the EFL and GTK ports (they were using mediaControlsApple).
        Over time, the Apple-specific controls may use more of the
        Base class.

        * Modules/mediacontrols/mediaControlsBase.css: Added.
        * Modules/mediacontrols/mediaControlsBase.js: Added.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::mediaControlsStyleSheet): Load Base rather than Apple.
        (WebCore::RenderThemeEfl::mediaControlsScript): Ditto.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::mediaControlsScript): Ditto.

2014-09-08  Jochen Eisinger  <jochen@chromium.org>

        Always update the referrer header in CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=136642

        Reviewed by Alexey Proskuryakov.

        If a request already includes a referrer header, and the document has
        a non-default referrer policy, it is possible that we have to modify
        the referrer header.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addAdditionalRequestHeaders):

2014-09-08  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove FILTERS flag
        https://bugs.webkit.org/show_bug.cgi?id=136571

        Reviewed by Darin Adler.

        No new tests required, no new functionality.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * dom/DOMImplementation.cpp:
        (WebCore::isSupportedSVG10Feature):
        (WebCore::isSupportedSVG11Feature):
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        * platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h:
        * platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h:
        * platform/graphics/cpu/arm/filters/NEONHelpers.h:
        * platform/graphics/filters/DistantLightSource.cpp:
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEBlend.cpp:
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        * platform/graphics/filters/SourceGraphic.h:
        * platform/graphics/filters/SpotLightSource.cpp:
        * platform/graphics/filters/SpotLightSource.h:
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        (WebCore::writeResources):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGRenderingContext.h:
        (WebCore::SVGRenderingContext::SVGRenderingContext):
        * rendering/svg/SVGResources.cpp:
        (WebCore::targetReferenceFromResource):
        (WebCore::SVGResources::buildCachedResources):
        (WebCore::SVGResources::removeClientFromCache):
        (WebCore::SVGResources::resourceDestroyed):
        (WebCore::SVGResources::buildSetOfResources):
        (WebCore::SVGResources::resetFilter):
        (WebCore::SVGResources::dump):
        * rendering/svg/SVGResources.h:
        (WebCore::SVGResources::filter):
        (WebCore::SVGResources::ClipperFilterMaskerData::ClipperFilterMaskerData):
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::breakCycle):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::enumerationValueForTargetAttribute):
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGComponentTransferFunctionElement.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/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/svgtags.in:

2014-09-08  Simon Fraser  <simon.fraser@apple.com>

        Use enum class for the RunPostLayoutTasks enum
        https://bugs.webkit.org/show_bug.cgi?id=136640

        Reviewed by Dean Jackson.

        Use enum class for RunPostLayoutTasks fixing callers. Add an explanatory comment,
        and add some spacing.

        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        * dom/Document.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        * testing/Internals.cpp:
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks):

2014-09-08  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=136633

        Reviewed by Darin Adler.

        Enum name has already been defined.

        * platform/audio/AudioHardwareListener.h:

2014-09-08  Tim Horton  <timothy_horton@apple.com>

        Remove some unused code in ImageSourceCG
        https://bugs.webkit.org/show_bug.cgi?id=136638

        Reviewed by Dan Bernstein.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        Remove this code. Firstly, it's in a USE(CG) && !PLATFORM(COCOA) && !PLATFORM(WIN)
        block, and that's simply not a thing. Secondly, the referenced bug was fixed in Lion.

2014-09-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce CSS_RULE_TYPE_CASTS, and use it
        https://bugs.webkit.org/show_bug.cgi?id=136628

        Reviewed by Darin Adler.

        As a step to use toFoo, this patch introduces toCSSFooRule(). This will help to detect
        wrong type cast. Additionally some missing type casts are clean up as well.

        No new tests, no behavior changes.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSImportRule.h:
        * css/CSSMediaRule.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateRowsAndAreas):
        * css/CSSRule.h:
        * css/CSSStyleRule.h:
        * css/CSSSupportsRule.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):
        * css/WebKitCSSRegionRule.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asCSSStyleRule):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):

2014-09-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL[WK2] MiniBrowser comes to crash on debug mode
        https://bugs.webkit.org/show_bug.cgi?id=136617

        Reviewed by Csaba Osztrogonác.

        Fix wrong ASSERTION use in applyCursorFromEcoreX().

        * platform/efl/EflScreenUtilities.cpp: Change ASSERT(!window) with *ASSERT(window)*
        (WebCore::applyCursorFromEcoreX):

2014-09-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce toBasicShapeFoo() instead of static_cast<BasicShapeFoo*>
        https://bugs.webkit.org/show_bug.cgi?id=136609

        Reviewed by Darin Adler.

        To use BasicShapeFoo() helps to detect wrong type casting and improve code readability.

        No new tests, no behavior changes.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):
        (WebCore::BasicShapeCircle::blend):
        (WebCore::BasicShapeEllipse::blend):
        (WebCore::BasicShapePolygon::blend):
        (WebCore::BasicShapeInset::blend):
        * rendering/style/BasicShapes.h:

2014-09-06  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Add a site-specific hack to work around "flash on exit" behavior of YouTube.com.
        https://bugs.webkit.org/show_bug.cgi?id=136604

        Reviewed by Eric Carlson.

        YouTube.com will cause a "flash" of the full screen sized <video> element upon exiting full
        screen because the "fullscreenchange" event is fired asynchronously after the exit animation
        completes. Only YouTube sites and embeds, add a site-specific-quirk which runs the "fullscreenchange"
        event synchronously at the end of the exit animation. This causes YouTube's video resizing logic
        to run during the period of time where we've disabled screen updates, instead of immediately
        after.

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

2014-09-06  Darin Adler  <darin@apple.com>

        Make updates suggested by new version of Xcode
        https://bugs.webkit.org/show_bug.cgi?id=136603

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Added COMBINE_HIDPI_IMAGES and
        ENABLE_STRICT_OBJC_MSGSEND as suggested by Xcode upgrade check.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode remove an orphaned item from the file,
        and also updated LastUpgradeCheck.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateTextTrackDisplay): Use #if/#else/#endif instead of
        using #if/return/#endif and leaving code unreachable.
        (WebCore::HTMLMediaElement::configureMediaControls): Ditto.
        (WebCore::HTMLMediaElement::configureTextTrackDisplay): Ditto.
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::supported): Ditto.

2014-09-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: convert DockSide to an enum class
        https://bugs.webkit.org/show_bug.cgi?id=136601

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::requestSetDockSide):
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::requestSetDockSide):

2014-09-06  Antti Koivisto  <antti@apple.com>

        Serialize ResourceResponses using WebKit types
        https://bugs.webkit.org/show_bug.cgi?id=136545

        Fix the failing webarchive tests.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse): Map empty text encoding name to nil NSString.

2014-09-06  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo][Curl] fileExists() incorrectly claims folder does not exist.
        https://bugs.webkit.org/show_bug.cgi?id=136598

        Reviewed by Alex Christensen.

        The fileExists() function will always return false on Windows,
        if the filename parameter ends with a slash or backslash.

        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::setCacheDirectory): Add slash after call to fileExists().

2014-09-06  David Kilzer  <ddkilzer@apple.com>

        New clang warns about boolean checks for |this| pointer in RenderObject debug methods
        <http://webkit.org/b/136599>

        Reviewed by Zalan Bujtas.

        Ignores the following static analyzer warnings:

            Source/WebCore/rendering/RenderObject.cpp:1465:10: error: 'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Werror,-Wundefined-bool-conversion]
                if (!this) {
                    ~^~~~
            Source/WebCore/rendering/RenderObject.cpp:1584:10: error: 'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Werror,-Wundefined-bool-conversion]
                if (!this)
                    ~^~~~

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderObject):
        (WebCore::RenderObject::showRenderSubTreeAndMark):
        Add "#pragma clang" preprocessor macros to ignore this warning
        since the code is only compiled for Debug builds.  Also add a
        pragma for the pragma so older clangs don't complain about an
        unkonwn pragma.

2014-09-06  Antti Koivisto  <antti@apple.com>

        Serialize ResourceResponses using WebKit types
        https://bugs.webkit.org/show_bug.cgi?id=136545

        Reviewed by Alexey Proskuryakov.

        Serialization is faster and we can mostly avoid having NSURLResponses in web process.

        * WebCore.exp.in:
        * platform/network/ResourceLoadTiming.h:
        (WebCore::ResourceLoadTiming::encode):
        (WebCore::ResourceLoadTiming::decode):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::encode):
        (WebCore::ResourceResponseBase::decode):

            Serialize from the WebCore data instead of serializing NSURLResponse.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):

            Synthesize CFURLResponse by creating NSURLResponse on Cocoa platforms so we don't need copy code.
            This has negligible performance impact, NSURLResponse is just a wrapper around CFURLResponse.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):
        (WebCore::ResourceResponse::setCertificateChain):

            Avoid unnecessary NSURLRequest instantiation in debug builds.

2014-09-06  David Kilzer  <ddkilzer@apple.com>

        HTMLElement.cpp does not compile with new clang
        <http://webkit.org/b/136600>

        Reviewed by Chris Fleizach.

        Fixes the following static analyzer warning:

            Source/WebCore/html/HTMLElement.cpp:545:10: error: 'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Werror,-Wundefined-bool-conversion]
                if (!this || !parentNode())
                    ~^~~~

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterText): Remove "!this" check added
        in r75738.  It would only cover up real bugs, and isn't even hit
        in layout tests.

2014-09-06  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Drop evas object cursor support
        https://bugs.webkit.org/show_bug.cgi?id=136324

        Reviewed by Gyuyoung Kim.

        Removed evas object cursor because there are some bugs.
        ewebkit will only support ecore_x_cursor because ewebkit is available with X, now.

        * platform/efl/DefaultTheme/CMakeLists.txt: Removed cursor related code.
        * platform/efl/DefaultTheme/default.edc: Ditto.
        * platform/efl/DefaultTheme/widget/cursor/cursor.edc: Removed.
        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::getEcoreCursor):
        (WebCore::applyCursorFromEcoreX): Renamed applyFallbackCursor.
        (WebCore::createCustomCursor): Added to make custom cursor.
        (WebCore::applyFallbackCursor): Deleted.
        * platform/efl/EflScreenUtilities.h:

2014-09-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r173340 and r173342.
        https://bugs.webkit.org/show_bug.cgi?id=136596

        Broke many tests (Requested by ap on #webkit).

        Reverted changesets:

        "Remove PLATFORM(IOS) from WebCore/editing (Part 3)."
        https://bugs.webkit.org/show_bug.cgi?id=136474
        http://trac.webkit.org/changeset/173340

        "Build fix after r173340."
        http://trac.webkit.org/changeset/173342

2014-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Use WTFString::split(char) in more places
        https://bugs.webkit.org/show_bug.cgi?id=136543

        Reviewed by Sam Weinig.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForPath):
        * mathml/MathMLMencloseElement.cpp:
        (WebCore::MathMLMencloseElement::collectStyleForPresentationAttribute):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::initializeAvailableExtensions):
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::parseExtensions):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillDataObjectFromDropData):
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::loadIndex):

2014-09-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Laying out a TextRun using an SVG font is O(n^2)
        https://bugs.webkit.org/show_bug.cgi?id=136584

        Reviewed by Andreas Kling.

        Caching the version of the run with normalized spaces leads to a 5x speedup on the
        performance test this patch adds.

        Note that SVGFontData::applySVGGlyphSelection() is still unnecesarrily O(n), so more
        work can be done here. In particular, the call to collectGlyphsForString() can likely
        be sped up.

        No new correctness tests because there is no behavior change.
        Performance Test: SVG/SVG-Text.html

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsSpace): Make inline.
        (WebCore::Font::treatAsZeroWidthSpace): Ditto.
        (WebCore::Font::treatAsZeroWidthSpaceInComplexScript): Ditto.
        * platform/graphics/SimpleFontData.h: Add String cache argument.
        * platform/graphics/TextRun.h: Move member variables around for better packing.
        (WebCore::TextRun::TextRun): Ditto.
        * platform/graphics/WidthIterator.cpp: Add String cache argument.
        (WebCore::WidthIterator::glyphDataForCharacter): Ditto.
        (WebCore::WidthIterator::advanceInternal): Create String cache and pass it to
        glyphDataForCharacter.
        * platform/graphics/WidthIterator.h: Add String cache argument.
        * rendering/svg/SVGTextRunRenderingContext.cpp: Ditto.
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter): Ditto.
        * rendering/svg/SVGTextRunRenderingContext.h: Ditto.
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection): Call computeNormalizedSpaces
        to consult with the cache.
        (WebCore::computeNormalizedSpaces): Compute cached String value.
        * svg/SVGFontData.h: Add String cache argument.

2014-09-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r169407): Calls to RenderStyle::getRoundedBorderFor() in computeRoundedRectForBoxShape() still include RenderView pointer
        <http://webkit.org/b/136591>
        <rdar://problem/18143731>

        Reviewed by Simon Fraser.

        In r169407, the RenderView* argument was removed from
        RenderStyle::getRoundedBorderFor().  This argument was not
        removed from these calls in computeRoundedRectForBoxShape(), but
        because getRoundedBorderFor() always returned a reference, and
        because the default for the next argument was true, there was no
        actual change in behavior from this bug.

        No new tests since there is no change in behavior.

        * rendering/shapes/BoxShape.cpp:
        (WebCore::computeRoundedRectForBoxShape): Remove RenderView*
        arguments from calls to getRoundedBorderFor().

2014-09-05  Tim Horton  <timothy_horton@apple.com>

        [iOS] Work around bug 136593 by disabling the PDFDocumentImage live resize optimization there
        https://bugs.webkit.org/show_bug.cgi?id=136594
        rdar://problem/17457013

        Reviewed by Simon Fraser.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::updateCachedImageIfNeeded):
        Disable the optimization on iOS, because bug 136593 rears its head
        most often on iOS because it is more common to have contexts that always
        use low-quality image interpolation on that platform.

2014-09-05  Tim Horton  <timothy_horton@apple.com>

        Doing a navigation on a non-opaque WKWebView can result in an empty layer tree
        https://bugs.webkit.org/show_bug.cgi?id=136590
        <rdar://problem/18234000>

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::setTransparent):
        Avoid scheduling a compositing layer update if the RenderView isn't the
        one associated with this FrameView. This can happen during a navigation,
        before the new Document (and RenderView) is swapped in. This is particularly
        bad in the case of setTransparent because it is called from Frame::createView,
        which is right in the middle of that transition window. If we let the compositing
        layer update go ahead, it can end up detaching the new Document's layer tree,
        and we have no mechanism that would cause it to reattach.

2014-09-05  Enrica Casucci  <enrica@apple.com>

        Remove PLATFORM(IOS) from WebCore/editing (Part 3).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Benjamin Poulain.

        This patch removes the use of PLATFORM(IOS) from TextAffinity.h
        and removes the assumption that EAffinity values match NSSelectionAffinity
        values. It also removes the includes in TextAffinity.h, creating the need to
        include explicitly the files when necessary. It also removes the unnecessary
        use of platform specific types, replacing them with WebCore types.

        * editing/TextAffinity.h:
        (kit): Deleted.
        (core): Deleted.
        * editing/cocoa/HTMLConverter.mm:
        * page/mac/WebCoreFrameView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformSetScrollOrigin):
        * platform/ios/wak/WAKScrollView.mm:
        (-[WAKScrollView setScrollOrigin:updatePositionAtAll:immediately:]):
        (-[WAKScrollView scrollOrigin]):

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

        Unreviewed GTK build fix; include StringPrintStream to pull in toString().

        * html/HTMLMediaElement.h:

2014-09-05  Brady Eidson  <beidson@apple.com>

        Allow pages with unload handlers in the page cache
        <rdar://problem/11084669> and https://bugs.webkit.org/show_bug.cgi?id=136535

        Reviewed by Oliver Hunt.

        This will match what iOS has been doing for some time.

        Updated tests for new behavior.

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):

2014-09-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [SOUP] Implement ResourceResponse::platformSuggestedFilename() when USE(SOUP) is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=136562

        Reviewed by Martin Robinson.

        No new tests, this makes existing tests pass.

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::platformSuggestedFilename):
        Implement ResourceResponse::platformSuggestedFilename() for SOUP after r173272, r173301 and r173305.

2014-09-05  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=136574

        Reviewed by Alex Christensen.

        The ResourceResponse::setSuggestedFilename method is no longer available.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::didReceiveHeader):
        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::didReceiveResponse):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback):
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::platformSuggestedFilename):

2014-09-05  Benjamin Poulain  <benjamin@webkit.org>

        Update the current matching of :read-only and :read-write to the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=136566

        Reviewed by Antti Koivisto.

        WebKit's implementation of :read-only and :read-write dated from 2008 and
        it was based on the web form spec (http://www.w3.org/TR/web-forms-2/).
        That spec is very dead now.

        There are new definitions of :read-only and :read-write in three specs:
        -the HTML living spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting.html#selector-read-only
        -Selectors level 4: http://dev.w3.org/csswg/selectors4/#rw-pseudos
        -CSS 3 UI: http://www.w3.org/TR/css3-ui/

        All the definitions say about the same thing. The definitions of Selector Level 4 and
        CSS 3 UI are very vague and poorly worded. I used the HTML when something was ambiguous.

        In the new definitions, :read-only and :read-write are opposite. It is no longer possible to
        match both selector simultaneously for the same element.
        Consequently, I got rid of Element:matchesReadOnlyPseudoClass(). Matching :read-only is now equivalent
        to :not(:read-write).

        The existing definition of :read-write was matching the spec so I could reuse that.

        There is one more part to the new spec that is not addressed here: the pseudo class :read-write should
        now also match arbitrary editable HTMLElement (e.g. an element with contenteditable). This will be fixed
        in a follow up.

        Tests: fast/css/read-only-read-write-input-basics.html
               fast/css/read-only-read-write-textarea-basics.html
               fast/selectors/read-only-read-write-input-basics.html
               fast/selectors/read-only-read-write-input-in-fieldset.html
               fast/selectors/read-only-read-write-textarea-basics.html
               fast/selectors/read-only-read-write-textarea-in-fieldset.html

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesReadOnlyPseudoClass):
        * dom/Element.cpp:
        (WebCore::Element::matchesReadOnlyPseudoClass): Deleted.
        * dom/Element.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::matchesReadOnlyPseudoClass): Deleted.
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::matchesReadOnlyPseudoClass): Deleted.
        * html/HTMLTextAreaElement.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::matchesReadOnlyPseudoClass): Deleted.
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::matchesReadOnlyPseudoClass): Deleted.
        * html/shadow/SpinButtonElement.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isReadOnlyControl):

2014-09-05  Andreas Kling  <akling@apple.com>

        CTTE: SVGResourcesCache should only allow RenderElements.
        <https://webkit.org/b/136578>

        Only RenderElement subclasses can use SVG resources.
        Codify this by making SVGResourcesCache::m_cache keyed on RenderElement.

        Reviewed by Antti Koivisto.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        (WebCore::removeFromCacheAndInvalidateDependencies):
        * 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::intersectRepaintRectWithResources):
        (WebCore::SVGRenderSupport::filtersForceContainerLayout):
        (WebCore::SVGRenderSupport::pointInClippingArea):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::resourcesCacheFromRenderer):
        (WebCore::SVGResourcesCache::cachedResourcesForRenderer):
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientDestroyed):
        (WebCore::SVGResourcesCache::resourceDestroyed):
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject): Deleted.
        * rendering/svg/SVGResourcesCache.h:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles):

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

        IDB version changed events should have a valid eventType()
        https://bugs.webkit.org/show_bug.cgi?id=136583

        Reviewed by Brady Eidson.

        IDBDatabase::dispatchEvent() asserts that the event type is versionchangeEvent,
        but the version changed event created with an empty event type. Correct this.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onVersionChange):

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

        Remove some PLATFORM(IOS) code in Color.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=136582

        Reviewed by Dan Bates.

        Remove Color::tap which is unused, and remove createCGColorWithDeviceWhite()
        which was only called in one file in WebKit.

        * WebCore.exp.in:
        * platform/graphics/Color.h:
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColorWithDeviceWhite): Deleted.

2014-09-05  Beth Dakin  <bdakin@apple.com>

        ScrollablArea::handleWheelEvent() should return early if the ScrollableArea is not 
        actually scrollable
        https://bugs.webkit.org/show_bug.cgi?id=136558

        Reviewed by Simon Fraser.

        This patch requires adding a new virtual function to ScrollableArea called 
        isScrollableOrRubberbandable(). Unfortunately, there is already a virtual function 
        of that name that exists on RenderLayerModelObject, which is only problematic 
        because RenderListBox inherits from both RenderLayerModelObject and 
        ScrollableArea. This patch resolves that conflict in the simplest way, by re-
        naming the RenderLayerModelObject version of the function to 
        isScrollableOrRubberbandableBox(). It’s a little unfortunate, but simpler than the 
        other solutions I came up with.

        New ScrollableArea virtual function.
        * page/FrameView.cpp:
        (WebCore::FrameView::isScrollableOrRubberbandable):
        * page/FrameView.h:

        The point of the whole patch! Return early if you can’t scroll or rubber band.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleWheelEvent):

        New ScrollableArea virtual function.
        * platform/ScrollableArea.h:
        * platform/win/PopupMenuWin.h:

        Re-name.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isScrollableOrRubberbandableBox):
        (WebCore::RenderBox::isScrollableOrRubberbandable): Deleted.
        * rendering/RenderBox.h:

        Implement new ScrollableArea virtual function, and adapt to the re-name.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isScrollableOrRubberbandable):
        (WebCore::RenderLayer::hasScrollableOrRubberbandableAncestor):
        * rendering/RenderLayer.h:

        Re-name.
        * rendering/RenderLayerModelObject.h:
        (WebCore::RenderLayerModelObject::isScrollableOrRubberbandableBox):
        (WebCore::RenderLayerModelObject::isScrollableOrRubberbandable): Deleted.

        Implement ScrollableArea virtual function.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isScrollableOrRubberbandable):
        * rendering/RenderListBox.h:

        Re-name.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::isScrollableOrRubberbandableBox):
        (WebCore::RenderView::isScrollableOrRubberbandable): Deleted.
        * rendering/RenderView.h:

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

        Refactoring: make MediaTime the primary time type for audiovisual times.
        https://bugs.webkit.org/show_bug.cgi?id=133579

        Reviewed by Eric Carlson.

        In order to limit the number of floating-point rounding errors for media systems which
        can make use of rational time objects.

        Add some convenience methods to convert between QTTime and MediaTime.
        * platform/graphics/mac/MediaTimeQTKit.h: Added.
        * platform/graphics/mac/MediaTimeQTKit.mm: Added.
        (WebCore::toMediaTime):
        (WebCore::toQTTime):

        Rename MediaTimeMac -> MediaTimeAVFoundation:
        * platform/graphics/avfoundation/MediaTimeAVFoundation.cpp: Renamed from Source/WebCore/platform/mac/MediaTimeMac.cpp.
        (WebCore::toMediaTime):
        (WebCore::toCMTime):
        * platform/graphics/avfoundation/MediaTimeAVFoundation.h: Renamed from Source/WebCore/platform/mac/MediaTimeMac.h.

        Use MediaTime instead of double:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::duration):
        (WebCore::MediaSource::currentTime):
        (WebCore::MediaSource::buffered):
        (WebCore::MediaSource::setDuration):
        (WebCore::MediaSource::activeRanges):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::remove):
        (WebCore::SourceBuffer::removeCodedFrames):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::hasCurrentTime):
        (WebCore::SourceBuffer::hasFutureTime):
        (WebCore::SourceBuffer::canPlayThrough):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::JSDataCueConstructor::constructJSDataCue):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        (WebCore::ValueToString<MediaTime>::string):
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::MediaFragmentURIParser):
        (WebCore::MediaFragmentURIParser::startTime):
        (WebCore::MediaFragmentURIParser::endTime):
        (WebCore::MediaFragmentURIParser::parseTimeFragment):
        (WebCore::MediaFragmentURIParser::parseNPTFragment):
        (WebCore::MediaFragmentURIParser::parseNPTTime):
        (WebCore::MediaFragmentURIParser::invalidTimeValue): Deleted.
        * html/MediaFragmentURIParser.h:
        * html/TimeRanges.h:
        (WebCore::TimeRanges::ranges):
        * html/track/DataCue.cpp:
        (WebCore::DataCue::DataCue):
        * html/track/DataCue.h:
        (WebCore::DataCue::create):
        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::addDataCue):
        (WebCore::InbandDataTextTrack::updateDataCue):
        (WebCore::InbandDataTextTrack::removeDataCue):
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::updateCueFromCueData):
        (WebCore::InbandGenericTextTrack::addGenericCue):
        (WebCore::InbandGenericTextTrack::removeGenericCue):
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::startTimeVariance):
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        (WebCore::TextTrack::hasCue):
        * html/track/TextTrack.h:
        (WebCore::TextTrack::startTimeVariance):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::create):
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::setStartTime):
        (WebCore::TextTrackCue::setEndTime):
        (WebCore::TextTrackCue::hasEquivalentStartTime):
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::startTime):
        (WebCore::TextTrackCue::endTime):
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::TextTrackCueGeneric):
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::add):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::VTTCue):
        (WebCore::VTTCue::markFutureAndPastNodes):
        (WebCore::VTTCue::updateDisplayTree):
        * html/track/VTTCue.h:
        (WebCore::VTTCue::create):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::WebVTTParser):
        (WebCore::WebVTTParser::resetCueValues):
        (WebCore::WebVTTParser::collectTimeStamp):
        (WebCore::WebVTTTreeBuilder::constructTreeFromToken):
        * html/track/WebVTTParser.h:
        (WebCore::WebVTTCueData::startTime):
        (WebCore::WebVTTCueData::setStartTime):
        (WebCore::WebVTTCueData::endTime):
        (WebCore::WebVTTCueData::setEndTime):
        (WebCore::WebVTTCueData::WebVTTCueData): Deleted.
        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::startTime):
        (WebCore::GenericCueData::setStartTime):
        (WebCore::GenericCueData::endTime):
        (WebCore::GenericCueData::setEndTime):
        (WebCore::GenericCueData::GenericCueData):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::duration):
        (WebCore::MediaPlayer::startTime):
        (WebCore::MediaPlayer::initialTime):
        (WebCore::MediaPlayer::currentTime):
        (WebCore::MediaPlayer::seekWithTolerance):
        (WebCore::MediaPlayer::seek):
        (WebCore::MediaPlayer::maxTimeSeekable):
        (WebCore::MediaPlayer::minTimeSeekable):
        (WebCore::MediaPlayer::mediaTimeForTimeValue):
        (WebCore::MediaPlayer::totalFrameDelay):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::durationMediaTime):
        (WebCore::MediaPlayerPrivateInterface::currentMediaTime):
        (WebCore::MediaPlayerPrivateInterface::seek):
        (WebCore::MediaPlayerPrivateInterface::seekWithTolerance):
        (WebCore::MediaPlayerPrivateInterface::startTime):
        (WebCore::MediaPlayerPrivateInterface::initialTime):
        (WebCore::MediaPlayerPrivateInterface::seekable):
        (WebCore::MediaPlayerPrivateInterface::maxMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateInterface::minMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateInterface::mediaTimeForTimeValue):
        (WebCore::MediaPlayerPrivateInterface::totalFrameDelay):
        (WebCore::MediaPlayerPrivateInterface::startTimeDouble): Deleted.
        (WebCore::MediaPlayerPrivateInterface::maxTimeSeekableDouble): Deleted.
        (WebCore::MediaPlayerPrivateInterface::mediaTimeForTimeValueDouble): Deleted.
        * platform/graphics/MediaSourcePrivateClient.h:
        * platform/graphics/TrackPrivateBase.h:
        (WebCore::TrackPrivateBase::startTimeVariance):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        (WebCore::InbandMetadataTextTrackPrivateAVF::InbandMetadataTextTrackPrivateAVF):
        (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
        (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h:
        (WebCore::IncompleteMetaDataCue::IncompleteMetaDataCue):
        (WebCore::IncompleteMetaDataCue::startTime):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue):
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::durationMediaTime):
        (WebCore::MediaPlayerPrivateAVFoundation::seek):
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance):
        (WebCore::MediaPlayerPrivateAVFoundation::maxMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundation::minMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundation::maxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundation::didLoadingProgress):
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::seekableTimeRangesChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::timeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::didEnd):
        (WebCore::MediaPlayerPrivateAVFoundation::invalidateCachedDuration):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::extraMemoryCost):
        (WebCore::MediaPlayerPrivateAVFoundation::duration): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundation::maxTimeSeekableDouble): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundation::minTimeSeekable): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::time):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTime):
        (WebCore::MediaPlayerPrivateAVFoundationCF::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTime):
        (WebCore::MediaPlayerPrivateAVFoundationCF::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMinTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationCF::mediaTimeForTimeValue): Deleted.
        (WebCore::AVFWrapper::seekToTime): Deleted.
        (WebCore::LegibleOutputData::LegibleOutputData): Deleted.
        (WebCore::AVFWrapper::createImageForTimeInRect): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMinTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationCF::mediaTimeForTimeValue): Deleted.
        (WebCore::AVFWrapper::seekToTime): Deleted.
        (WebCore::LegibleOutputData::LegibleOutputData): Deleted.
        (WebCore::AVFWrapper::createImageForTimeInRect): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::mediaTimeForTimeValue):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::durationDidChange):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationMediaTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initialTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::maxMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::minMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startTimeDouble): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::maxTimeSeekableDouble): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::minTimeSeekable): Deleted.
        * platform/graphics/avfoundation/objc/OutOfBandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::addDataCue):
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::addDataCue):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection):
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry):
        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection):
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::maxValueForTimeRanges):
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit):
        (WebCore::MediaPlayerPrivateQTKit::durationMediaTime):
        (WebCore::MediaPlayerPrivateQTKit::currentMediaTime):
        (WebCore::MediaPlayerPrivateQTKit::seek):
        (WebCore::MediaPlayerPrivateQTKit::doSeek):
        (WebCore::MediaPlayerPrivateQTKit::cancelSeek):
        (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
        (WebCore::MediaPlayerPrivateQTKit::seeking):
        (WebCore::MediaPlayerPrivateQTKit::setPreservesPitch):
        (WebCore::MediaPlayerPrivateQTKit::buffered):
        (WebCore::MediaPlayerPrivateQTKit::maxMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateQTKit::maxMediaTimeLoaded):
        (WebCore::MediaPlayerPrivateQTKit::didLoadingProgress):
        (WebCore::MediaPlayerPrivateQTKit::updateStates):
        (WebCore::MediaPlayerPrivateQTKit::timeChanged):
        (WebCore::MediaPlayerPrivateQTKit::didEnd):
        (WebCore::MediaPlayerPrivateQTKit::maxMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateQTKit::maxMediaTimeLoaded):
        (WebCore::MediaPlayerPrivateQTKit::createQTTime): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::duration): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::currentTime): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::maxTimeSeekable): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::maxTimeLoaded): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::mediaTimeForTimeValue): Deleted.
        * platform/mac/PlatformClockCM.mm:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::maxMediaTimeSeekable):
        (WebCore::MockMediaPlayerMediaSource::currentMediaTime):
        (WebCore::MockMediaPlayerMediaSource::durationMediaTime):
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance):
        (WebCore::MockMediaPlayerMediaSource::totalFrameDelay):
        (WebCore::MockMediaPlayerMediaSource::maxTimeSeekableDouble): Deleted.
        (WebCore::MockMediaPlayerMediaSource::currentTimeDouble): Deleted.
        (WebCore::MockMediaPlayerMediaSource::durationDouble): Deleted.
        * 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):

2014-09-05  Antti Koivisto  <antti@apple.com>

        REGRESSION(r173272): Two blob tests failing on WK1
        https://bugs.webkit.org/show_bug.cgi?id=136573

        Reviewed by Alexey Proskuryakov.

        http/tests/fileapi/blob-url-in-subframe.html
        http/tests/security/mixedContent/blob-url-in-iframe.html

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):

            No need to set this twice.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse):

            Also test that it is an HTTP URL before using NSHTTPURLResponse. Blobs create non-HTTP URLs with status codes.
            Pass the accidentally lost expected content length.

2014-09-05  Zalan Bujtas  <zalan@apple.com>

        Move computeInlinePreferredLogicalWidths() from RenderBlock to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=136461

        Reviewed by Darin Adler.

        This patch enables us to go from const_cast<RenderBlockFlow*>(this)->computeInlinePreferredLogicalWidths()
        to computeInlinePreferredLogicalWidths().

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::InlineMinMaxIterator::endOfInline): Deleted.
        (WebCore::InlineMinMaxIterator::next): Deleted.
        (WebCore::getBPMWidth): Deleted.
        (WebCore::getBorderPaddingMargin): Deleted.
        (WebCore::stripTrailingSpace): Deleted.
        (WebCore::preferredWidth): Deleted.
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths):
        (WebCore::InlineMinMaxIterator::initial): The (parent == current) condition was used as 'initial' state before.
        and in order to make computeInlinePreferredLogicalWidths const, InlineMinMaxIterator() needs to take const RenderObject*.
        (WebCore::InlineMinMaxIterator::next):
        (WebCore::getBPMWidth):
        (WebCore::getBorderPaddingMargin):
        (WebCore::stripTrailingSpace):
        (WebCore::preferredWidth):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths):
        * rendering/RenderBlockFlow.h:

2014-09-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, build fix for EFL and GTK ports since r173272.

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessageHeaders):

2014-09-04  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Speculative build fix. Add platformSuggestedFilename() to all the ResourceResponse header files.

        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::platformSuggestedFilename):
        * platform/network/soup/ResourceResponse.h:
        * platform/network/win/ResourceResponse.h:
        (WebCore::ResourceResponse::platformSuggestedFilename):

2014-09-04  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Another speculative build fix after r173272. Add a stub implementation for
        ResourceResponse::platformSuggestedFilename(). Filed bug 136562 for proper fix.

        * platform/network/soup/ResourceResponseSoup.cpp:
        (ResourceResponse::platformSuggestedFilename):

2014-09-04  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Speculative EFL and GTK build fix after r173272. Remove the filename argument
        from the various ResourceResponse constructors.

        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/win/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2014-09-04  Simon Fraser  <simon.fraser@apple.com>

        border-radius should not force layer backing store
        https://bugs.webkit.org/show_bug.cgi?id=136555

        Reviewed by Dean Jackson.
        
        Border-radius is not a reason to allocate backing store; it's not relevant unless
        we also have a border or background, and hasBoxDecorations() already checks for that.
        
        With that gone, we can now use renderer.hasBoxDecorations() (which also checks for
        a background), but it doesn't check for outlines, so do that in addition.

        Test: compositing/backing/border-radius-no-backing.html

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

2014-09-04  Simon Fraser  <simon.fraser@apple.com>

        CSS filter on a compositing layer should not cause unncessary backing store allocation
        https://bugs.webkit.org/show_bug.cgi?id=136557

        Reviewed by Dean Jackson.
        
        Remove the style.hasFilter() check from hasBoxDecorations(), since filters aren't
        a box decoration. This allows creation of simple container layers with composited filters.

        Test: compositing/backing/filter-no-backing.html

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

2014-09-04  Simon Fraser  <simon.fraser@apple.com>

        Improve the logic for compositing backing store avoidance
        https://bugs.webkit.org/show_bug.cgi?id=136556

        Reviewed by Dean Jackson.
        
        Avoid backing store allocation in more cases by improving the logic that detects
        whether a RenderLayer has any painted, non-layer descendent renderers.
        
        Rename RenderLayer::hasNonEmptyChildRenderers() to hasPaintingNonLayerDescendants(),
        and make it recur 3 levels deep, walking child lists of up to 20 siblings looking
        for renderers that paint anything. Any renderer with box decorations paints;
        replaced elements paint, and non-whitespace text nodes paint. We can avoid
        making backing store when whitespace nodes are present only when user-select is none,
        since we have to ensure that there's backing store to paint the selection into.

        Tests: compositing/backing/inline-block-no-backing.html
               compositing/backing/whitespace-nodes-no-backing.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasNonEmptyChildRenderers): Call the recursive hasPaintingNonLayerDescendants().
        (WebCore::RenderLayer::hasBoxDecorationsOrBackground):
        (WebCore::RenderLayer::isVisuallyNonEmpty): Do the cheap tests first. Use isRenderReplaced()
        rather than isReplaced(), since the latter includes inline-blocks.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration): Don't run the isSimpleContainerCompositingLayer()
        logic in the root layer, since it always wants backing store.
        (WebCore::RenderLayerBacking::updateAfterDescendents): Ditto.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): isReplaced() includes
        inline-block, so use isRenderReplaced() instead.

2014-09-04  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the iOS build after <http://trac.webkit.org/changeset/173258>
        (https://bugs.webkit.org/show_bug.cgi?id=136494)

        Use ENABLE_TOUCH_EVENT instead of ENABLE(TOUCH_EVENT) as the latter isn't available
        to some clients of this private header.

        * platform/ios/wak/WAKResponder.h:

2014-09-04  Roger Fong  <roger_fong@apple.com>

        Increase number of maximum active WebGL contexts.
        https://bugs.webkit.org/show_bug.cgi?id=136551.
        <rdar://problem/18236425>

        Reviewed by Brent Fulgham.

        Test covered by Khronos conformance test:
        webgl/1.0.2/conformance/context/context-creation-and-destruction.html

        * platform/graphics/mac/GraphicsContext3DMac.mm:

2014-09-04  Roger Fong  <roger_fong@apple.com>

        Clicking on a select element should never hide the popup menu.
        https://bugs.webkit.org/show_bug.cgi?id=136548.
        <rdar://problem/10215926>

        Reviewed by Simon Fraser.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        Never call hidePopup as a result of a click on a select element.
        The only way you can properly hide a popup is to click again or lose focus on the popup itself.

2014-09-04  Enrica Casucci  <enrica@apple.com>

        Remove PLATFORM(IOS) from WebCore/editing (Part 2).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Tim Horton.

        Removing some more PLATFORM(IOS) from the editing code.
        Most of these changes are fixes that were made for IOS but never merged
        to OpenSource.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        * editing/ios/EditorIOS.mm: No need for platform guard, this file is not built for Mac.

2014-09-03  Andy Estes  <aestes@apple.com>

        [Cocoa] Some WebKitLegacy headers migrated from WebCore incorrectly contain WEBCORE_EXPORT
        https://bugs.webkit.org/show_bug.cgi?id=136521

        Reviewed by Anders Carlsson.

        * platform/ios/wak/WebCoreThread.h: Stopped defining WEBCORE_EXPORT.

2014-09-03  David Hyatt  <hyatt@apple.com>

        Initial letters should clear one another.
        https://bugs.webkit.org/show_bug.cgi?id=136514

        Reviewed by Simon Fraser.

        Added fast/css-generated-content/initial-letter-clearance.html.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        Compute the required clearance and add it both to the block's logical height
        and to the logical top offset of the float.

        (WebCore::RenderBlockFlow::lowestInitialLetterLogicalBottom):
        * rendering/RenderBlockFlow.h:
        A new method for determining the lowest floating initial letter.

2014-09-04  Joseph Pecoraro  <pecoraro@apple.com>

        Use WTFString::find(char) in more places
        https://bugs.webkit.org/show_bug.cgi?id=136541

        Reviewed by Daniel Bates.

        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::queryKeysAndValues):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodedSnippetForAttribute):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::parse):

2014-09-04  Antti Koivisto  <antti@apple.com>

        Try to fix iOS build.

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

2014-09-04  Maciej Stachowiak  <mjs@apple.com>

        Remove WebCoreSystemInterface glue for otherwise unused WKSI calls
        https://bugs.webkit.org/show_bug.cgi?id=136527

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        * WebCore.order:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2014-09-04  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r172832): Poor 2-finger scrolling performance at theverge.com articles 
        (all tiles repaint)
        https://bugs.webkit.org/show_bug.cgi?id=136433
        -and corresponding-
        rdar://problem/18193942

        Reviewed by Tim Horton.

        We should ensure that we are only setting scroll elasticity for layers that return 
        true for scrollsOverflow(). When overflow:scroll is set on the root element, we 
        wound up setting the ScrollElasticity for the root, which messed up with the 
        special way that the root is meant to scroll. Even though overflow:scroll has been 
        set on the root, scrollsOverflow() is still false because we knew not to set 
        hasOverflowClip() since it’s the root, which is why this check works.  
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):

        Really, we should have never even called RenderLayer::setHasVerticalScrollbar or 
        RenderLayer::setHasHorizontalScrollbar since it’s wrong to be creating a scrollbar 
        on RenderLayer for the root. We should make sure, in addition to the other 
        requirements consulted, that the renderer has an overflow clip before we create 
        the scrollbars.
        (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):

2014-09-04  Antti Koivisto  <antti@apple.com>

        Remove ResourceResponse::m_suggestedFilename
        https://bugs.webkit.org/show_bug.cgi?id=136534

        Reviewed by Alexey Proskuryakov.

        This will simplify things.

        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::create):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        (WebCore::BlobResourceHandle::notifyResponseOnError):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::addHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):

            Remove AllFields initialization. It was only used to get m_suggestedFilename.
            Rename CommonAndUncommonFields to AllFields

        (WebCore::ResourceResponseBase::setSuggestedFilename): Deleted.

            No more setter.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformSuggestedFileName):

            Get the suggested filename from the platform class on-demand.

        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

            Remove never-used file name constructor parameter.

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

            Synthesize HTTP response properly so it can hold Content-Disposition for file name (and other headers).

        (WebCore::ResourceResponse::platformLazyInit):

            Don't pull the suggested filename anymore.

        (WebCore::ResourceResponse::platformSuggestedFilename):

            Get the suggested name from the (possibly synthetic) NSURLRequest.

2014-09-04  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove CSS_FILTERS flag
        https://bugs.webkit.org/show_bug.cgi?id=136529

        Reviewed by Dirk Schulze.

        No new tests, no behaviour changed.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * WebCore.exp.in:
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFilterImageValue.cpp:
        * css/CSSFilterImageValue.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::isFixedSize):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        (WebCore::CSSImageGeneratorValue::isPending):
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque):
        (WebCore::CSSImageGeneratorValue::loadSubimages):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGeneratedImage):
        (WebCore::CSSParser::parseFilterImage):
        (WebCore::CSSParser::parseFilter):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::hasFailedOrCanceledSubresources):
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::generatedOrPendingFromValue):
        (WebCore::StyleResolver::loadPendingResources):
        * css/StyleResolver.h:
        * css/WebKitCSSFilterValue.cpp:
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSFilterValue.idl:
        * loader/cache/CachedSVGDocumentReference.cpp:
        * loader/cache/CachedSVGDocumentReference.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        * page/animation/AnimationBase.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter):
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::reset):
        (WebCore::ImplicitAnimation::checkForMatchingFilterFunctionLists):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::checkForMatchingFilterFunctionLists):
        * page/animation/KeyframeAnimation.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::validateFilterOperations):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::applyFilterAnimation):
        (WebCore::GraphicsLayerAnimation::applyInternal):
        * platform/graphics/GraphicsLayerAnimation.h:
        * platform/graphics/IntRectExtent.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::propertyIdToString):
        (WebCore::supportsAcceleratedFilterAnimations):
        (WebCore::GraphicsLayerCA::filtersCanBeComposited):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::setFilters):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateFilters):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimationMac::setFromValue):
        (PlatformCAAnimationMac::setToValue):
        (PlatformCAAnimationMac::setValues):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::animatedFilterPropertyName):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::clone):
        (PlatformCALayerMac::filtersCanBeComposited):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimationWin::setFromValue):
        (PlatformCAAnimationWin::setToValue):
        (PlatformCAAnimationWin::setValues):
        * platform/graphics/ca/win/PlatformCAAnimationWin.h:
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        (PlatformCAFilters::animatedFilterPropertyName):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::clone):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::GraphicsLayerTextureMapper::setFilters):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setAnimatedFilters):
        (WebCore::TextureMapperLayer::computeOverlapRegions):
        (WebCore::TextureMapperLayer::paintIntoSurface):
        (WebCore::TextureMapperLayer::setFilters):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::hasFilters):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeFilters):
        (WebCore::CoordinatedGraphicsLayer::setFilters):
        (WebCore::CoordinatedGraphicsLayer::syncFilters):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerFiltersIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * rendering/FilterEffectRenderer.cpp:
        * rendering/FilterEffectRenderer.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasFilter): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateFilters):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        (WebCore::RenderLayerBacking::graphicsLayerToCSSProperty):
        (WebCore::RenderLayerBacking::cssToGraphicsLayerProperty):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        (WebCore::RenderLayerCompositor::requiresCompositingForFilters):
        * rendering/RenderLayerFilterInfo.cpp:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleWillChange):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::repaintUsingContainer):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleFilterData.cpp:
        * rendering/style/StyleFilterData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::hasFilters):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientLayersForInvalidation):

2014-09-04  Pratik Solanki  <psolanki@apple.com>

        Remove iOS specific disk image cache
        https://bugs.webkit.org/show_bug.cgi?id=136517

        Reviewed by Antti Koivisto.

        Disk image cache code unnecessarily complicates SharedBuffer implementation. We can remove
        this now since we don't enable it in WebKit2 on iOS.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::isUsingDiskImageCache): Deleted.
        * loader/ResourceBuffer.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::canUseDiskImageCache): Deleted.
        (WebCore::CachedImage::useDiskImageCache): Deleted.
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::isUsingDiskImageCache): Deleted.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::canUseDiskImageCache): Deleted.
        (WebCore::CachedResource::useDiskImageCache): Deleted.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::TypeStatistic::addResource):
        (WebCore::MemoryCache::dumpStats):
        (WebCore::MemoryCache::dumpLRULists):
        (WebCore::MemoryCache::flushCachedImagesToDisk): Deleted.
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::TypeStatistic::TypeStatistic):
        * loader/ios/DiskImageCacheClientIOS.h: Removed.
        * loader/ios/DiskImageCacheIOS.h: Removed.
        * loader/ios/DiskImageCacheIOS.mm: Removed.
        * platform/Logging.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::~SharedBuffer):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::buffer):
        (WebCore::SharedBuffer::getSomeData):
        (WebCore::SharedBuffer::isAllowedToBeMemoryMapped): Deleted.
        (WebCore::SharedBuffer::allowToBeMemoryMapped): Deleted.
        (WebCore::SharedBuffer::failedMemoryMap): Deleted.
        (WebCore::SharedBuffer::markAsMemoryMapped): Deleted.
        (WebCore::SharedBuffer::memoryMappedNotificationCallbackData): Deleted.
        (WebCore::SharedBuffer::memoryMappedNotificationCallback): Deleted.
        (WebCore::SharedBuffer::setMemoryMappedNotificationCallback): Deleted.
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::isMemoryMapped): Deleted.
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/mac/SharedBufferMac.mm:
        (-[WebCoreSharedBufferData length]):
        (-[WebCoreSharedBufferData bytes]):
        (WebCore::SharedBuffer::createCFData):
        (-[WebCoreSharedBufferData initWithMemoryMappedSharedBuffer:]): Deleted.

2014-09-04  Brian J. Burg  <burg@cs.washington.edu>

        LegacyProfiler: ProfileNodes should be used more like structs
        https://bugs.webkit.org/show_bug.cgi?id=136381

        Reviewed by Timothy Hatcher.

        * inspector/ScriptProfileNode.idl: Remove an unused property.

2014-09-04  Renato Nagy  <rnagy@inf.u-szeged.hu>

        Remove Qt cruft: MIMESniffing.cpp and MIMESniffing.h
        https://bugs.webkit.org/show_bug.cgi?id=136528

        Reviewed by Alexey Proskuryakov.

        * platform/network/MIMESniffing.cpp: Removed.
        * platform/network/MIMESniffing.h: Removed.

2014-09-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce CSS_BASIC_SHAPES_TYPE_CASTS, and use it
        https://bugs.webkit.org/show_bug.cgi?id=136403

        Reviewed by Daniel Bates.

        toCSSBasicShapeFoo() will help to detect wrong type casting. So this patch generates it, and use it
        instead of static_cast<const CSSBasicShapeFoo*>().

        No new tests no behavior changes.

        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::CSSBasicShapeInset::equals):
        * css/CSSBasicShapes.h:

2014-09-04  Daniel Bates  <dabates@apple.com>

        [iOS] Make iOS build when ENABLE_TOUCH_EVENT and ENABLE_IOS_TOUCH_EVENTS disabled
        https://bugs.webkit.org/show_bug.cgi?id=136494

        Reviewed by Andy Estes.

        * WebCore.exp.in: Add ENABLE(IOS_TOUCH_EVENTS) and ENABLE(TOUCH_EVENTS) guards. Also, sort this file using
        the script Tools/Scripts/sort-export-file.
        * bindings/js/JSDocumentCustom.cpp: Add ENABLE(TOUCH_EVENTS)-guard around headers JSTouch.h and JSTouchList.h.
        * page/ios/WebEventRegion.mm: Substitute ENABLE(IOS_TOUCH_EVENTS) for ENABLE(TOUCH_EVENTS) since this
        code is specific to the iOS touch machinery.
        * page/scrolling/ScrollingCoordinator.cpp: Add ENABLE(IOS_TOUCH_EVENTS) and ENABLE(TOUCH_EVENTS) guards. 
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion): Substitute ENABLE(IOS_TOUCH_EVENTS) for PLATFORM(IOS).
        * platform/ios/ScrollAnimatorIOS.h: Add ENABLE(TOUCH_EVENTS) guard.
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimatorIOS::ScrollAnimatorIOS): Ditto.
        * platform/ios/wak/WAKResponder.h: Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Add ENABLE(IOS_TOUCH_EVENTS) guard.
        (WebCore::RenderLayer::~RenderLayer): Substitute ENABLE(IOS_TOUCH_EVENTS) for PLATFORM(IOS) since this
        code is specific to the iOS touch machinery.
        * rendering/RenderLayer.h: Add ENABLE(IOS_TOUCH_EVENTS) guard.

2014-09-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r173240) [GTK] Debug build broken.

        Unreviewed build fix after r173240.

        * dom/EventListenerMap.h: Add missing include.

2014-09-04  Dan Bernstein  <mitz@apple.com>

        Get rid of HIGH_DPI_CANVAS leftovers
        https://bugs.webkit.org/show_bug.cgi?id=136491

        Reviewed by Benjamin Poulain.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Removed m_deviceScaleFactor initializer.
        (WebCore::HTMLCanvasElement::reset): Removed checking if the scale factor has changed and
        updating m_deviceScaleFactor.
        (WebCore::HTMLCanvasElement::convertLogicalToDevice): Removed scaling by the device scale
        factor.
        (WebCore::HTMLCanvasElement::convertDeviceToLogical): Ditto.
        (WebCore::HTMLCanvasElement::createImageBuffer): Replaced m_deviceScaleFactor with a literal
        1.
        (WebCore::HTMLCanvasElement::targetDeviceScaleFactor): Deleted.
        * html/HTMLCanvasElement.h: Removed m_deviceScaleFactor member variable and its getter.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::putImageData): Removed scaling by the device scale
        factor.
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::webkitBackingStorePixelRatio): Changed to return 1.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D): Replaced deviceScaleFactor() with 1.
        (WebCore::WebGLRenderingContext::texSubImage2D): Ditto.

2014-09-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        XMLHttpRequest always defaults Content-Type to application/xml, while it should depend on data type
        https://bugs.webkit.org/show_bug.cgi?id=11049

        Reviewed by Darin Adler.

        Updated default mime type when sending text (changed from application/xml to text/plain;charset=UTF-8)
        Updated default mime type when sending document (set to application/xml;charset=UTF-8 for XML documents and text/html;charset=UTF-8 for HTML documents)

        Test: http/tests/xmlhttprequest/post-content-type-document.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): updating default Content-Type valuess.

2014-09-02  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: fix prefixes for subclasses of JSC::ConsoleClient
        https://bugs.webkit.org/show_bug.cgi?id=136476

        Reviewed by Timothy Hatcher.

        No new tests. No behavior changed.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::logError):
        * dom/Document.cpp:
        (WebCore::Document::addConsoleMessage):
        (WebCore::Document::addMessage):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::muteConsole):
        (WebCore::PageDebuggerAgent::unmuteConsole):
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::muteConsole):
        (WebCore::PageRuntimeAgent::unmuteConsole):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::console):
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::printErrorMessage):
        (WebCore::DOMWindow::pageConsole): Deleted.
        * page/DOMWindow.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/PageConsoleClient.cpp: Renamed from Source/WebCore/page/PageConsole.cpp.
        * page/PageConsoleClient.h: Renamed from Source/WebCore/page/PageConsole.h.
        * testing/Internals.cpp:
        (WebCore::Internals::consoleProfiles):
        * testing/Internals.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        (WebCore::docLoaderFunc):

2014-09-03  Maciej Stachowiak  <mjs@apple.com>

        Fix a few leftovers from removing MIME-related WKSI usage
        https://bugs.webkit.org/show_bug.cgi?id=136513

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        * WebCore.order:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.mm:

2014-09-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Text caret changes to color of text in Mail and Notes
        https://bugs.webkit.org/show_bug.cgi?id=135904

        Reviewed by Simon Fraser.

        Consult with the background color of spans inside editable divs to determine what color
        the caret should be.

        Test: editing/caret/color-span-inside-editable.html

        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::paintCaret):

2014-09-03  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build after r173230

        * WebCore.exp.in:

2014-09-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove unnecessary function from TextPainter
        https://bugs.webkit.org/show_bug.cgi?id=136497

        Reviewed by Simon Fraser.

        Function is never called.

        No new tests because there is no behavior change.

        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextInContext): Deleted.
        * rendering/TextPainter.h:

2014-09-03  Anders Carlsson  <andersca@apple.com>

        Don't use DEPRECATED_DEFINE_STATIC_LOCAL for mutexes
        https://bugs.webkit.org/show_bug.cgi?id=136510

        Reviewed by Andreas Kling.

        Mutexes are intended to be used from multiple threads, and DEPRECATED_DEFINE_STATIC_LOCAL is not thread safe.

        * bindings/objc/DOMInternal.mm:
        (wrapperCacheLock):
        (getDOMWrapper):
        (addDOMWrapper):
        (removeDOMWrapper):
        Use LazyNeverDestroyed + std::call_once, and switch the mutex over to an std::mutex.

        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::assertNoActiveIterators):
        (WebCore::EventListenerIterator::EventListenerIterator):
        (WebCore::EventListenerIterator::~EventListenerIterator):
        (WebCore::activeIteratorCountMutex):
        (WebCore::EventListenerMap::EventListenerMap): Deleted.
        * dom/EventListenerMap.h:
        Use an std::atomic<int> instead of a mutex here.

2014-09-03  Enrica Casucci  <enrica@apple.com>

        Remove PLATFORM(IOS) from WebCore/editing (Part 1).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Tim Horton.

        This is the first part of the work to remove PLATFORM(IOS) everywhere
        in the editing code.

        * dom/Range.cpp:
        (WebCore::Range::create): Adding create function that takes VisiblePosition.
        * dom/Range.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::inputText):
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h: No need for the platform guard since it is already under
        DELETION_UI
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::enable):
        (WebCore::DeleteButtonController::disable):
        * editing/EditAction.h:
        * editing/EditCommand.h:
        (WebCore::EditCommand::isInsertTextCommand):
        * editing/Editor.cpp:
        (WebCore::ClearTextCommand::CreateAndApply):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeClearText):
        (WebCore::enabledCopy):
        (WebCore::enabledCut):
        (WebCore::enabledClearText):
        (WebCore::createCommandMap):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modifyMovingBackward):
        * editing/InsertTextCommand.h:
        * editing/TextCheckingHelper.cpp:
        * editing/TextGranularity.h:
        * editing/VisiblePosition.h:
        (WebCore::operator>=):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/VisibleUnits.cpp:
        * editing/VisibleUnits.h:

2014-09-03  Anders Carlsson  <andersca@apple.com>

        Get rid of some uses of OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=136503

        Reviewed by Sam Weinig.

        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::create): Deleted.
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::create): Deleted.
        * dom/MutationObserverRegistration.h:
        * dom/Node.cpp:
        (WebCore::Node::materializeRareData):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::eventTargetDataMap):
        (WebCore::Node::eventTargetData):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListsNodeData):
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::clearNodeLists):
        (WebCore::NodeRareData::ensureNodeLists):
        (WebCore::NodeRareData::ensureMutationObserverData):
        (WebCore::NodeListsNodeData::create): Deleted.
        (WebCore::NodeMutationObserverData::create): Deleted.
        (WebCore::NodeRareData::create): Deleted.

2014-09-02  Maciej Stachowiak  <mjs@apple.com>

        Clean up naming for and slightly refactor legacy video fullscreen support
        https://bugs.webkit.org/show_bug.cgi?id=136446

        Reviewed by Jer Noble.

        Key changes:
        supportsFullscreenForNode(Node*) --> supportsVideoFullscreen()
        enterFullscreenForNode(Node*) --> enterVideoFullscreenForVideoElement(HTMLVideoElement*)
        exitFullscreenForNode(Node*) --> exitVideoFullscreen()
        
        The old versions had unnecessary parameters, did not clearly distinguish their purpose
        from enterFullscreenForElement and friends, and wrongly claimed generality to all Nodes.
        Also changed many other places to use HTMLVideoElement* instead of Node* or 
        HTMLMediaElement* when they were in fact only used for video elements and would only
        work for such.

        The implications of this include a bunch of renaming in some iOS fullscreen code.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Rename m_isFullscreen flag to 
        m_isInVideoFullscreen, since it only covers the case of legacy video fullscreen,
        not element fullscreen.
        (WebCore::HTMLMediaElement::stop): ditto
        (WebCore::HTMLMediaElement::requiresTextTrackRepresentation): ditto
        (WebCore::HTMLMediaElement::isFullscreen): ditto
        (WebCore::HTMLMediaElement::enterFullscreen): Rename m_isFullscreen flag to
        m_isInVideoFullscreen. Hoist video element check here from all supportsFullscrenForNode
        clients. Adjust for relevant ChromeClient refactorings.
        (WebCore::HTMLMediaElement::enterFullscreen): ditto above
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen): Adjust for relevant ChromeClient 
        refactorings.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::supportsVideoFullscreen): Renamed from 
        supportsFullscreenForNode, and removed Node* parameter.
        (WebCore::ChromeClient::enterVideoFullscreenForVideoElement): Renamed from
        enterFulscreenForNode and changed Node* parameter to HTMLVideoElement*.
        (WebCore::ChromeClient::exitVideoFullscreen): Renamed from 
        exitFullscreenForNode, and removed Node* parameter.
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController videoElement]): Renamed from mediaElement;
        return a video element and not just a media element.
        (-[WebVideoFullscreenController dealloc]): Renamed _mediaElement data member
        to _videoElement and changed type accordingly.
        (-[WebVideoFullscreenController setVideoElement:]): Renamed from setMediaElement:
        and adjust parameter type accordingly.
        (-[WebVideoFullscreenController enterFullscreen:]): Video elements, not media
        elements.
        (-[WebVideoFullscreenController exitFullscreen]): ditto
        (-[WebVideoFullscreenController didCleanupFullscreen]): ditto
        * platform/ios/WebVideoFullscreenInterface.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Remove gratuitous HTMLMEdiaElement.h include
        and fix declarations accordingly.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Include WTFString.h
        * platform/ios/WebVideoFullscreenModelVideoElement.h: Renamed from Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h.
        * platform/ios/WebVideoFullscreenModelVideoElement.mm: Renamed from Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm.
        (WebVideoFullscreenModelVideoElement) Renamed from WebVideoFullscreenModelMediaElement
        (WebVideoFullscreenModelVideoElement::setVideoElement): Renamed from setMediaElement and
        change param type accordingly. Also no need to check for actual videoness of the element.
        (WebVideoFullscreenModelVideoElement::updateForEventName): Rename data member from m_mediaElement
        to m_videoElement and change type accordingly.
        (WebVideoFullscreenModelVideoElement::setVideoFullscreenLayer): ditto
        (WebVideoFullscreenModelVideoElement::play): ditto
        (WebVideoFullscreenModelVideoElement::pause): ditto
        (WebVideoFullscreenModelVideoElement::togglePlayState): ditto
        (WebVideoFullscreenModelVideoElement::beginScrubbing): ditto
        (WebVideoFullscreenModelVideoElement::endScrubbing): ditto
        (WebVideoFullscreenModelVideoElement::seekToTime): ditto
        (WebVideoFullscreenModelVideoElement::fastSeek): ditto
        (WebVideoFullscreenModelVideoElement::beginScanningForward): ditto
        (WebVideoFullscreenModelVideoElement::beginScanningBackward): ditto
        (WebVideoFullscreenModelVideoElement::endScanning): ditto
        (WebVideoFullscreenModelVideoElement::requestExitFullscreen): ditto
        (WebVideoFullscreenModelVideoElement::setVideoLayerFrame): ditto
        (WebVideoFullscreenModelVideoElement::setVideoLayerGravity): ditto
        (WebVideoFullscreenModelVideoElement::updateLegibleOptions): ditto
        * platform/mac/WebVideoFullscreenController.h:
        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController videoElement]): Renamed from mediaElement
        and update return type accordingly.
        (-[WebVideoFullscreenController setVideoElement:]): Renamed from 
        setMediaElement and update return type accordingly.
        (-[WebVideoFullscreenController videoElementRect]): Renamed
        from mediaElementRect.
        (-[WebVideoFullscreenController enterFullscreen:]): Update for
        rename.
        (-[WebVideoFullscreenController exitFullscreen]): ditto
        (-[WebVideoFullscreenController updatePowerAssertions]): Rename
        member from _mediaElement to _videoElement
        (-[WebVideoFullscreenController _requestExit]): ditto
        * WebCore.exp.in: Adjust for function and class renames.
        * WebCore.xcodeproj/project.pbxproj: Adjust for file renames.

2014-09-03  Benjamin Poulain  <benjamin@webkit.org>

        Fix style invalidation of elements with multiple siblings dependencies
        https://bugs.webkit.org/show_bug.cgi?id=136472

        Reviewed by Andreas Kling.

        Previously, style invalidation of siblings was driven by a pair of flags:
        -ChildrenAffectedByDirectAdjacentRules.
        -ChildrenAffectedByForwardPositionalRules.

        When ChildrenAffectedByDirectAdjacentRules was set, the element after an element
        with "needsStyleRecalc" was also recomputed. While this work for pair of elements:
            a + b
        It does not work for more than that. For example, with
            a.propery + b + c
        When the state of <a> changes, the style of <b> was updated, which is useless. The style
        of <c> was untouched, which is incorrect.

        When ChildrenAffectedByForwardPositionalRules, all elements after one with "needsStyleRecalc"
        were invalidated. While more correct, it caused avalanche of style recalc and was not a very
        useful "optimization".

 
        To fix the correctness issues (e.g. "a + b + c"), I could have gone two ways:
        1) Invalidate the parent of a, b, c. The children would always get a correct style
           when their parent's style would be resolved.
        2) Create invalidation relations to enforce that the right siblings are invalidated.

        I have decided for a weak version of (2). The reason is that most DOM trees are very
        shallow while being very wide. Invalidating the parent generally causes massive style
        recalculation.

        To keep things simple for now, there is no explicit dependency list between siblings.
        Instead, each element has a pair of flag:
        1) The element's style depends on the state of a previous sibling.
        2) The element's state affects following siblings.

        With the notation "<-" for (1), "->" for (2), the selector "a + b + c" create this kind
        of marking:
            a  +  b  +  c
            ->    ->
                       <-

        When <a> is invalidated, the style resolver will go through the chain of dependent elements
        and invalidate any element that can be affected by a prior invalidation, here <c>.

        Overlaps are possible. For example with the two selector, "a + b + c", "b ~ d"
        the marking would be
            a  +  b  +  c  +  d
            ->    ->    ->
                       <-    <-

        A change in <a> would invalidate both <c> and <d>. This is overkill, but the end result
        is correct and it is a net improvement over the previous flags.


        As usual, the CSS JIT makes an effort at compile time to reduce tree marking. SelectorChecker
        marks everything as usual.

        Tests: fast/css/direct-adjacent-style-update-optimization.html
               fast/css/indirect-adjacent-style-update-optimization.html
               fast/css/non-matching-adjacent-style-update.html
               fast/selectors/first-of-type-direct-adjacent-style-update.html
               fast/selectors/first-of-type-sibling-style-update.html
               fast/selectors/id-direct-adjacent-style-update.html
               fast/selectors/id-sibling-style-update.html
               fast/selectors/nth-child-as-first-simple-selector-style-update.html
               fast/selectors/nth-child-direct-adjacent-style-update.html
               fast/selectors/nth-child-style-update.html

        * css/SelectorChecker.cpp:
        (WebCore::isFirstOfType):
        (WebCore::countElementsBefore):
        (WebCore::countElementsOfTypeBefore):
        Counting selectors are not unlike adjacent combinators, they are handled the exact same way.
        For example a :nth-child(4) would generate somewhat similar marking as
            :first-child + * + * + *

        Everything prior to the element with the counter affects the style of the element.

        (WebCore::hasScrollbarPseudoElement):
        The assertion was incorrect. You can get an scrollbar pseudo ID on an element without scrollbar.
        It will never match, but such case is possible.

        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        Previously, any subtree affected by sibling selectors were unshareable. That was done by checking
        for Element::hasFlagsSetDuringStylingOfChildren().

        Now that sibling relation are local, they no longer prevent sharing of all children. Instead, we can
        test locally for subgroup with sibling relations.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::isAdjacentRelation):
        (WebCore::SelectorCompiler::shouldMarkStyleIsAffectedByPreviousSibling):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::markElementIfResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle): Deleted.
        * dom/Document.cpp:
        (WebCore::nodeOrItsAncestorNeedsStyleRecalc):
        * dom/Element.cpp:
        (WebCore::checkForSiblingStyleChanges):
        (WebCore::Element::hasFlagsSetDuringStylingOfChildren):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules): Deleted.
        (WebCore::Element::rareDataChildrenAffectedByForwardPositionalRules): Deleted.
        * dom/Element.h:
        (WebCore::Element::affectsNextSiblingElementStyle):
        (WebCore::Element::setAffectsNextSiblingElementStyle):
        (WebCore::Element::setStyleIsAffectedByPreviousSibling):
        (WebCore::Element::childrenAffectedByPositionalRules): Deleted.
        (WebCore::Element::childrenAffectedByDirectAdjacentRules): Deleted.
        (WebCore::Element::childrenAffectedByForwardPositionalRules): Deleted.
        (WebCore::Element::setChildrenAffectedByDirectAdjacentRules): Deleted.
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules): Deleted.
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::resetDynamicRestyleObservations):
        (WebCore::ElementRareData::childrenAffectedByForwardPositionalRules): Deleted.
        (WebCore::ElementRareData::setChildrenAffectedByForwardPositionalRules): Deleted.
        * dom/Node.h:
        (WebCore::Node::styleIsAffectedByPreviousSibling):
        (WebCore::Node::flagAffectsNextSiblingElementStyle):
        (WebCore::Node::flagStyleIsAffectedByPreviousSibling):
        (WebCore::Node::flagChildrenAffectedByDirectAdjacentRulesFlag): Deleted.
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isHTMLUnknownElement):
        * html/HTMLUnknownElement.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        (WebCore::Style::resolveTree):

2014-09-03  Simon Fraser  <simon.fraser@apple.com>

        Dump SimpleLineLayout info in showRenderTree() output
        https://bugs.webkit.org/show_bug.cgi?id=136489

        Reviewed by Zalan Bujtas.
        
        Include info about SimpleLineLayout to showRenderTree() output.
        
        Also show RenderText length, and truncate the RenderText contents
        to 80 chars (since the string is replicated in inline boxes or simple line layout output).

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::showLineTreeAndMark):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderObject):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::printPrefix):
        (WebCore::SimpleLineLayout::showLineTreeForFlow):
        * rendering/SimpleLineLayoutFunctions.h:

2014-09-03  Tim Horton  <timothy_horton@apple.com>

        iOS build fix after r173217 

        * platform/graphics/ios/FontServicesIOS.h:
        (WebCore::FontServicesIOS::capHeight):
        * platform/graphics/ios/FontServicesIOS.mm:
        (WebCore::FontServicesIOS::FontServicesIOS):
        This fixes the build, but I don't know if it's completely correct.

2014-09-03  Anders Carlsson  <andersca@apple.com>

        Get rid of DOMImplementationFront
        https://bugs.webkit.org/show_bug.cgi?id=136495

        Reviewed by Andreas Kling.

        DOMImplementationFront was used in a workaround for a GCC bug, and since we're building with clang
        on Mac this is no longer an issue.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMImplementationFront.cpp: Removed.
        * bindings/objc/DOMImplementationFront.h: Removed.
        Remove files.

        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        Remove call to implementationFront.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetImplClassName):
        Remove DOMImplementation special case

        (AddIncludesForType):
        Ditto.

        (GenerateHeader):
        Use the class header name in the #import in the internal header.

        (GenerateImplementation):
        Remove DOMImplementation special case.

2014-09-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Improper release of unretained AVCFAssetResourceLoaderRef
        https://bugs.webkit.org/show_bug.cgi?id=136493
        <rdar://problem/18112559>

        Reviewed by Eric Carlson.

        Don't bother wrapping the return value of AVCFURLAssetGetResourceLoader in a
        RetainPtr. We don't hold onto this value or want to control its lifetime; we just
        want to pass it to the AVCFAssetResourceLoaderSetCallbacks function.

        Use of the RetainPtr created a double-release and crash.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createAssetForURL): 

2014-09-03  David Hyatt  <hyatt@apple.com>

        Add support for the initial-letter CSS property to first-letter
        https://bugs.webkit.org/show_bug.cgi?id=136484

        Reviewed by Dean Jackson.
        
        New tests in fast/css-generated-content/initial-letter-*.html

        This patch add support for the CSS initial-letter property, enabling
        better drop caps support in WebKit. Letters size to a specified number of
        paragraph lines, and align to the cap-height of the first line and the baseline
        of the last line.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        Add -webkit-initial-letter to the list.

        * css/CSSLineBoxContainValue.cpp:
        (WebCore::CSSLineBoxContainValue::customCSSText):
        * css/CSSLineBoxContainValue.h:
        Add support for a new value of line-box-contain, initial-letter, that causes
        lines to use cap-height above the baseline and the glyph bounds below the
        baseline.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Add support for parsing of initial-letter.

        (WebCore::CSSParser::parseLineBoxContain):
        Add the new line-box-contain value for first-letters with initial-letter set.

        * css/CSSPropertyNames.in:
        Add the new initial-letter property.

        * css/CSSValueKeywords.in:
        Add the new initial-letter line-box-contain value.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Map initial-letter into the RenderStyle.

        * platform/graphics/FontMetrics.h:
        (WebCore::FontMetrics::hasCapHeight):
        (WebCore::FontMetrics::floatCapHeight):
        (WebCore::FontMetrics::setCapHeight):
        (WebCore::FontMetrics::capHeight):
        * platform/graphics/ios/SimpleFontDataIOS.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        Add support for cap-height to the font system. iOS and Mac have been patched.
        Other platforms will need to add support for cap-height to get this feature.
        hasCapHeight() will return false for unsupported platforms for graceful
        degradation.

        * rendering/RenderBlock.cpp:
        (WebCore::styleForFirstLetter):
        Modified to check for initialLetterDrop/Height and to adjust the style
        accordingly (e.g., to apply float when needed).

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        Code to adjust the float's position and margin to do cap-height alignment
        and sunken letters.

        * rendering/RenderBlockFlow.h:
        Remove the const from computeLogicalLocationForFloat, since the margin of the
        float can now be modified dynamically for sunken first-letters.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        Add support for initial-letter line-box-contain value.

        * rendering/RootInlineBox.h:
        Add the includeInitialLetterForBox method to support the new line-box-contain value.

        * 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:
        Normal maintenance stuff for addition of a new CSS property (making sure it is diffed
        properly for layout changes and copied on assignment, etc.)

2014-09-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Prevent double-release on AVCFURLAssetRef
        https://bugs.webkit.org/show_bug.cgi?id=136492
        <rdar://problem/18206746>

        Reviewed by Eric Carlson.

        The AVFWrapper::setAsset method needs to retain the passed argument, since it
        originates from AVCFPlayerItemGetAsset, which does not increment the
        reference count of its return value as expected by Cocoa Get/Create/Copy
        semantics.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::setAsset): Retain the passed argument.

2014-09-03  Dan Bernstein  <mitz@apple.com>

        Get rid of HIGH_DPI_CANVAS leftovers
        https://bugs.webkit.org/show_bug.cgi?id=136491

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Removed definition of ENABLE_HIGH_DPI_CANVAS
        and removed it from FEATURE_DEFINES.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::targetDeviceScaleFactor): Removed #if ENABLE(HIGH_DPI_CANVAS)
        code.

2014-09-03  Joseph Pecoraro  <pecoraro@apple.com>

        Use StringBuilder append(char) and appendLiteral in more places
        https://bugs.webkit.org/show_bug.cgi?id=136470

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::encodeProtocolString):
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::createHeaderValue):
        (WebCore::WebSocketExtensionDispatcher::appendAcceptedExtension):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientLocation):
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
        * css/CSSCalculationValue.cpp:
        (WebCore::buildCssText):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssText):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::cssText):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::selectorsText):
        * css/CSSSupportsRule.cpp:
        (WebCore::CSSSupportsRule::cssText):
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::serialize):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::generateUniquePrefix):
        * editing/markup.cpp:
        (WebCore::urlToMarkup):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::convertToDataURL):
        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::sanitizeValue):
        * html/FormController.cpp:
        (WebCore::recordFormStructure):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::buildConsoleError):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::collectCueText):
        * mathml/MathMLMencloseElement.cpp:
        (WebCore::MathMLMencloseElement::longDivLeftPadding):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::appendElement):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toRawString):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::logThreadedScrollingMode):
        * platform/PODInterval.h:
        (WebCore::PODInterval::toString):
        * platform/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::dumpFromNode):
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/network/ProxyServer.cpp:
        (WebCore::appendProxyServerString):
        (WebCore::toString):
        * platform/text/DateTimeFormat.cpp:
        (WebCore::DateTimeFormat::quoteAndAppendLiteral):
        * platform/text/PlatformLocale.cpp:
        (WebCore::DateTimeStringBuilder::zeroPadString):
        (WebCore::Locale::convertFromLocalizedNumber):
        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * rendering/RenderListMarker.cpp:
        (WebCore::listMarkerText):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        (WebCore::Internals::getCurrentCursorInfo):

2014-09-03  Bear Travis  <betravis@adobe.com>

        [CSS Font Loading] Enable Page Caching
        https://bugs.webkit.org/show_bug.cgi?id=136044

        Reviewed by Andreas Kling.

        Modifying FontLoader to track fonts loaded via the loadFont
        method as well as via CSS rules. Fonts loaded via loadFont are
        tracked in m_numLoadingFromJS, while fonts loaded via CSS rules
        are tracked in m_numLoadingFromCSS. The page is cacheable when no
        fonts are currently loading.

        Added fast/css/fontloader-page-cache.html

        * css/FontLoader.cpp:
        (WebCore::LoadFontCallback::create): Modified to take and store
        the number of fonts it will be loading.
        (WebCore::LoadFontCallback::createFromParams): Ditto.
        (WebCore::LoadFontCallback::familyCount): Getter for number of
        fonts loaded via this callback.
        (WebCore::LoadFontCallback::LoadFontCallback):
        (WebCore::LoadFontCallback::notifyLoaded): Callback the FontLoader
        to let it update its count when all the fonts have finished loading.
        (WebCore::FontLoader::loadFontDone): Ditto.
        (WebCore::FontLoader::FontLoader):
        (WebCore::FontLoader::beginFontLoading): Track the number of fonts
        loading.
        (WebCore::FontLoader::fontLoaded): Ditto.
        (WebCore::FontLoader::loadError): Ditto.
        (WebCore::FontLoader::loadFont):
        * css/FontLoader.h:
        (WebCore::FontLoader::loading):

2014-08-29  Gavin Barraclough  <barraclough@apple.com>

        Simplify DOMTimer::adjustMinimumTimerInterval -> updateTimerIntervalIfNecessary
        https://bugs.webkit.org/show_bug.cgi?id=136402

        Reviewed by Andreas Kling.

        When the minimum DOM timer interval changes, the Page updates all DOMTimers accordingly.
        Updating the fire/repeat interval on TimerBase requires a delta, but in
        DOMTimer::adjustMinimumTimerInterval we have the new requested interval. In the case of
        timers we can get the current interval to calculate the delta by calling repeatInterval(),
        but in the case of one-shot timers neither TimerBase nor DOMTimer have store the interval
        that was actually set for the timer (DOMTimer knows the original, unadjusted timer, but
        not the actual interval). The way this currently works is that when the minimum interval
        changes, Page calls adjustMinimumTimerInterval providing the previous minimum. If the
        timer is one-shot, then adjustMinimumTimerInterval will use this to compute the delta
        based on what the interval would have been.

        We can simplify & unify with the code to throttle interval timers when the nesting
        threshold is hit, by instead tracking the current timer interval as a member on DOMTimer &
        using this to compute the delta in all cases.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::adjustMinimumTimerInterval):
            - adjustMinimumTimerInterval -> updateTimerIntervalIfNecessary
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
            initialize m_currentTimerInterval
        (WebCore::DOMTimer::fired):
            - when the nesting level changes (potentially triggering throttling) just call updateTimerIntervalIfNecessary
        (WebCore::DOMTimer::updateTimerIntervalIfNecessary):
            - compute delta based on m_currentTimerInterval
        (WebCore::DOMTimer::intervalClampedToMinimum):
            - this now always takes m_originalInterval and scriptExecutionContext()->minimumTimerInterval()
              as its inputs, so remove arguments.
        (WebCore::DOMTimer::adjustMinimumTimerInterval): Deleted.
            - adjustMinimumTimerInterval -> updateTimerIntervalIfNecessary
        * page/DOMTimer.h:
            - adjustMinimumTimerInterval -> updateTimerIntervalIfNecessary, added m_currentTimerInterval

2014-09-03  Daniel Bates  <dabates@apple.com>

        [XSLT] Make WebKit build when XSLT is disabled
        https://bugs.webkit.org/show_bug.cgi?id=136471

        Reviewed by Simon Fraser.

        Fixes a Clang compiler warning that file-static function WebCore::hasNoStyleInformation is unused.
        This function is only called from ENABLE(XSLT)-guarded code. So, add a ENABLE(XSLT)-guard around
        WebCore::hasNoStyleInformation().

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::hasNoStyleInformation):

2014-09-02  Brian J. Burg  <burg@cs.washington.edu>

        LegacyProfiler: remove redundant ProfileNode members and other cleanup
        https://bugs.webkit.org/show_bug.cgi?id=136380

        Reviewed by Timothy Hatcher.

        Remove Profile.idleTime, rename head to rootNode, and remove ProfileNode members.

        Covered by existing tests.

        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * inspector/TimelineRecordFactory.cpp:

2014-09-02  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove ProfilerAgent and legacy profiler files in the frontend
        https://bugs.webkit.org/show_bug.cgi?id=136462

        Reviewed by Timothy Hatcher.

        It's not used by the frontend anymore.

        No new tests, no behavior changed.

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/agents/InspectorProfilerAgent.h: Removed.
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorProfilerAgent): Deleted.
        (WebCore::InstrumentingAgents::setInspectorProfilerAgent): Deleted.
        * inspector/PageProfilerAgent.cpp: Removed.
        * inspector/PageProfilerAgent.h: Removed.
        * inspector/TimelineRecordFactory.cpp: Moved these builders to their only callsite.
        (WebCore::buildInspectorObject):
        (WebCore::buildProfileInspectorObject):
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/WebProfilerAgent.cpp: Removed.
        * inspector/WebProfilerAgent.h: Removed.
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerProfilerAgent.cpp: Removed.
        * inspector/WorkerProfilerAgent.h: Removed.
        * inspector/protocol/Timeline.json:

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

        [EME][Mac] Refactor CDMPrivateMediaSourceAVFObjC to allow sessions to be created without being attached to an AVStreamDataParser.
        https://bugs.webkit.org/show_bug.cgi?id=136016

        Reviewed by Eric Carlson.

        The CDMPrivateMediaPlayer class will delegate creation of CDMSession instances to the current MediaPlayer. This
        of course requires the MediaKeys object owning the CDM to be attached to a HTMLMediaElement, and specifically to
        one with a valid src attribute or source node which has sucessfully begun loading. For certain CDM operations,
        it would be better if a given MediaKeys could create a session without actually being connected to a
        HTMLMediaElement (yet).

        To facilitate this for CDMSessionPrivateMediaSourceAVFObjC, add a new class, CDMPrivateMediaSourceAVFObjC, which
        is the primary factory for CDMSessionPrivateMediaSOurceAVFObjC. Disclaim responsibility for creating these sessions
        in MediaPlayerPrivateMediaSourceAVFObjC by not passing the "supportsKeySystem" method when registering itself.

        Add methods to CDMSessionPrivateMediaSourceAVFObjC to allow SourceBuffers to be added and removed from the session,
        to support adding the session to the HTMLMediaElement after the session has been created.

        Since MediaPlayerPrivate instance and  CDMSession instances must be able to communicate with one another, add a type()
        enum and virtual method to allow CDMSession instnaces to be distinguisted from (and casted to) one another.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::installedCDMFactories): Register CDMPrivateMediaSourceAVFObjC.
        (WebCore::CDM::createSession): Notify the MediaPlayer of the new CDMSession.
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::setMediaElement): Notify the HTMLMediaElement of any existing sessions.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/CDMSession.h:
        (WebCore::CDMSession::type): Added.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setCDMSession): Pass through to the MediaPlayerPrivate.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setCDMSession): Added. Default no-op.
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h: Added.
        (WebCore::CDMPrivateMediaSourceAVFObjC::CDMPrivateMediaSourceAVFObjC): Simple constructor.
        (WebCore::CDMPrivateMediaSourceAVFObjC::~CDMPrivateMediaSourceAVFObjC): Simple destructor.
        (WebCore::CDMPrivateMediaSourceAVFObjC::create): Simple factory.
        (WebCore::CDMPrivateMediaSourceAVFObjC::cdm): Simple accessor.
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm: 
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystem): Moved from MediaPlayerPrivateMediaSourceAVFObjC.
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystemAndMimeType): Ditto.
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsMIMEType): Ditto.
        (WebCore::CDMPrivateMediaSourceAVFObjC::createSession): Returns new CDMSessionMediaSourceAVFObjC.
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        (WebCore::CDMSessionAVFoundationObjC::type): Added.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        (WebCore::CDMSessionMediaSourceAVFObjC::type): Added.
        (WebCore::toCDMSessionMediaSourceAVFObjC): Throw assertion if type() is not correct.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::CDMSessionMediaSourceAVFObjC): Removed m_parent ivar.
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC): Ditto.
        (WebCore::CDMSessionMediaSourceAVFObjC::update): Determing which SourceBuffer is protected.
        (WebCore::CDMSessionMediaSourceAVFObjC::addSourceBuffer): Added.
        (WebCore::CDMSessionMediaSourceAVFObjC::removeSourceBuffer): Added.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine): Remove supportsKeyType parameter.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType): Remove keyType check.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession): Tell the CDMSession about outstanding SourceBuffers.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:

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

        [Win] Attempt to fix the Windows build after <http://trac.webkit.org/changeset/173192>
        (https://bugs.webkit.org/show_bug.cgi?id=136467)

        Declare ResourceHandleClient::connectionProperties() when building for iOS or when USE(CFNETWORK).

        * platform/network/ResourceHandleClient.h:

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

        [iOS] Support using Foundation networking code
        https://bugs.webkit.org/show_bug.cgi?id=136467

        Reviewed by Pratik Solanki.

        We should support building iOS WebKit with the Foundation networking code
        (i.e. !USE(CFNETWORK)).

        Additionally, disable USE(CFNETWORK) and use the Foundation networking code
        by default when building iOS WebKit without the Apple Internal SDK.

        * Configurations/WebCore.xcconfig: Remove file WebCoreURLResponse.mm from the list of excluded files
        so that we compile an implementation for function WebCore::synthesizeRedirectResponseIfNecessary when
        building without USE(CFNETWORK).
        * WebCore.exp.in: Add symbols for WebCore::synthesizeRedirectResponseIfNecessary() and WebCore::ResourceHandleClient::willCacheResponseAsync().
        * WebCore.xcodeproj/project.pbxproj: Add new files CFNetworkConnectionCacheSPI.h and CFURLRequestSPI.h.
        Also move group platform/spi such that it appears in alphabetical order in the platform group.
        * platform/cf/URLCF.cpp: Remove unnecessary header <CoreFoundation/CFPriv.h>.
        * platform/network/ResourceHandle.h: Declare iOS-specific variant of ResourceHandle::createNSURLConnection().
        * platform/network/ResourceHandleClient.h: Always include header <wtf/RetainPtr.h> when building for iOS.
        (WebCore::ResourceHandleClient::connectionProperties): Add PLATFORM(IOS)-guard around declaration.
        * platform/network/cf/ResourceRequestCFNet.cpp: Substitute header CFNetworkConnectionCacheSPI.h for
        <CFNetwork/CFNetworkConnectionCachePriv.h>.
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::saveToPersistentStorage): Use Credential::nsCredential() and ProtectionSpace::nsSpace()
        instead of WebCore::mac(const {Credential, ProtectionSpace}&) as the latter were removed in <http://trac.webkit.org/changeset/171801>
        and <http://trac.webkit.org/changeset/171540>, respectively.
        * platform/network/mac/ResourceErrorMac.mm: Add USE(CFNETWORK)-guard around <CFNetwork/CFSocketStreamPriv.h>.
        * platform/network/mac/ResourceHandleMac.mm: Substitute header CFURLRequestSPI.h for <CFNetwork/CFURLRequest.h>.
        (WebCore::ResourceHandle::start): Modified to use ResourceHandle::makeDelegate() instead of d->m_proxy, which 
        was removed in <http://trac.webkit.org/changeset/147476>.
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Ditto.
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary): Add !USE(CFNETWORK)- and PLATFORM(IOS)- guards.
        * platform/spi/cf/CFNetworkConnectionCacheSPI.h: Added.
        * platform/spi/cf/CFURLRequestSPI.h: Added.

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

        Use references in public EventSender functions
        https://bugs.webkit.org/show_bug.cgi?id=136463

        Reviewed by Dan Bates.

        Passing nullptr to EventSender shouldn't be allowed.

        No new tests because there is no behavior change.

        * dom/EventSender.h:
        (WebCore::EventSender::hasPendingEvents):
        (WebCore::EventSender<T>::dispatchEventSoon):
        (WebCore::EventSender<T>::cancelEvent):
        (WebCore::EventSender<T>::dispatchPendingEvents):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::~HTMLStyleElement):
        (WebCore::HTMLStyleElement::notifyLoadedSheetAndAllCriticalSubresources):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::setImageWithoutConsideringPendingLoadEvent):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):

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

        [iOS] Exclude touch and gesture files when building without ENABLE_TOUCH_EVENTS
        and ENABLE_IOS_GESTURE_EVENTS, respectively
        https://bugs.webkit.org/show_bug.cgi?id=136456

        Reviewed by Andy Estes.

        It's sufficient to exclude the touch and gesture files when building without
        ENABLE_TOUCH_EVENTS and ENABLE_IOS_GESTURE_EVENTS, respectively. Currently we
        exclude these files when building without the Apple Internal SDK, which is
        heavy handed.

        * Configurations/WebCore.xcconfig:

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

        Fix an assertion sometimes seen under RenderLayerCompositor::detachRootLayer()
        https://bugs.webkit.org/show_bug.cgi?id=136464

        Reviewed by Tim Horton.

        Don't try to call RenderLayer::isVisuallyNonEmpty() under RenderLayerCompositor::detachRootLayer()
        when layout might be stale; there's not point trying to update the backing store state
        when detaching, only when attaching.

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

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

        Avoid backing store allocation with some combinations of replaced elements, masking and visibility:hidden
        https://bugs.webkit.org/show_bug.cgi?id=136400

        Reviewed by Tim Horton.
        
        RenderLayer::isVisuallyNonEmpty() would return true for replaced elements (e.g. images)
        with visibility:hidden, and for layers with a mask, and both would cause additional
        backing store in some cases.
        
        We can move the hasVisibleContent() to the top of the function, since visibility:hidden
        will always hide any content of this layer. The hasMask() check can also be removed;
        a mask can only mask content that is already visible; it never contributes additional
        pixels.

        Tests: compositing/backing/masked-child-no-backing.html
               compositing/backing/replaced-child-no-backing.html

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

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

        Use jsNontrivialString for strings we know are more than a single character
        https://bugs.webkit.org/show_bug.cgi?id=136393

        Reviewed by Geoffrey Garen.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::addUsagesToJSON):

2014-09-02  Alex Christensen  <achristensen@webkit.org>

        Fix bindings tests after r173176.
        https://bugs.webkit.org/show_bug.cgi?id=136460

        Reviewed by Simon Fraser.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * 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/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/JS/JSreadonly.h:
        * bindings/scripts/test/ObjC/DOMFloat64ArrayInternal.h:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObjectInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCallbackInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetterInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h:
        * bindings/scripts/test/ObjC/DOMTestExceptionInternal.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h:
        * bindings/scripts/test/ObjC/DOMTestInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListenerInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNodeInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h:
        * bindings/scripts/test/ObjC/DOMTestObjInternal.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructorsInternal.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefsInternal.h:
        * bindings/scripts/test/ObjC/DOMattributeInternal.h:
        * bindings/scripts/test/ObjC/DOMreadonlyInternal.h:
        Added new WEBCORE_EXPORT macros.

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

        Non-composited child RenderLayers cause allocation of unncessary backing store
        https://bugs.webkit.org/show_bug.cgi?id=136375

        Reviewed by David Hyatt.
        
        A composited element that has non-composited descendant elements that fall into
        RenderLayers was getting backing store when none was required. descendentLayerPaintsIntoAncestor()
        was simply checking the "visibility:visible" bit on descendant non-composited layers,
        instead of actually asking them if they have any visual content.
        
        Added a couple of FIXME comments.

        Test: compositing/backing/child-layer-no-backing.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::descendentLayerPaintsIntoAncestor):

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

        Unreviewed, rolling out r173175.
        https://bugs.webkit.org/show_bug.cgi?id=136454

        it broke debug builds (Requested by jessieberlin on #webkit).

        Reverted changeset:

        "Introduce CSS_BASIC_TYPE_CASTS, and use it"
        https://bugs.webkit.org/show_bug.cgi?id=136403
        http://trac.webkit.org/changeset/173175

2014-09-02  Alex Christensen  <achristensen@webkit.org>

        More use of WEBCORE_EXPORT.

        Reviewed by Darin Adler.

        These changes from a patch attached to https://bugs.webkit.org/show_bug.cgi?id=136172
        contain more deployment of the WEBCORE_EXPORT macro. As of this writing, the macro is
        defined to do nothing, so landing these is a harmless way to get closer to be the point
        where we can throw the switch to use these instead of explicit export files on OS X,
        iOS, and Windows.

        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        * bridge/runtime_method.cpp:
        * bridge/runtime_object.cpp:
        * dom/Document.h:
        * dom/Element.h:
        * dom/Position.h:
        * dom/Range.h:
        * dom/StaticNodeList.h:
        * dom/make_names.pl:
        (printInit):
        (printNamesCppFile):
        * editing/Editor.h:
        * editing/FrameSelection.h:
        * editing/TextIterator.h:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/cache/MemoryCache.h:
        * loader/cocoa/DiskCacheMonitorCocoa.h:
        * loader/mac/LoaderNSURLExtras.h:
        * page/Page.h:
        * page/PageGroup.h:
        * page/SecurityPolicy.h:
        * page/Settings.h:
        * page/make_settings.pl:
        (printGetterAndSetter):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * platform/CrossThreadCopier.h:
        * platform/LocalizedStrings.h:
        * platform/MemoryPressureHandler.cpp:
        * platform/PlatformScreen.h:
        * platform/PublicSuffix.h:
        * platform/graphics/Gradient.h:
        * platform/graphics/cocoa/WebActionDisablingCALayerDelegate.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/WebCoreFullScreenPlaceholderView.h:
        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreObjCExtras.h:
        * platform/mac/WebFontCache.h:
        * platform/mac/WebVideoFullscreenController.h:
        * platform/mac/WebWindowAnimation.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/CredentialStorage.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/ProxyServer.h:
        * platform/sql/SQLiteStatement.h:
        * platform/text/TextEncoding.h:
        * rendering/HitTestResult.h:
        * rendering/RenderTreeAsText.h:
        * testing/Internals.h:
        Add many more correct uses of WEBCORE_EXPORT; remove a few incorrect ones.

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

        Introduce CSS_BASIC_TYPE_CASTS, and use it
        https://bugs.webkit.org/show_bug.cgi?id=136403

        Reviewed by Darin Adler.

        toCSSBasicFoo() will help to detect wrong type casting. So this patch generates it, and use it
        instead of static_cast<const CSSBasicFoo*>().

        No new tests no behavior changes.

        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::CSSBasicShapeInset::equals):
        * css/CSSBasicShapes.h:

2014-09-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        CachedResourceLoader should check redirections to reuse or not cached resources
        https://bugs.webkit.org/show_bug.cgi?id=131757

        Reviewed by Antti Koivisto.

        Added cache-control redirection check to properly determine revalidation policy.
        Tightened redirection cache-control header check by testing for no-cache and must-revalidate directives.
        Added redirection freshness check.

        Test: http/tests/cache/cache-redirections.html

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::canReuse): Removed redirection check (now handled by CachedResource::redirectChainAllowsReuse).
        * loader/cache/CachedResource.cpp:
        (WebCore::currentAge): Moved from WebCore::CachedResource::currentAge method to static function. Added response and responseTimestamp as parameters.
        (WebCore::CachedResource::CachedResource): Initialized redirection chain status (no redirection and expiracy date set to never).
        (WebCore::CachedResource::isExpired): Updated according new currentAge/freshnessLifetime method parameters.
        (WebCore::CachedResource::freshnessLifetime): Added response as parameter.
        (WebCore::CachedResource::willSendRequest): Computes whether a redirection can be cached, and if cached for how long it will remain fresh.
        (WebCore::CachedResource::redirectChainAllowsReuse): Return false if any of the redirection in the redirection chain cannot be cached or expired. 
        * loader/cache/CachedResource.h: Added cache chain member that stores whether the redirection chain can be cached and if so when it will be expired.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Added check of the redirection chain.

2014-09-02  Daewoong Jang  <daewoong.jang@navercorp.com>

        Prevent decoded images from being destroyed when they're in use.
        https://bugs.webkit.org/show_bug.cgi?id=136259.

        Reviewed by Darin Adler.

        Try to fix a regression introduced by r172790. Before the patch,
        CachedImage does not release its Image object if it still has clients.
        However this behavior was changed due to removal of CachedResource::isSafeToMakePurgeable(),
        which implied a call to CachedResource::hasClients(). This patch restores
        the behavior by adding a check to hasClients() in CachedImage::destroyDecodedData().

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::destroyDecodedData):

2014-09-01  Tim Horton  <timothy_horton@apple.com>

        RenderThemeMac::paintProgressBar creates a buffer without respecting the destination's acceleration setting
        https://bugs.webkit.org/show_bug.cgi?id=136427

        Reviewed by Dan Bernstein.

        No new tests, just a performance improvement.

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

2014-09-01  Tim Horton  <timothy_horton@apple.com>

        Remove an unnecessary local in GraphicsLayerCA::ensureStructuralLayer
        https://bugs.webkit.org/show_bug.cgi?id=136426

        Reviewed by Dan Bernstein.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        This was here so that we could call PlatformCALayerClient::platformLayerChanged,
        but that no longer exists!

2014-08-29  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Resolved value of grid-template-* must include every track listed
        https://bugs.webkit.org/show_bug.cgi?id=136362

        Reviewed by Darin Adler.

        Section 5.1.5 of the specs clearly states that the resolved value
        for grid-template-* must include every listed track, whether
        explicitly or implicitly created. We were only listing the
        explicit grid tracks.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackList):

2014-09-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE] Build warning by INTERFACE_LINK_LIBRARIES
        https://bugs.webkit.org/show_bug.cgi?id=136194

        Reviewed by Csaba Osztrogonác.

        Set the LINK_INTERFACE_LIBRARIES target property on the top level CMakeLists.txt.

        * CMakeLists.txt:

2014-08-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, fix build break on EFL and GTK since r173152.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::platformInit): Remove a bool parameter because it was removed from function's declaration.

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        Remove GraphicsContext constructor that takes shouldUseContextColors
        https://bugs.webkit.org/show_bug.cgi?id=136421

        Reviewed by Dan Bernstein.

        * WebCore.exp.in:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::drawLinesForText):
        As far as I can tell, the last user of this constructor died with WebNSStringDrawing.
        Adjust all code to assume shouldUseContextColors=true.

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        Remove unused ARMv6-specific #if branches in WebCore::canHyphenate
        https://bugs.webkit.org/show_bug.cgi?id=136420

        Reviewed by Dan Bernstein.

        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::AtomicStringKeyedMRUCache<RetainPtr<CFLocaleRef>>::createValueForNullKey):
        Use kCFAllocatorDefault instead of 0.

        (WebCore::canHyphenate):
        Remove ARMv6-specific code.

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        Remove unnecessary (and unnecessarily iOS-specific) setStrokeAndFillColor
        https://bugs.webkit.org/show_bug.cgi?id=136416

        Reviewed by Dan Bernstein.

        * WebCore.exp.in:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::setStrokeAndFillColor): Deleted.
        Remove.

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        Remove duplicate implementation of drawEllipse and some related PLATFORM(IOS) ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=136413

        Reviewed by Dan Bernstein.

        No new tests, just cleanup.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawRaisedEllipse):
        There's nothing iOS specific about this function.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        Un-ifdef drawRaisedEllipse; delete the reimplementation of drawEllipse that takes
        a FloatRect and make the normal one take a FloatRect instead.

        (WebCore::GraphicsContext::platformInit):
        Make sure that the CGContext's line width starts out in sync with GraphicsContext's.
        By default, CGContext has a line width of 1 and GraphicsContext 0, so they could previously
        have been out of sync until someone set the width explicitly.

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        Fix a harmless mismerge in BitmapImage::destroyDecodedDataIfNecessary
        https://bugs.webkit.org/show_bug.cgi?id=136412

        Reviewed by Alexey Proskuryakov.

        No new tests, just cleanup.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        Drop the leading 'c' and the 'static' on the cutoff parameter.
        Remove the duplicated early return (seems like it happened in the merge).
        Remove reference to the exact size in the comment, since it's different on iOS.

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        Use SinkDocument instead of PDFDocument; get rid of PDFDocument
        https://bugs.webkit.org/show_bug.cgi?id=136414

        Reviewed by Alexey Proskuryakov.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        * pdf/ios/PDFDocument.cpp: Removed.
        * pdf/ios/PDFDocument.h: Removed.
        Use the generic SinkDocument, which ignores all incoming data just like PDFDocument.
        Delete the unnecessary and iOS-specific PDFDocument.cpp/h

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        Adjust an antique comment in Image::drawPattern
        https://bugs.webkit.org/show_bug.cgi?id=136411

        Reviewed by Dan Bernstein.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        Reword the comment.

2014-08-31  Tim Horton  <timothy_horton@apple.com>

        SVGImage::drawPatternForContainer creates a buffer without respecting the destination's acceleration setting
        https://bugs.webkit.org/show_bug.cgi?id=136408
        <rdar://problem/12013317>

        Reviewed by Dan Bernstein.

        No new tests required, just a performance improvement.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        Use ImageBuffer::createCompatibleBuffer, which passes the destination's
        acceleration setting through to the ImageBuffer constructor.

        I didn't use GraphicsContext::createCompatibleBuffer because adjusting
        how this function applies the destination's CTM is outside the scope of this patch.

2014-08-30  Joseph Pecoraro  <pecoraro@apple.com>

        Convert string literals to character literals in makeString usage
        https://bugs.webkit.org/show_bug.cgi?id=136394

        Reviewed by Sam Weinig.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::evaluateInOverlay):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOriginalURLForDownloadRequest):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::logWarning):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::checkMediaTypeAndReportViolation):
        (WebCore::ContentSecurityPolicy::reportUnsupportedDirective):
        (WebCore::ContentSecurityPolicy::reportInvalidPathCharacter):
        Also reorder some code to ensure single string creation.

2014-08-26  Maciej Stachowiak  <mjs@apple.com>

        Use RetainPtr::autorelease in some places where it seems appropriate
        https://bugs.webkit.org/show_bug.cgi?id=136280

        Reviewed by Darin Adler.

        * platform/mac/URLMac.mm:
        (WebCore::URL::operator NSURL *): Use autorelease() instead of
        CFBridgingRelease(leakRef())

2014-08-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS: Refactor :visited handling in SelectorChecker
        https://bugs.webkit.org/show_bug.cgi?id=135639

        Reviewed by Benjamin Poulain.

        :visited is specially handled in the SelectorChecker and style resolution
        because of security issues. That is nested links and adjacent combinators.
        Since we propagate linkState from the ancestors,

            1. linkStates of ancestors from the target node are only used to calculate
            the linkState of the current node.
            This is why adjacent combinators disable :visited.

            2. linkState is overrides by the closest link element in the ancestors.
            This is why :visited is effective on the closest link element.

        In this patch, we fix 3 things.

            1. Simplify SelectorChecker. Move m_mode to CheckingContext and it makes
            CheckingContext more similar to SelectorCompiler::CheckingContext in CSS JIT.
            And hide visitedMatchType parameter from the caller of SelectorChecker.

            2. Disable :visited inside :-webkit-any. Currently, :-webkit-any provides MatchAll
            link match type. So considering visited match type in the matching phase of :visited
            provides inconsistency. In this patch, :-webkit-any(:visited) never matches.
            And :-webkit-any(:link) acts like a :-webkit-any(:any-link). This behavior represents
            that visited match type is always considered as disabled inside :-webkit-any.
            This behavior may be changed when Selector Level4 is implemented.

            3. Fix the issue when traversing the descendant element,
            first encountered link check is missing.

        Tests: fast/history/link-inside-any.html
               fast/history/link-inside-not.html
               fast/history/nested-visited-test-override.html
               fast/history/visited-inside-any.html
               fast/history/visited-inside-not.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::SelectorChecker):
        (WebCore::SelectorChecker::match):
        (WebCore::hasScrollbarPseudoElement):
        (WebCore::checkingContextForParent):
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        * css/StyleResolver.h:
        (WebCore::checkRegionSelector):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches):

2014-08-29  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Remove LayoutUnit's kEffectiveFixedPointDenominator.
        https://bugs.webkit.org/show_bug.cgi?id=136383.

        Reviewed by Simon Fraser.

        There's only one subpixel denominator now.

        No change in functionality.

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::LayoutUnit):
        (WebCore::LayoutUnit::fromFloatCeil):
        (WebCore::LayoutUnit::fromFloatFloor):
        (WebCore::LayoutUnit::toInt):
        (WebCore::LayoutUnit::toFloat):
        (WebCore::LayoutUnit::toDouble):
        (WebCore::LayoutUnit::operator++):
        (WebCore::LayoutUnit::ceil):
        (WebCore::LayoutUnit::round):
        (WebCore::LayoutUnit::floor):
        (WebCore::LayoutUnit::ceilToFloat):
        (WebCore::LayoutUnit::fraction):
        (WebCore::LayoutUnit::epsilon):
        (WebCore::LayoutUnit::nearlyMax):
        (WebCore::LayoutUnit::nearlyMin):
        (WebCore::LayoutUnit::isInBounds):
        (WebCore::LayoutUnit::setValue):
        (WebCore::boundedMultiply):
        (WebCore::operator*):
        (WebCore::operator/):
        (WebCore::operator%):
        (WebCore::roundToDevicePixel):
        (WebCore::floorToDevicePixel):
        (WebCore::ceilToDevicePixel):

2014-08-29  Zalan Bujtas  <zalan@apple.com>

        Rename updatePreferredWidth to make it more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=136389

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::preferredWidth):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::updatePreferredWidth): Deleted.

2014-08-29  Gavin Barraclough  <barraclough@apple.com>

        Make timerNestingLevel threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=136401

        Reviewed by Tim Horton.

        timerNestingLevel, used by DOMTimer to determine whether a timer is 'nested'
        (repeating, possible due to a timer rescheduling itself) is a global. Since
        worker threads can set timers too this is not thread safe.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
            - added initialize m_timerNestingLevel
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::timerNestingLevel):
        (WebCore::ScriptExecutionContext::setTimerNestingLevel):
            - added accessors
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::fired):
            - move timerNestingLevel to the context

2014-08-29  Gavin Barraclough  <barraclough@apple.com>

        DOMTimer::m_nestingLevel is prone to overflow
        https://bugs.webkit.org/show_bug.cgi?id=136399

        Reviewed by Alexey Proskuryakov.

        Since this would happen after the 2 billionth timer fire this is unlikely,
        and consequences aren't severe (breaks throttling).

        This change has the following consequences.

            - m_nestingLevel saturates to its max value.
            - unnested timers are indicated by a nesting level of 0.
            - repeat timers update m_nestingLevel on every fire,
              not just those that should have been throttled.

        The last point is subtle, but ultimately should be inconsequential. Timers
        whose requested timeout is less that the minimum interval will saturate quickly
        anyway; timers with an original interval greater than the minimum previously
        wouldn't have incremented m_nestingLevel, but doing so now doesn't hurt since
        they won't be throttled when they hit the threshold. This simplifies things
        conceptually a little & reduces the test performed on each timer fire.

        * page/DOMTimer.cpp:
        (WebCore::shouldForwardUserGesture):
            - unnested timers are indicated by a nesting level of 0
        (WebCore::DOMTimer::DOMTimer):
            - don't increment nesting level on construction
        (WebCore::DOMTimer::fired):
            - saturating increments
        (WebCore::DOMTimer::adjustMinimumTimerInterval):
        (WebCore::DOMTimer::intervalClampedToMinimum):
            - added ASSERTs

2014-08-29  Zalan Bujtas  <zalan@apple.com>

        Improve showRenderTree() output.
        https://bugs.webkit.org/show_bug.cgi?id=136244

        Reviewed by Darin Adler.

        Add more debugging information to showRenderTree().

        Not testable.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showLineTreeForThis):
        (WebCore::InlineBox::showLineTreeAndMark):
        (WebCore::InlineBox::showLineBox):
        (showNodeTree):
        (showLineTree):
        (WebCore::InlineBox::showBox): Deleted.
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::showLineTreeAndMark):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::showLineBox):
        (WebCore::InlineTextBox::showBox): Deleted.
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::showLineTreeAndMark): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::showLineTreeAndMark):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::showRenderTreeLegend):
        (WebCore::RenderObject::showNodeTreeForThis):
        (WebCore::RenderObject::showRenderTreeForThis):
        (WebCore::RenderObject::showLineTreeForThis):
        (WebCore::RenderObject::showRegionsInformation):
        (WebCore::RenderObject::showRenderObject):
        (WebCore::RenderObject::showRenderSubTreeAndMark):
        (showNodeTree):
        (showLineTree):
        (showRenderTree):
        (WebCore::RenderObject::showRenderTreeAndMark): Deleted.
        * rendering/RenderObject.h:
        * rendering/RootInlineBox.h:

2014-08-29  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, remove empty directories.

        * Modules/networkinfo: Removed.
        * inspector/front-end: Removed.
        * inspector/front-end/Images: Removed.
        * inspector/front-end/UglifyJS: Removed.
        * inspector/front-end/ace: Removed.
        * inspector/front-end/cm: Removed.
        * platform/audio/ffmpeg: Removed.
        * platform/audio/ipp: Removed.
        * platform/graphics/gpu/opencl: Removed.

2014-08-29  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Remove non Coordinated Graphics code path from cmake build system after r142169
        https://bugs.webkit.org/show_bug.cgi?id=135560

        Reviewed by Gyuyoung Kim.

        No new tests required, no new functionality.

        * PlatformEfl.cmake: Removed TEXTURE_MAPPER and 3D_GRAPHICS guards.
        * platform/graphics/efl/GraphicsContext3DEfl.cpp: Removed TEXTURE_MAPPER_GL and GRAPHICS_SURFACE guards.
        (WebCore::GraphicsContext3D::platformLayer):
        (WebCore::GraphicsContext3D::createGraphicsSurfaces):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp: Removed TEXTURE_MAPPER_GL and GRAPHICS_SURFACE guards.
        (WebCore::GraphicsContext3DPrivate::initialize):
        (WebCore::GraphicsContext3DPrivate::releaseResources):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        (WebCore::GraphicsContext3DPrivate::graphicsSurfaceFlags):
        * platform/graphics/efl/GraphicsContext3DPrivate.h: Removed TEXTURE_MAPPER_GL and GRAPHICS_SURFACE guards.
        * platform/graphics/surfaces/efl/GraphicsSurfaceCommon.cpp: Removed GRAPHICS_SURFACE guard.

2014-08-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        RenderThemeGtk depends on classes outside of platform
        https://bugs.webkit.org/show_bug.cgi?id=22176

        Reviewed by Martin Robinson.

        Move RenderThemeGtk.cpp from platform to rendering.

        * PlatformGTK.cmake:
        * rendering/RenderThemeGtk.cpp: Renamed from Source/WebCore/platform/gtk/RenderThemeGtk.cpp.

2014-08-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ScrollbarThemeGtk should not depend on RenderThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=136338

        Reviewed by Philippe Normand.

        Remove the dependency by creating the GtkStyleContext for the
        scrollbars in ScrollbarThemeGtk.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::gtkStyleChangedCallback): Call ScrollbarThemeGtk::themeChanged().
        (WebCore::getStyleContext): Remove the scrollbar style context support.
        * platform/gtk/RenderThemeGtk.h: Remove gtkScrollbarStyle().
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarStyleContext::ScrollbarStyleContext): Helper
        class to create the global GtkStyleContext for scrollbars.
        (WebCore::ScrollbarStyleContext::~ScrollbarStyleContext):
        (WebCore::ScrollbarStyleContext::context):
        (WebCore::gtkScrollbarStyleContext):
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk): Remove m_context initialization.
        (WebCore::ScrollbarThemeGtk::themeChanged): Invalidate the
        GtkStylecontext and call updateThemeProperties().
        (WebCore::ScrollbarThemeGtk::updateThemeProperties): Use the
        global style context.
        (WebCore::ScrollbarThemeGtk::paintTrackBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::paintThumb): Ditto.
        (WebCore::ScrollbarThemeGtk::paintButton): Ditto.
        * platform/gtk/ScrollbarThemeGtk.h:

2014-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Merge RenderThemeGtk3.cpp into RenderThemeGtk.cpp and ScrollbarThemeGtk3.cpp intoScrollbarThemeGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=136336

        Reviewed by Philippe Normand.

        There's no reason to have two files now that there's no GTK+2
        support. Also fix coding style issues and compile warnings.

        * PlatformGTK.cmake:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk3.cpp: Removed.
        * platform/gtk/ScrollbarThemeGtk.cpp:
        * platform/gtk/ScrollbarThemeGtk3.cpp: Removed.

2014-08-28  Mark Lam  <mark.lam@apple.com>

        DebuggerCallFrame::scope() should return a DebuggerScope.
        <https://webkit.org/b/134420>

        Reviewed by Geoffrey Garen.

        No new tests.

        Rolling back in r170680 with the fix for <https://webkit.org/b/135656>.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::attachDebugger):
        - We should acquire the JSLock before modifying a JS global object.

2014-08-28  Enrica Casucci  <enrica@apple.com>

        Can't hit tab key more than 3 times continuously.
        https://bugs.webkit.org/show_bug.cgi?id=136357
        rdar://problem/17927266

        Reviewed by Dean Jackson.

        Test: fast/css/multiple-tabs.html

        When computing the tabWidth disregard increments of less than half the size of the space character
        for the given font.

        * platform/graphics/Font.h:
        (WebCore::Font::tabWidth):

2014-08-28  Daniel Bates  <dabates@apple.com>

        [iOS] Clients that include WebCoreThread.h fail to build after <http://trac.webkit.org/changeset/172814/>
        (https://bugs.webkit.org/show_bug.cgi?id=136108)

        Define WEBCORE_EXPORT (if its not already defined) in WebCoreThread.h so as to fix the
        build for clients that include this header.

        * platform/ios/wak/WebCoreThread.h:

2014-08-28  Pratik Solanki  <psolanki@apple.com>

        WebContent hangs under SharedBuffer::duplicateDataBufferIfNecessary() while browsing some websites
        https://bugs.webkit.org/show_bug.cgi?id=136347
        <rdar://problem/18073745>

        Reviewed by Andreas Kling.

        When passing data to ImageIO, we create a copy if we have to reallocate the buffer. We would
        set the size of the new buffer to be the size of the SharedBuffer data. This causes memory
        churn since we would create a new buffer for every data chunk we get. Fix this by at least
        doubling the capacity of the buffer when we duplicate it.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::duplicateDataBufferIfNecessary):

2014-08-28  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * WebCore.exp.in: Updated symbol.

2014-08-28  Benjamin Poulain  <bpoulain@apple.com>

        Scrolling with spacebar on a page with fixed header breaks reading flow
        https://bugs.webkit.org/show_bug.cgi?id=135506

        Reviewed by Simon Fraser.

        When scrolling by page, find the height of any bar that is obscuring the top or bottom of the page,
        and substract that height from the step to scroll.

        Tests: scrollbars/scrolling-backward-by-page-accounting-bottom-fixed-elements-on-keyboard-spacebar.html
               scrollbars/scrolling-backward-by-page-on-keyboard-spacebar.html
               scrollbars/scrolling-by-page-accounting-oversized-fixed-elements-on-keyboard-spacebar.html
               scrollbars/scrolling-by-page-accounting-top-fixed-elements-on-keyboard-spacebar.html
               scrollbars/scrolling-by-page-accounting-top-fixed-elements-with-negative-top-on-keyboard-spacebar.html
               scrollbars/scrolling-by-page-ignoring-hidden-fixed-elements-on-keyboard-spacebar.html
               scrollbars/scrolling-by-page-ignoring-transparent-fixed-elements-on-keyboard-spacebar.html
               scrollbars/scrolling-by-page-on-keyboard-spacebar.html

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustScrollStepForFixedContent):
        * page/FrameView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::adjustScrollStepForFixedContent):
        (WebCore::ScrollableArea::scroll):
        * platform/ScrollableArea.h:

2014-08-28  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Remove unused pixel snapping functions.
        https://bugs.webkit.org/show_bug.cgi?id=136341

        Reviewed by Simon Fraser.

        Let's not encourage integral snapping by having these functions around.
        
        No change in functionality.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::pixelSnappedElementRect): Deleted.
        (WebCore::AccessibilityObject::pixelSnappedSize): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        * page/FrameView.cpp:
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty):
        * platform/graphics/LayoutPoint.h:
        (WebCore::snappedIntSize):
        (WebCore::snapSizeToDevicePixel):
        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::pixelSnappedLocation): Deleted.
        (WebCore::LayoutRect::pixelSnappedX): Deleted.
        (WebCore::LayoutRect::pixelSnappedY): Deleted.
        (WebCore::LayoutRect::pixelSnappedWidth): Deleted.
        (WebCore::LayoutRect::pixelSnappedHeight): Deleted.
        (WebCore::LayoutRect::pixelSnappedMaxX): Deleted.
        (WebCore::LayoutRect::pixelSnappedMaxY): Deleted.
        (WebCore::snappedIntRectFromEdges): Deleted.
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::pixelSnappedLogicalTopForFloat): Deleted.
        (WebCore::RenderBlockFlow::pixelSnappedLogicalBottomForFloat): Deleted.
        (WebCore::RenderBlockFlow::pixelSnappedLogicalLeftForFloat): Deleted.
        (WebCore::RenderBlockFlow::pixelSnappedLogicalRightForFloat): Deleted.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedLogicalHeight):
        (WebCore::RenderBox::pixelSnappedLogicalWidth):
        (WebCore::RenderBox::pixelSnappedBorderBoxRect):
        (WebCore::RenderBox::pixelSnappedWidth): Deleted.
        (WebCore::RenderBox::pixelSnappedHeight): Deleted.
        (WebCore::RenderBox::pixelSnappedFrameRect): Deleted.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeWidth):
        (WebCore::nodeHeight):
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::isPointInResizeControl):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::buttonRect):
        * rendering/RenderView.h:

2014-08-27  Enrica Casucci  <enrica@apple.com>

        textStylingAtPosition returns incorrect values after executing toggleBold, toggleItalic and toggleUnderline.
        https://bugs.webkit.org/show_bug.cgi?id=136323
        rdar://problem/18141964

        Reviewed by Antti Koivisto.

        For underline style we need to check typingStyle first and use that information to populate
        the dictionary. If there is no typing style we can use the render style.

        * WebCore.exp.in:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):

2014-08-28  Iago Toral  <itoral@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WaylandEventSource
        https://bugs.webkit.org/show_bug.cgi?id=136213

        Reviewed by Martin Robinson.

        Add the WaylandEventSource class. Its static method, createEventSource(),
        creates a new GSource object that is attached to the main context and
        enables handling Wayland display events through the GLib's main loop.

        The method will be called by the nested Wayland compositor during its
        initialization, which will also take the control over the ownership and
        will be tasked with properly removing the GSource from the main context.

        GLibSource is a GSource-based struct that additionally holds a GPollFD object
        and the pointer to the wl_display object whose event loop we'll be
        dispatching during the GSource dispatch. This is the type that g_source_new
        uses when allocating the new GSource object.

        The GSource is assigned the default priorty, can recurse, and is attached
        to the main context.

        * PlatformGTK.cmake:
        * platform/graphics/wayland/WaylandEventSource.cpp: Added.
        (WebCore::GLibSource::initialize):
        (WebCore::GLibSource::check):
        (WebCore::GLibSource::dispatch):
        (WebCore::prepareCallback):
        (WebCore::checkCallback):
        (WebCore::dispatchCallback):
        (WebCore::WaylandEventSource::createDisplayEventSource):
        * platform/graphics/wayland/WaylandEventSource.h: Added.

2014-08-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Safari at com.apple.WebCore: WebCore::AXObjectCache::clearTextMarkerNodesInUse
        https://bugs.webkit.org/show_bug.cgi?id=136333

        Reviewed by David Kilzer.

        If a Node is asked for it's Document when it's not actually in a document, it can lead to an assert/crash.
        We can avoid this by checking that the node is in a document before asking for its document.

        I was not able to make a test case.      

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::clearTextMarkerNodesInUse):

2014-08-28  Andreas Kling  <akling@apple.com>

        ASSERTION FAILED: !m_renderView.document().inPageCache() in compositing/iframes/resources/page-cache-helper.html
        <https://webkit.org/b/136329>

        Cancel any pending compositing layer updates when moving a document
        into the page cache.

        Reviewed by Zalan Bujtas.

        * dom/Document.cpp:
        (WebCore::Document::documentWillSuspendForPageCache):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cancelCompositingLayerUpdate):
        * rendering/RenderLayerCompositor.h:

2014-08-28  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect selection clearing on a document without regions
        https://bugs.webkit.org/show_bug.cgi?id=134901

        Reviewed by David Hyatt.

        When we select all the content of document with named flows but without regions,
        the start and end points of selection is cached in RenderView. However, since
        the document has named flows, the selection is split between the subtrees. During the split,
        it is possible that the cached end-points of the original selection are not included
        in any of the resulting subtree selection and they are not marked accordingly.
        In order to process the selection clearing correctly, we have to take the original
        selection end-points into account.

        Test: fast/regions/selection/select-all-without-regions.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isSelectionBorder):

2014-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_uri_response_get_http_headers to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=136248

        Reviewed by Gustavo Noronha Silva.

        Move the code to update the SoupMessageHeaders to a new public
        method.

        * platform/network/soup/ResourceResponse.h:
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateSoupMessageHeaders):
        (WebCore::ResourceResponse::toSoupMessage):

2014-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove support for GTK+2 theme rendering
        https://bugs.webkit.org/show_bug.cgi?id=136285

        Reviewed by Philippe Normand.

        GTK+2 is only used by the plugin process that doesn't need to
        render html controls themed. Since the theme files are still
        built for WebCorePlatformGTK2, we need to provide dummy
        implementations for the pure virtual methods when
        GTK_API_VERSION_2 is defined.

        * PlatformGTK.cmake: Remove deleted files from compilation.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::getScreenDPI):
        (WebCore::RenderThemeGtk::systemFont):
        (WebCore::RenderThemeGtk::sliderTickSize):
        (WebCore::RenderThemeGtk::sliderTickOffsetFromTrackCenter):
        (WebCore::RenderThemeGtk::getScreenDPI): Deleted.
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp: Removed.
        * platform/gtk/RenderThemeGtk3.cpp:
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::hasThumb):
        (WebCore::ScrollbarThemeGtk::backButtonRect):
        (WebCore::ScrollbarThemeGtk::forwardButtonRect):
        (WebCore::ScrollbarThemeGtk::trackRect):
        (WebCore::ScrollbarThemeGtk::registerScrollbar):
        (WebCore::ScrollbarThemeGtk::unregisterScrollbar):
        (WebCore::ScrollbarThemeGtk::updateScrollbarsFrameThickness):
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/gtk/ScrollbarThemeGtk2.cpp: Removed.
        * platform/gtk/WidgetRenderingContext.cpp: Removed.
        * platform/gtk/WidgetRenderingContext.h: Removed.

2014-08-28  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix for the Wayland windowing target after r173052.

        * platform/graphics/wayland/WaylandSurface.cpp: Include the IntSize header.
        * platform/graphics/wayland/WaylandSurface.h: Forward-declare IntSize.

2014-08-27  Csaba Osztrogonác  <ossy@webkit.org>

        One more URTBF after r173047.

        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        (webkitAccessibleComponentGetExtents):

2014-08-27  Iago Toral  <itoral@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WaylandSurface
        https://bugs.webkit.org/show_bug.cgi?id=136220

        Reviewed by Martin Robinson.

        Add the WaylandSurface class. An objects of this type is meant to be used
        by the LayerTreeHostGtk in the WebProcess and is constructed via the
        WaylandDisplay::createSurface() method.

        LayerTreeHostGtk uses such object to perform frame requests to the nested
        Wayland compositor in the UIProcess, and to create the GLContextEGL object
        that's used during the layer flushing and compositing.

        The resize() method is called whenever LayerTreeHostGtk is being resized,
        and basically only wraps the wl_egL_window_resize() call.

        * PlatformGTK.cmake:
        * platform/graphics/wayland/WaylandSurface.cpp: Added.
        (WebCore::frameCallback):
        (WebCore::WaylandSurface::WaylandSurface):
        (WebCore::WaylandSurface::~WaylandSurface):
        (WebCore::WaylandSurface::resize):
        (WebCore::WaylandSurface::createGLContext):
        (WebCore::WaylandSurface::requestFrame):
        * platform/graphics/wayland/WaylandSurface.h: Added.
        (WebCore::WaylandSurface::surface):
        (WebCore::WaylandSurface::nativeWindowHandle):

2014-08-27  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r173047.

        * accessibility/atk/WebKitAccessibleInterfaceImage.cpp:
        (webkitAccessibleImageGetImagePosition):

2014-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Cleanup snapSizeToPixel/snapSizeToDevicePixel.
        https://bugs.webkit.org/show_bug.cgi?id=136264

        Reviewed by Simon Fraser.
        
        1. Align snapSizeToPixel()/snapSizeToDevicePixel() function names with the rest of snapping
        functions. ->snappedIntSize()/snapSizeToDevicePixel().
        2. Operate on LayoutSize/LayoutPoint instead of LayoutUnit/LayoutUnit to reflect functionality.

        Covered by existing tests.

        * platform/LayoutUnit.h:
        (WebCore::snapSizeToPixel): Deleted.
        (WebCore::snapSizeToDevicePixel): Deleted.
        * platform/graphics/LayoutPoint.h:
        (WebCore::snappedIntSize):
        (WebCore::snapSizeToDevicePixel):
        (WebCore::pixelSnappedIntSize): Deleted.
        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::pixelSnappedSize):
        (WebCore::LayoutRect::pixelSnappedWidth):
        (WebCore::LayoutRect::pixelSnappedHeight):
        (WebCore::pixelSnappedIntRect):
        (WebCore::pixelSnappedIntRectFromEdges):
        (WebCore::pixelSnappedForPainting):
        (WebCore::directionalPixelSnappedForPainting):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pixelSnappedClientWidth):
        (WebCore::RenderBox::pixelSnappedClientHeight):
        (WebCore::RenderBox::pixelSnappedOffsetWidth):
        (WebCore::RenderBox::pixelSnappedOffsetHeight):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetWidth):
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollWidth):
        (WebCore::RenderLayer::scrollHeight):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2014-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Rename LayoutRect's device pixel snapping functions.
        https://bugs.webkit.org/show_bug.cgi?id=136319

        Reviewed by Simon Fraser.

        From pixelSnappedForPainting() to snapRectToDevicePixels() and 
        pixelSnappedIntRect*() to snappedIntRect*().

        No change in functionality.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::boundingBoxForQuads):
        (WebCore::AccessibilityObject::isOnscreen):
        (WebCore::AccessibilityObject::scrollToMakeVisible):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::pixelSnappedBoundingBoxRect):
        (WebCore::AccessibilityObject::pixelSnappedElementRect):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityActivationPoint]):
        (-[WebAccessibilityObjectWrapper accessibilityFrame]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper position]):
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMHTMLAreaElement boundingBoxWithOwner:]):
        (-[DOMHTMLAreaElement absoluteQuadWithOwner:]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        * dom/Node.h:
        (WebCore::Node::pixelSnappedBoundingBox):
        (WebCore::Node::pixelSnappedRenderRect):
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::absoluteRect):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didPaint):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotNode):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::extendedBackgroundRectForPainting):
        (WebCore::FrameView::windowClipRectForFrameOwner):
        (WebCore::FrameView::convertFromRendererToContainingView):
        * page/Page.cpp:
        (WebCore::Page::addRelevantRepaintedObject):
        (WebCore::Page::addRelevantUnpaintedObject):
        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToClickEvents):
        * platform/DragImage.cpp:
        (WebCore::createDragImageForImage):
        * platform/graphics/LayoutRect.cpp:
        (WebCore::enclosingRectToDevicePixels):
        (WebCore::enclosingRectForPainting): Deleted.
        * platform/graphics/LayoutRect.h:
        (WebCore::snappedIntRect):
        (WebCore::snappedIntRectFromEdges):
        (WebCore::snapRectToDevicePixels):
        (WebCore::snapRectToDevicePixelsWithWritingDirection):
        (WebCore::pixelSnappedIntRect): Deleted.
        (WebCore::pixelSnappedIntRectFromEdges): Deleted.
        (WebCore::pixelSnappedForPainting): Deleted.
        (WebCore::directionalPixelSnappedForPainting): Deleted.
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computePixelAlignment):
        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addVisualOverflowFromTheme):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::RenderBlock::absoluteRects):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::clipOutFloatingObjects):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteRects):
        (WebCore::RenderBox::absoluteContentBox):
        (WebCore::RenderBox::outlineBoundsForRepaint):
        (WebCore::RenderBox::addFocusRingRects):
        (WebCore::RenderBox::getBackgroundPaintedExtent):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedFrameRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        (WebCore::RenderEmbeddedObject::isReplacementObscured):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::currentTransform):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::scrollCornerRect):
        (WebCore::RenderLayer::drawPlatformResizerImage):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):
        (WebCore::RenderLayer::hitTestResizerInFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateTransform):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::resetContentsRect):
        (WebCore::RenderLayerBacking::updateImageContents):
        (WebCore::RenderLayerBacking::backgroundBoxForPainting):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        (WebCore::RenderListBox::paintScrollbar):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::updateLogicalWidth):
        (WebCore::RenderMeter::computeLogicalHeight):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::addPDFURLRect):
        (WebCore::RenderObject::paintOutline):
        (WebCore::RenderObject::absoluteBoundingBoxRect):
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaintSlowRepaintObject):
        (WebCore::RenderObject::pixelSnappedAbsoluteClippedOverflowRect):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::computeLogicalHeight):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::showPopup):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::addFocusRingRects):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoBox):
        (WebCore::RenderVideo::paintReplaced):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::RenderView::absoluteRects):
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::unscaledDocumentRect):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):
        (WebCore::RenderWidget::paint):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::outlineBoundsForRepaint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::selectionRectForTextFragment):

2014-08-27  Daniel Bates  <dabates@apple.com>

        Scrollbar corner can be drawn outside containing frame
        https://bugs.webkit.org/show_bug.cgi?id=133131
        <rdar://problem/16382769>

        Reviewed by Simon Fraser.

        Merged from Blink (patch by Levi Weintraub):
        <https://src.chromium.org/viewvc/blink?revision=170625&view=revision>

        Fixes an issue where the scroll corner may be painted outside the rectangle of
        its associated frame by setting a clip rectangle before painting the scroll bar(s)
        and scroll corner.

        Test: scrollbars/custom-scrollbars-paint-outside-iframe.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):

2014-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Rename FloatPoint/FloatRect device pixel snapping functions.
        https://bugs.webkit.org/show_bug.cgi?id=136314

        Reviewed by Simon Fraser.

        From *edToDevicePixels() to *PointToDevicePixels() (* = floor/round/ceil)

        EnclosedIntRect -> enclosingIntRect() changes functionality for InspectorOverlay painting,
        but currently untestable.

        * WebCore.exp.in:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::showPaintRect):
        * platform/graphics/FloatPoint.h:
        (WebCore::flooredIntSize):
        (WebCore::floorPointToDevicePixels):
        (WebCore::ceilPointToDevicePixels):
        (WebCore::flooredToDevicePixels): Deleted.
        (WebCore::ceiledToDevicePixels): Deleted.
        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosingRectToDevicePixels):
        (WebCore::enclosingRectExtendedToDevicePixels): Deleted. Renamed.
        (WebCore::enclosedIntRect): Deleted. Not needed.
        * platform/graphics/FloatRect.h:

2014-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Rename LayoutPoint's device pixel snapping functions.
        https://bugs.webkit.org/show_bug.cgi?id=136306

        Reviewed by Simon Fraser.

        From *edForPainting() to *PointToDevicePixels() (* = floor/round/ceil)

        No change in functionality.

        * platform/graphics/LayoutPoint.h:
        (WebCore::roundPointToDevicePixels):
        (WebCore::floorPointToDevicePixels):
        (WebCore::ceilPointToDevicePixels):
        (WebCore::roundedForPainting): Deleted.
        (WebCore::flooredForPainting): Deleted.
        (WebCore::ceiledForPainting): Deleted.
        * platform/graphics/LayoutRect.cpp:
        (WebCore::enclosingRectForPainting):
        * platform/graphics/LayoutRect.h:
        (WebCore::directionalPixelSnappedForPainting):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2014-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Rename LayoutSize's device pixel snapping functions.
        https://bugs.webkit.org/show_bug.cgi?id=136310

        Reviewed by Simon Fraser.

        From *edForPainting() to *SizeToDevicePixels() (* = floor/round/ceil)

        No change in functionality.

         * platform/graphics/LayoutSize.h:
        (WebCore::floorSizeToDevicePixels):
        (WebCore::flooredForPainting): Deleted.
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::computeIntrinsicDimensions):

2014-08-27  Brian J. Burg  <burg@cs.washington.edu>

        Enums in ScrollTypes and PlatformWheelEvent should not use uint64_t storage
        https://bugs.webkit.org/show_bug.cgi?id=136318

        Reviewed by Simon Fraser.

        This regressed in a replay-related patch. Revert back to uint8_t storage size.

        * platform/PlatformWheelEvent.h:
        * platform/ScrollTypes.h:
        * replay/WebInputs.json:

2014-08-27  Simon Fraser  <simon.fraser@apple.com>

        Speling is hard.

        Reviewed by Tim Horton.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handlePasteGlobalSelection):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):

2014-08-27  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

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

2014-08-27  Andreas Kling  <akling@apple.com>

        Drawing text in an SVG font causes load events to be fired.
        <https://webkit.org/b/136269>
        <rdar://problem/15724915>

        Don't flush pending load events in Document::implicitClose() for frameless documents.
        This is a targeted fix for an issue where parsing SVG fonts during layout would cause
        event dispatch to happen in the main document, leading to arbitrary JS execution.

        Note that the testcase only works in DRT/WTR, since once the SVG font is in cached
        by WebCore, we won't reparse it again. Caches are cleared between tests, so it will
        correctly fail if this should regress.

        Longer-term, we should clean this up and get rid of the global dispatch entirely.

        Reviewed by Simon Fraser.

        Test: fast/text/svg-font-trigger-load-event.html

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

2014-08-27  Simon Fraser  <simon.fraser@apple.com>

        Some EventHandler naming cleanup
        https://bugs.webkit.org/show_bug.cgi?id=136303

        Reviewed by Beth Dakin.
        
        Rename "mev" variables to "mouseEvent".
        
        No behavior change.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::prepareMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):

2014-08-27  Simon Fraser  <simon.fraser@apple.com>

        Some EventHandler naming cleanup
        https://bugs.webkit.org/show_bug.cgi?id=136303

        Reviewed by Beth Dakin.

        Rename PlatformMouseEvent variables from "mouseEvent" to "platformMouseEvent"
        so that a later patch can rename "mev" to "mouseEvent".
        
        0 => nullptr.
        
        No behavior change.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::invalidateClick):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handlePasteGlobalSelection):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):

2014-08-27  Beth Dakin  <bdakin@apple.com>

        Make isScrollableOrRubberbandable() a virtual function on RenderLayerModelObject
        https://bugs.webkit.org/show_bug.cgi?id=136307

        Reviewed by Simon Fraser.

        Remove extra parentheses. 
        * page/FrameView.cpp:
        (WebCore::FrameView::isScrollable):

        Mark isScrollableOrRubberbandable() as override now that the root implementation 
        is moving to RenderLayerModelObject. It can also be private now.
        * rendering/RenderBox.h:

        isBox() check and cast are no longer necessary.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasScrollableOrRubberbandableAncestor):

        Base implementation should return false.
        * rendering/RenderLayerModelObject.h:
        (WebCore::RenderLayerModelObject::isScrollableOrRubberbandable):

        Mark as override.
        * rendering/RenderView.h:

2014-08-27  Antti Koivisto  <antti@apple.com>

        REGRESSION(r172946): Plugin tests asserting on Yosemite debug bot
        https://bugs.webkit.org/show_bug.cgi?id=136301

        Reviewed by Alexey Proskuryakov.

        Don't pull the priority from the platform request if it is not defined.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2014-08-27  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Crash when you open Web Inspector in a private window (due to IndexedDB)
        https://bugs.webkit.org/show_bug.cgi?id=136293

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames): Null check idbRequest from
        IDBFactory::getDatabaseNames, which can return null now after r172603 in private browsing.

2014-08-27  Beth Dakin  <bdakin@apple.com>

        overflow:scroll elements should not latch to the body if the body is 
        overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=136273

        Reviewed by Darin Adler.

        This patch adds an optional parameter to isScrollable(). The Scrollability 
        parameter that allows the caller to define what they mean by 'scrollable.' Most 
        callers are interested in the default value, Scrollability::Scrollable, which 
        means that there is actually content to scroll to, and a scrollbar that will allow 
        you to access it. In some cases, such as this latching case, callers want to know 
        if the FrameView is allowed to rubber-band, which the main frame might be allowed 
        to do even if there is no content to scroll to. In that case, callers use 
        Scrollability::ScrollableOrRubberbandable.
        * page/FrameView.cpp:
        (WebCore::FrameView::isScrollable):
        (WebCore::FrameView::hasScrollableOrRubberbandableAncestor):

        New virtual function on ScrollableArea answers whether a ScrollableArea has any 
        scrollable or rubber-bandable ancestor.
        * page/FrameView.h:
        * platform/ScrollableArea.h:

        Events should only be allowed to prevent stretching if there is some ancestor 
        ScrollableArea that will be able to make use of the event. 
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):

        New ScrollableArea virtual function.
        * platform/win/PopupMenuWin.h:

        New RenderBox isScrollableOrRubberbandable() returns just 
        canBeScrolledAndHasScrollableArea() for most RenderBox, but will be overridden by 
        RenderView.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isScrollableOrRubberbandable):
        * rendering/RenderBox.h:

        Recurse up the parent chain to find out if anything is scrollable or just rubber-
        bandable.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasScrollableOrRubberbandableAncestor):
        * rendering/RenderLayer.h:

        Call into RenderLayer.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::hasScrollableOrRubberbandableAncestor):
        * rendering/RenderListBox.h:

        Override isScrollableOrRubberbandable() to handle the main frame case where the 
        main frame is typically allowed to rubber-band even if there is no content to 
        scroll to.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::isScrollableOrRubberbandable):
        * rendering/RenderView.h:

2014-08-27  Benjamin Poulain  <bpoulain@apple.com>

        Updating attributes on HTML elements do not invalidate the style correctly unless the attribute name is lowercase in the stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=136270

        Reviewed by Andreas Kling.

        In HTML, WebKit treats every attribute name lowercase to implement case-insensitive matching.
        When invalidating style, the StyleResolver was ignoring HTML and always using the XML names.

        This patch split the names on RuleFeatureSet in two sets: one for XML, one for HTML.
        In StyleResolver, the name used depends on the type of the element being updated.

        This patch also adds nodeNeedsStyleRecalc() to Internals to test the optimization and various cases
        of style update.

        Tests: fast/css/attribute-for-content-property-style-update-html.html
               fast/css/attribute-for-content-property-style-update-xhtml.xhtml
               fast/css/attribute-style-invalidation-optimization-html.html
               fast/css/attribute-style-invalidation-optimization-xhtml.xhtml
               fast/css/attribute-style-update-html.html
               fast/selectors/attribute-style-update-html.html
               fast/selectors/attribute-style-update-svg-in-html.html
               fast/selectors/attribute-style-update-xhtml.xhtml

        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::collectFeaturesFromSelector):
        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::clear):
        * css/RuleFeature.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::hasSelectorForAttribute):
        * dom/Element.cpp:
        (WebCore::Element::willModifyAttribute):
        * testing/Internals.cpp:
        (WebCore::Internals::address):
        (WebCore::Internals::nodeNeedsStyleRecalc):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-08-27  Benjamin Poulain  <bpoulain@apple.com>

        Update the CSS Grammar selector names to get closer to the latest terminology
        https://bugs.webkit.org/show_bug.cgi?id=136277

        Reviewed by Andreas Kling.

        CSS Selector Level 4 gives useful definitions for various parts of a selector
        (see http://dev.w3.org/csswg/selectors4/#structure). This patch updates our names to be closer
        to that spec.

        Stricto sensu, our definition of "simple selector list" is wrong. I did not attempt to fix this
        because updates of CSS Selector Level 4 and WebVTT will eventually make that whole concept useless.

        * css/CSSGrammar.y.in:

2014-08-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Unskip compositing test
        https://bugs.webkit.org/show_bug.cgi?id=136151

        Reviewed by Csaba Osztrogonác.

        * rendering/RenderLayerBacking.cpp: Set true to setContentsOpaque() to support compositing test.
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):

2014-08-26  Vivek Galatage  <vivek.vg@samsung.com>

        Canvas direction should reflect change in dir attribute and also across save/restore operations
        https://bugs.webkit.org/show_bug.cgi?id=136098

        Reviewed by Darin Adler.

        Changed State.m_direction type from TextDirection to Direction enum to accomodate 'inherit'
        as a separate value. Modified the getter to compute the 'live' value for the direction attribute.
        Removed explicit passing of direction to CanvasRenderingContext2D::State constructor.

        Updated existing canvas-direction.html with additional cases to reflect this change.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::reset):
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::toTextDirection):
        (WebCore::CanvasRenderingContext2D::direction):
        (WebCore::CanvasRenderingContext2D::setDirection):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        (WebCore::inheritedDirection): Deleted.
        * html/canvas/CanvasRenderingContext2D.h:

2014-08-26  Benjamin Poulain  <bpoulain@apple.com>

        Minor style tweak on StyleResolveTree
        https://bugs.webkit.org/show_bug.cgi?id=136233

        Reviewed by Sam Weinig.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveTree):
        Clang likely optimized it away, but I find that explicit style cleaner.

2014-08-26  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: put feature flags for Inspector domains in the protocol specification
        https://bugs.webkit.org/show_bug.cgi?id=136027

        Reviewed by Timothy Hatcher.

        Add 'featureGuard' settings to wrap domains with ENABLE macros.

        No new tests. No behavior was changed.

        * inspector/protocol/Database.json:
        * inspector/protocol/IndexedDB.json:
        * inspector/protocol/Replay.json:

2014-08-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Some projects are incorrectly installed to $BUILT_PRODUCTS_DIR
        https://bugs.webkit.org/show_bug.cgi?id=136267

        Reviewed by Dan Bernstein.

        INSTALL_PATH was set to $BUILT_PRODUCTS_DIR for engineering configurations in r20225 as part of a build fix.
        Not only is this no longer necessary to build, but it causes built products to be incorrectly installed in
        engineering configurations.

        Remove the setting of INSTALL_PATH from the pbxproj file so that the value specified in the xcconfig files is
        used instead.

        * WebCore.xcodeproj/project.pbxproj:

2014-08-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] WebKit IDL incorrectly passes HWND as OLE_HANDLE
        https://bugs.webkit.org/show_bug.cgi?id=136258
        <rdar://problem/18134138>

        Reviewed by Tim Horton.

        Avoid 32/64-bit truncation by preventing 64-bit HWND (and other)
        values from passing through the 32-bit OLE_HANDLE data type.

        * platform/win/WindowMessageBroadcaster.cpp:
        (WebCore::WindowMessageBroadcaster::addListener):
        (WebCore::WindowMessageBroadcaster::removeListener):
        (WebCore::WindowMessageBroadcaster::destroy):
        (WebCore::WindowMessageBroadcaster::unsubclassWindow):
        (WebCore::WindowMessageBroadcaster::SubclassedWndProc):

2014-08-25  Maciej Stachowiak  <mjs@apple.com>

        Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
        https://bugs.webkit.org/show_bug.cgi?id=136082

        Reviewed by Alexey Proskuryakov.

        * platform/mac/Language.mm:
        (WebCore::httpStyleLanguageCode): Replace use of WKCopyCFLocalizationPreferredName
        with new WebCoreNSStringExtras helper.
        * platform/mac/WebCoreNSStringExtras.mm: Replacements for the aspects of
        WKCopyCFLocalizationPreferredName.
        (preferredBundleLocalizationName): New helper - most preferred localization available
        in the main bundle, canonicalized the way we like it.
        (canonicalLocalizationName): Convert a lcalization name to a string with language and
        country code, using default if necessary (e.g. "en" maps to "en_US").
        * WebCore.order: Remove mention of WKCopyCFLocalizationPreferredName.
        * WebCore.exp.in: ditto; also export preferredBundleLocalizationName for WebKit(2).
        * platform/ios/WebCoreSystemInterfaceIOS.mm: ditto
        * platform/mac/WebCoreSystemInterface.h: ditto
        * platform/mac/WebCoreSystemInterface.mm: ditto
        * platform/spi/cf: Added.
        * platform/spi/cf/CFLocaleSPI.h: Added. Declare
        CFLocaleGetLanguageRegionEncodingForLocaleIdentifier.

2014-08-26  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Positioned polygon reftests failing
        https://bugs.webkit.org/show_bug.cgi?id=135925

        Reviewed by David Hyatt.

        We didn't respect the shape-margin before a positioned polygon, since we checked
        the shape-margin for only 1 vertex for a polygon edge. This patch fixes the behavior,
        removes the tests from the skipped list and updates 1 test, which was incorrect.

        Updated existing test and removed tests from skipped list.

        * rendering/shapes/PolygonShape.cpp:
        (WebCore::clippedCircleXRange):
        (WebCore::PolygonShape::getExcludedInterval):

2014-08-26  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Remove float to LayoutUnit ceil/round function wrappers.
        https://bugs.webkit.org/show_bug.cgi?id=136253

        Reviewed by Simon Fraser.

        These functions wrap LayoutUnit::fromFloatCeil/fromFloatRound() functions to ceil/round float to LayoutUnit.
        Their usage is limited and can easily be confused with the snapping functions (snap to css/device pixels).

        No change in functionality.

        * platform/LayoutUnit.h:
        (WebCore::roundedLayoutUnit): Deleted. : Callers use the more explicit LayoutUnit::fromFloatRound() function.
        (WebCore::ceiledLayoutUnit): Deleted. : Callers use the more explicit LayoutUnit::fromFloatCeil() function.
        * rendering/RenderBlock.cpp:
        (WebCore::updatePreferredWidth):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::adjustFloatForSubPixelLayout): Deleted.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetForInFlowPositionedInline):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth):

2014-08-26  Simon Fraser  <simon.fraser@apple.com>

        Ensure that layout is up-to-date before hit testing
        https://bugs.webkit.org/show_bug.cgi?id=136242
        rdar://problem/17435564

        Reviewed by Tim Horton.
        
        Various code paths can call into RenderView::hitTest() but fail to
        ensure that layout is up-to-date. This is a conservative change that
        fixes the issue for callers of EventHandler::hitTestResultAtPoint(),
        including WebPage::acceptsFirstMouse() and WebFrame::hitTest().
        
        This change is not general enough that we can ASSERT(!needsLayout())
        in RenderView::hitTest() yet.
        
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):

2014-08-26  Beth Dakin  <bdakin@apple.com>

        Rubber-banding in overflow:scroll regions does not work correctly with 
        direction:rtl
        https://bugs.webkit.org/show_bug.cgi?id=136176

        Reviewed by Tim Horton.

        Small cleanup.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::visibleContentRectInternal):

2014-08-26  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r172963

        * page/DOMTimer.h:

2014-08-25  Gavin Barraclough  <barraclough@apple.com>

        DOMTimer may be deleted during timer fire
        https://bugs.webkit.org/show_bug.cgi?id=136198

        Reviewed by Geoff Garen.

        Consequentially ScheduledActions may also be deleted mid execution.
        This is fairly surprising & fragile, let's make this simpler.

        Currently DOMTimer instances are effectively owned by the ScriptExecutionContext.
        There is a 1-1 mapping between timers and contexts, all timers are help in a map
        on the context and if the context goes away all timers are deleted. Rather than
        being implemented in a straightforward fashion (a smart pointer type for the map
        value) this is currently implemented by having the timer objects listen for the
        context going away using contextDestroyed, and deleting themselves if so.

        Switch to using a smart pointer for values of m_timeouts in ScriptExecutionContext.
        By using a RefCounted object we can also extend the lifetime of the DOMTimer instance
        from within the DOMTimer::fired method, so the object is not destroyed while the
        member function is still on the stack.

        * WebCore.xcodeproj/project.pbxproj:
            - project -> private since DOMTimer could no longer be a forward declare in ScriptExecutionContext.h.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::adjustMinimumTimerInterval):
        (WebCore::ScriptExecutionContext::didChangeTimerAlignmentInterval):
            - auto* -> auto& since value type in map is no longer a raw pointer.
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::addTimeout):
            - DOMTimer* -> PassRefPtr<DOMTimer>
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
            - adopt the initial ref, and pass to addTimeout.
        (WebCore::DOMTimer::install):
            - updated comment.
        (WebCore::DOMTimer::removeById):
            - instead of explicitly deleting the timer and assuming this will implicitly remove it from the context map,
              we explicitly remove it from the context map and assume this will implicitly deleting the timer!
        (WebCore::DOMTimer::fired):
            - Add a RefPtr to keep the DOMTimer object alive until the fired method completes; to cancel a one-shot timer
              just remove it from the context's map, rather than explicitly deleting it.
        (WebCore::DOMTimer::~DOMTimer): Deleted.
        (WebCore::DOMTimer::contextDestroyed): Deleted.
            - no need! object lifetime management now handled by smart pointers.
        * page/DOMTimer.h:
            - added parent class RefCounted<DOMTimer>.

2014-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Selection background is rendered white when unfocused with recent GTK+
        https://bugs.webkit.org/show_bug.cgi?id=136251

        Reviewed by Martin Robinson.

        This is due to a change in the GTK+ theme, but because we are not
        using the right flags to get the selections colors. We should use
        GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_FOCUSED when focused and
        GTK_STATE_FLAG_SELECTED when unfocused, instead of
        GTK_STATE_FLAG_ACTIVE when unfocused.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionForegroundColor):

2014-08-26  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Utilize espeak as a synthesizer back-end for WebSpeech
        https://bugs.webkit.org/show_bug.cgi?id=136127

        Reviewed by Gyuyoung Kim.

        Utilize espeak API to have support for speak, cancel and initializeVoiceList.

        * PlatformEfl.cmake:
        * platform/efl/PlatformSpeechSynthesisProviderEfl.cpp:
        (WebCore::PlatformSpeechSynthesisProviderEfl::PlatformSpeechSynthesisProviderEfl):
        (WebCore::PlatformSpeechSynthesisProviderEfl::convertRateToEspeakValue):
        (WebCore::PlatformSpeechSynthesisProviderEfl::convertVolumeToEspeakValue):
        (WebCore::PlatformSpeechSynthesisProviderEfl::convertPitchToEspeakValue):
        (WebCore::PlatformSpeechSynthesisProviderEfl::voiceName):
        (WebCore::PlatformSpeechSynthesisProviderEfl::engineInit):
        (WebCore::PlatformSpeechSynthesisProviderEfl::currentVoice):
        (WebCore::PlatformSpeechSynthesisProviderEfl::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesisProviderEfl::speak):
        (WebCore::PlatformSpeechSynthesisProviderEfl::cancel):
        (WebCore::PlatformSpeechSynthesisProviderEfl::fireSpeechEvent):
        * platform/efl/PlatformSpeechSynthesisProviderEfl.h:
        * platform/efl/PlatformSpeechSynthesizerEfl.cpp:
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::cancel):

2014-08-26  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break using clang
        https://bugs.webkit.org/show_bug.cgi?id=136245

        Reviewed by Gyuyoung Kim.

        * css/ViewportStyleResolver.cpp: Includes NodeRenderStyle.h

2014-08-26  Mark Rowe  <mrowe@apple.com>

        Build fix after r172951.

        * fileapi/Blob.h: Give the argument the name that the predicates expect.

2014-08-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toFile() instead of manual functions.
        https://bugs.webkit.org/show_bug.cgi?id=136207

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * fileapi/Blob.h: Define BLOB_TYPE_CASTS.
        * fileapi/File.h: Use BLOB_TYPE_CASTS to generate toFile().
        (WebCore::toFile): Deleted.

2014-08-25  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: remove roundedLayoutPoint/roundedLayoutSize functions.
        https://bugs.webkit.org/show_bug.cgi?id=136236

        Reviewed by Simon Fraser.

        These functions simply call LayoutPoint/LayoutSize c'tors. They don't round the input value at all.

        Non change in functionality.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computePageLocation):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/Touch.cpp:
        (WebCore::Touch::Touch):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        * page/EventHandler.cpp:
        (WebCore::selectionExtentRespectingEditingBoundary):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):
        * platform/graphics/LayoutPoint.h:
        (WebCore::roundedLayoutPoint): Deleted.
        * platform/graphics/LayoutSize.h:
        (WebCore::roundedLayoutSize): Deleted.
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::localCaretRect):
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::absoluteToContents):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::mapAbsoluteToLocalPoint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mapLocalToContainer):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::nodeAtFloatPoint):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):

2014-08-25  Zalan Bujtas  <zalan@apple.com>

        Rename RenderObject::showTree() and showTreeForThis() to showNodeTree*().
        https://bugs.webkit.org/show_bug.cgi?id=136238

        Reviewed by Simon Fraser.

        showNodeTree()/showNodeTreeForThis() reflects the functionality better.

        No change in functionality.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showNodeTreeForThis):
        (showNodeTree):
        (WebCore::InlineBox::showTreeForThis): Deleted.
        (showTree): Deleted.
        * rendering/InlineBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showNodeTreeForThis):
        (showNodeTree):
        (WebCore::RenderObject::showTreeForThis): Deleted.
        (showTree): Deleted.
        * rendering/RenderObject.h:

2014-08-25  Antti Koivisto  <antti@apple.com>

        Don't pass priority as parameter to ResourceLoadScheduler
        https://bugs.webkit.org/show_bug.cgi?id=136232

        Reviewed by Sam Weinig.

        It is part of the ResourceRequest which is also passed in.

        * WebCore.exp.in:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
        (WebCore::ResourceLoadScheduler::schedulePluginStreamLoad):
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * loader/ResourceLoadScheduler.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):

            Restore the original request priority when a delegate modifies the request.

2014-08-25  Beth Dakin  <bdakin@apple.com>

        Rubber-banding in overflow:scroll regions does not work correctly with direction:rtl
        https://bugs.webkit.org/show_bug.cgi?id=136176

        Reviewed by Sam Weinig.

        Use scrollPosition() instead of scrollXOffset() and scrollYOffset() which both add 
        in the scrollOrigin(). Other implementations of visibleContentRectInternal() do 
        not add in the scrollOrigin(), so RenderLayer's shouldn't either in order to be
        consistent. This makes rubber-banding work for RTL because 
        ScrollAnimatorMac::pinnedInDirection() and 
        ScrollAnimatorMac::absoluteScrollPosition() both return the expect values now.

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

2014-08-25  Benjamin Poulain  <benjamin@webkit.org>

        Reduce style marking when using the pseudo class :placeholder-shown
        https://bugs.webkit.org/show_bug.cgi?id=136203

        Reviewed by Darin Adler.

        When the :placeholder-shown filter is hit, we were always marking the RenderStyle as unique.
        As a result, if :placeholder-shown was used without a more restrictive filter (e.g. "*:placeholder-shown"
        or simply ":placeholder-shown"), style sharing was disabled for the whole tree.

        This patch rescope the tree marking to any element that can be affected by a placeholder:
        any the subclass of HTMLTextFormControlElement. For other elements, any change in internal state
        would be irrelevant for "isPlaceholderVisible".

        Styling of :placeholder-shown is covered by the existing tests. Style sharing of :placeholder-shown
        is covered by LayoutTests/fast/css/placeholder-shown-basics.html.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isPlaceholderShown): Deleted.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::makeContextStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::makeElementStyleUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::isPlaceholderShown):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPlaceholderShown):
        (WebCore::SelectorCompiler::makeUniqueIfNecessaryAndTestIsPlaceholderShown): Deleted.

2014-08-25  Antti Koivisto  <antti@apple.com>

        Remove ResourceLoader::didChangePriority
        https://bugs.webkit.org/show_bug.cgi?id=136230

        Reviewed by Andreas Kling.

        It doesn't do anything on any platform.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didChangePriority): Deleted.
        * loader/ResourceLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setLoadPriority):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didChangePriority): Deleted.
        * platform/network/ResourceHandle.h:

2014-08-24  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: rename Inspector::TypeBuilder to Inspector::Protocol
        https://bugs.webkit.org/show_bug.cgi?id=136031

        Reviewed by Timothy Hatcher.

        Rename TypeBuilder namespace to Protocol. Disambiguate where
        necessary. Also rename InspectorTypeBuilder to ProtocolTypes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/InspectorJSTypeBuilders.h: Removed.
        * ForwardingHeaders/inspector/InspectorTypeBuilder.h: Removed.
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspectImpl):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (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::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/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getAccessibilityPropertiesForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::processAccessibilityChildren):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::buildObjectForIntRect):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceTypeJson):
        (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/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForPosition):
        (WebCore::buildInspectorObjectForInput):
        (WebCore::buildInspectorObjectForSession):
        (WebCore::buildInspectorObjectForSessionState):
        (WebCore::buildInspectorObjectForSegmentState):
        (WebCore::SerializeInputToJSONFunctor::SerializeInputToJSONFunctor):
        (WebCore::SerializeInputToJSONFunctor::operator()):
        (WebCore::buildInspectorObjectForSegment):
        (WebCore::InspectorReplayAgent::switchSession):
        (WebCore::InspectorReplayAgent::insertSessionSegment):
        (WebCore::InspectorReplayAgent::removeSessionSegment):
        (WebCore::InspectorReplayAgent::currentReplayState):
        (WebCore::InspectorReplayAgent::getAvailableSessions):
        (WebCore::InspectorReplayAgent::getSessionData):
        (WebCore::InspectorReplayAgent::getSegmentData):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (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):
        * inspector/InspectorResourceAgent.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::InspectorStyleSheet::canBind):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::sendEvent):
        * inspector/PageRuntimeAgent.cpp:

2014-08-25  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] ASSERT failure in WebKitWebSource in StreamingClient
        https://bugs.webkit.org/show_bug.cgi?id=136132

        adoptGRef() has an ASSERT failure if it's used on a floating pointer. For some reason,
        WebKitWebSrc* src in StreamingClient's constructor is floating. Since we
        don't construct this ourselves, I assume this is happening in Playbin.

        If we remove the ref and adopt, GRefPtr's constructor calls gst_object_ref_sink,
        which removes the floating reference and doesn't increment the reference count.
        This should work, but actually causes the page to either lock up or crash (different
        results for different testers).

        In this case, it seems like the adoptGRef / gst_object_ref was the correct thing to do,
        but adoptGRef won't actually let us do. Removing the ASSERT is a bad idea, because
        usually we don't want to adopt floating pointers.

        This is all a long way of saying that making m_src a raw pointer and manually
        calling gst_object_ref(), and calling gst_object_unref in the destructor is the
        best solution in this case, since it fixes the problem while leaving the ASSERT
        to protect us in the much more common case where adopting a floating reference is bad.

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::StreamingClient): Make m_src a raw pointer instead of a GRefPtr.
        (StreamingClient::~StreamingClient): Unref m_src.
        (StreamingClient::createReadBuffer): Replace m_src.get() with m_src, since it's a raw pointer now.
        (StreamingClient::handleResponseReceived): Same.
        (StreamingClient::handleDataReceived): Same.
        (StreamingClient::handleNotifyFinished): Same.
        (CachedResourceStreamingClient::notifyFinished): Same.
        (ResourceHandleStreamingClient::didFail): Same.
        (ResourceHandleStreamingClient::wasBlocked): Same.
        (ResourceHandleStreamingClient::cannotShowURL): Same.

2014-08-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove PopupMenuGtk, SearchPopupMenuGtk
        https://bugs.webkit.org/show_bug.cgi?id=136211

        Reviewed by Carlos Garcia Campos.

        Remove the two classes from the codebase. They're not used anymore
        after the WebKit1 layer of the GTK port was removed some time ago.

        * PlatformGTK.cmake:
        * platform/gtk/PopupMenuGtk.cpp: Removed.
        * platform/gtk/PopupMenuGtk.h: Removed.
        * platform/gtk/SearchPopupMenuGtk.cpp: Removed.
        * platform/gtk/SearchPopupMenuGtk.h: Removed.

2014-08-25  Shivakumar JM  <shiva.jm@samsung.com>

        Web Core: Fix unused parameter build warning.
        https://bugs.webkit.org/show_bug.cgi?id=136208

        Reviewed by Darin Adler.

        Fix unused build warning by removing parameter, which is not used.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):

2014-08-22  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: !trackSizes.isEmpty() in WebCore::createGridTrackList
        https://bugs.webkit.org/show_bug.cgi?id=136149

        Reviewed by Darin Adler.

        The second argument of the repeat() function is a <track-list>
        that must have at least one <track-size>. Should it not be found,
        the declaration must be invalidated.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackRepeatFunction):

2014-08-24  Zan Dobersek  <zdobersek@igalia.com>

        Move WebCore storage code to C++11 lambdas, std::function
        https://bugs.webkit.org/show_bug.cgi?id=126435

        Reviewed by Darin Adler.

        Use C++11 lambdas instead of WTF::bind and std::function<void ()>
        instead of WTF::Function<void ()> in StorageAreaSync, StorageSyncManager,
        StorageThread and StorageTracker classes.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::dispatch):
        * storage/StorageSyncManager.h:
        * storage/StorageThread.cpp:
        (WebCore::StorageThread::dispatch):
        (WebCore::StorageThread::terminate):
        (WebCore::StorageThread::releaseFastMallocFreeMemoryInAllThreads):
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::importOriginIdentifiers):
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):

2014-08-24  Alexey Proskuryakov  <ap@apple.com>

        ASSERT(extractable()) when storing a non-extractable key in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=136202
        rdar://problem/17993967

        Reviewed by Darin Adler.

        Test: crypto/subtle/rsa-indexeddb-non-exportable.html

        Removed the obsolete assertion.

        * crypto/keys/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::exportData):
        * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::exportData):
        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::exportData):

2014-08-24  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: Rename DOM.RGBA and remove workarounds in the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=136025

        Reviewed by Joseph Pecoraro.

        Rename DOM.RGBA to DOM.RGBAColor to avoid name clashes with headers on Windows CE.
        This workaround used to be special-cased in the bindings generator.

        Type names are not used in protocol messages, so this does not introduce legacy issues.

        * inspector/protocol/DOM.json:

2014-08-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Toggle buttons visually broken with GTK+ 3.13.7
        https://bugs.webkit.org/show_bug.cgi?id=136130

        Reviewed by Martin Robinson.

        No new tests. Hopefully covered by existing tests, and our tests only
        run with GTK+ 3.6 anyway.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::paintToggle): use GTK_STATE_FLAG_CHECKED when compiling for
        GTK+ 3.13.7 and above to ensure toggle buttons display as toggled.

2014-08-23  Brady Eidson  <beidson@apple.com>

        Random Gamepad cleanup
        https://bugs.webkit.org/show_bug.cgi?id=136193

        Reviewed by Sam Weinig.

        No new tests (Not tested yet, and no change in behavior anyways)

        - Use DOMWindow WeakPtrs when iterating
        - More references instead of pointers

        * Modules/gamepad/GamepadEvent.cpp:
        (WebCore::GamepadEvent::GamepadEvent):
        * Modules/gamepad/GamepadEvent.h:
        (WebCore::GamepadEvent::create):

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::platformGamepadDisconnected):
        (WebCore::GamepadManager::makeGamepadVisible):
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::gamepadFromPlatformGamepad):
        (WebCore::NavigatorGamepad::gamepadAtIndex): Deleted.
        * Modules/gamepad/NavigatorGamepad.h:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        * page/DOMWindow.h:

2014-08-23  Byungseon Shin  <sun.shin@lge.com>

        Unify GraphicsLayer::setContentsToMedia and setContentsToCanvas
        https://bugs.webkit.org/show_bug.cgi?id=109658

        Reviewed by Martin Robinson.
 
        Based on patch originally written by Tim Horton.
        Merge setContentsToMedia and setContentsToCanvas into setContentsToPlatformLayer.
 
        * WebCore.exp.in:
        Adjust exports.
 
        * platform/graphics/GraphicsLayer.h:
        Move ContentsLayerPurpose enum up out of GraphicsLayer platform implmentations
        and into GraphicsLayer, so we can use it as a parameter.
        Add ContentsLayerForPlugin.
 
        (WebCore::GraphicsLayer::setContentsToPlatformLayer):
        Remove setContentsToMedia and setContentsToCanvas, and replace them
        with setContentsToPlatformLayer, which previously existed but was unused
        and simply called setContentsToMedia.
        setContentsToPlatformLayer takes a ContentsLayerPurpose, primarily
        so that GraphicsLayerCA can know whether it needs to setNeedsDisplay
        the layer when parenting it (canvas) or not (everything else).
 
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToPlatformLayer):
        Rename function setContentsToMedia -> setContentsToPlatformLayer.
        Rename argument mediaLayer -> platformLayer.
        Store the passed-in ContentsLayerPurpose.
        Remove setContentsToCanvas.
 
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsPlatformLayer):
        Remove updateContentsMediaLayer and updateContentsCanvas layer,
        add updateContentsPlatformLayer.
 
        * platform/graphics/ca/GraphicsLayerCA.h:
        Do the same to the LayerChange enum.
 
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToImage):
        (WebCore::GraphicsLayerTextureMapper::setContentsToPlatformLayer):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::syncPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::destroyPlatformLayerIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::createPlatformLayerIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        Fold these together in the same way as elsewhere.
 
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        Do the same to the LayerChange enum.
 
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::createPlatformLayerIfNeeded):
        (WebCore::CoordinatedGraphicsScene::syncPlatformLayerIfNeeded):
        (WebCore::CoordinatedGraphicsScene::destroyPlatformLayerIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):
        Rename canvasLayer -> platformLayer.
 
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        Use the new setContentsToPlatformLayer, passing in the relevant ContentsLayerPurpose.

2014-08-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Do not copy large module source strings
        https://bugs.webkit.org/show_bug.cgi?id=136191

        Reviewed by Benjamin Poulain.

        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::source):

2014-08-23  Zan Dobersek  <zdobersek@igalia.com>

        Remove uses of CrossThreadTask in ThreadableWebSocketChannelClientWrapper, WorkerThreadableWebSocketChannel
        https://bugs.webkit.org/show_bug.cgi?id=133954

        Reviewed by Darin Adler.

        Replace uses of CrossThreadTask with C++11 lambdas in the ThreadableWebSocketChannelClientWrapper
        and WorkerThreadableWebSocketChannel classes.

        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasksCallback): Deleted.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnectCallback): Deleted.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback): Deleted.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryDataCallback): Deleted.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmountCallback): Deleted.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshakeCallback): Deleted.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback): Deleted.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageErrorCallback): Deleted.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
        (WebCore::workerGlobalScopeDidSend): Deleted.
        (WebCore::workerGlobalScopeDidGetBufferedAmount): Deleted.
        (WebCore::workerGlobalScopeDidConnect): Deleted.
        (WebCore::workerGlobalScopeDidReceiveMessage): Deleted.
        (WebCore::workerGlobalScopeDidReceiveBinaryData): Deleted.
        (WebCore::workerGlobalScopeDidUpdateBufferedAmount): Deleted.
        (WebCore::workerGlobalScopeDidStartClosingHandshake): Deleted.
        (WebCore::workerGlobalScopeDidClose): Deleted.
        (WebCore::workerGlobalScopeDidReceiveMessageError): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadConnect): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSend): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendBlob): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadBufferedAmount): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadClose): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadFail): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadDestroy): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSuspend): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadResume): Deleted.
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:

2014-08-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up build warnings: control reaches end of non-void function
        https://bugs.webkit.org/show_bug.cgi?id=135889

        Reviewed by Alexey Proskuryakov.

        * 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):
        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::type):

2014-08-23  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Only notify of a required flush on the first layer property change
        https://bugs.webkit.org/show_bug.cgi?id=136104

        Reviewed by Martin Robinson.

        The GraphicsLayer's client should only be notified that a flush is required
        when the first change of one of the layer's properties is initiated, instead
        of requesting the flush on every such change.

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

2014-08-22  Dan Bernstein  <mitz@apple.com>

        Try to fix the Mac build using the internal SDK.

        * bindings/objc/PublicDOMInterfaces.h:

2014-08-22  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Remove LevelDB.
        https://bugs.webkit.org/show_bug.cgi?id=136170

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        (WebCore::doScopesOverlap): Deleted.
        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h: Removed.
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h: Removed.
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h: Removed.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h: Removed.
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h: Removed.
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.h: Removed.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h: Removed.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DatabaseStrategy.cpp:
        (WebCore::DatabaseStrategy::createIDBFactoryBackend):
        * platform/leveldb/LevelDBComparator.h: Removed.
        * platform/leveldb/LevelDBDatabase.cpp: Removed.
        * platform/leveldb/LevelDBDatabase.h: Removed.
        * platform/leveldb/LevelDBIterator.h: Removed.
        * platform/leveldb/LevelDBSlice.h: Removed.
        * platform/leveldb/LevelDBTransaction.cpp: Removed.
        * platform/leveldb/LevelDBTransaction.h: Removed.
        * platform/leveldb/LevelDBWriteBatch.cpp: Removed.
        * platform/leveldb/LevelDBWriteBatch.h: Removed.

2014-08-22  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Fix build break caused by ENABLE_GAMEPAD_DEPRECATED.
        https://bugs.webkit.org/show_bug.cgi?id=136110

        Reviewed by Gyuyoung Kim.

        WebCore_INCLUDE_DIRECTORY for gamepad was removed from WK2 Efl in order to fix build break when ENABLE_GAMEPAD_DEPRECATED is on.

        No new tests because no functional changes.

        * PlatformEfl.cmake:

2014-08-22  Benjamin Poulain  <benjamin@webkit.org>

        Style invalidation does not work for adjacent node updates
        https://bugs.webkit.org/show_bug.cgi?id=136145

        Reviewed by Antti Koivisto.

        There were a bunch of cases in which the style would be in an inconsistent
        state until the style resolver kicks in for the entire document.

        For example, let's take the selector "foo.bar + target". When the class "bar"
        changes, the element foo is invalidated. The element target is untouched.

        Now, if the style of "target" is accessed, nodeOrItsAncestorNeedsStyleRecalc()
        returns false and the old style is accessed.

        At some point, when the style of the entire document is resolved, the node
        "foo" is styled, and "target" is invalidated.


        To fix the issue, this patch adds an extra flag keeping track of subtrees that
        have any node needing style recalc: DirectChildNeedsStyleRecalcFlag.

        When invalidating the node "foo", its parent is marked with
        DirectChildNeedsStyleRecalcFlag to note that one of the child nodes has an invalid style.

        When verifying the style state in nodeOrItsAncestorNeedsStyleRecalc(), we check that flag
        in addition to the siblings dependencies to find if the node is part of a subtree that may
        be invalid due to sibling selectors.

        Similarly, in the style resolver, we use the flag to clear the style on all elements
        that could potentially be invalid.


        This patch removes the changes introduced by r172721
        (The style is not updated correctly when the pseudo class :empty is applied on anything but the rightmost element).
        That bug was just a special case of what is solved here.


        Tests: fast/selectors/attribute-direct-adjacent-style-update.html
               fast/selectors/attribute-sibling-style-update.html
               fast/selectors/class-direct-adjacent-style-update.html
               fast/selectors/class-sibling-style-update.html
               fast/selectors/first-child-direct-adjacent-style-update.html
               fast/selectors/first-child-sibling-style-update.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsEmpty):
        (WebCore::SelectorCompiler::setStyleOfSiblingsAffectedByEmpty): Deleted.
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::directChildNeedsStyleRecalc):
        (WebCore::ContainerNode::setDirectChildNeedsStyleRecalc):
        Remove the special case for :empty.

        * dom/Document.cpp:
        (WebCore::nodeOrItsAncestorNeedsStyleRecalc):
        * dom/Element.cpp:
        (WebCore::checkForEmptyStyleChange):
        (WebCore::checkForSiblingStyleChanges):
        (WebCore::Element::setStyleOfSiblingsAffectedByEmpty): Deleted.
        (WebCore::Element::rareDataStyleOfSiblingsAffectedByEmpty): Deleted.
        * dom/Element.h:
        (WebCore::Element::styleOfSiblingsAffectedByEmpty): Deleted.
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::styleOfSiblingsAffectedByEmpty): Deleted.
        (WebCore::ElementRareData::setStyleOfSiblingsAffectedByEmpty): Deleted.
        * dom/Node.cpp:
        (WebCore::markAncestorsWithChildNeedsStyleRecalc):
        (WebCore::Node::setNeedsStyleRecalc):
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc): Deleted.
        * dom/Node.h:
        (WebCore::Node::clearChildNeedsStyleRecalc):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):

2014-08-22  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused legacy InspectorFrontendHost methods
        https://bugs.webkit.org/show_bug.cgi?id=136186

        Reviewed by Andreas Kling.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::recordActionTaken): Deleted.
        (WebCore::JSInspectorFrontendHost::recordPanelShown): Deleted.
        (WebCore::JSInspectorFrontendHost::recordSettingChanged): Deleted.
        * inspector/InspectorFrontendHost.idl:

2014-08-22  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary WTFString creation in Dictionary getter
        https://bugs.webkit.org/show_bug.cgi?id=136184

        Reviewed by Benjamin Poulain.

        * bindings/js/Dictionary.cpp:
        (WebCore::Dictionary::getWithUndefinedOrNullCheck):
        * bindings/js/Dictionary.h:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::getWithUndefinedOrNullCheck):
        * bindings/js/JSDictionary.h:

2014-08-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r172866.
        https://bugs.webkit.org/show_bug.cgi?id=136177

        Broke iOS build (Requested by othermaciej on #webkit).

        Reverted changeset:

        "Replace use of WKCopyCFLocalizationPreferredName with
        NSLocale public API"
        https://bugs.webkit.org/show_bug.cgi?id=136082
        http://trac.webkit.org/changeset/172866

2014-08-22  David Hyatt  <hyatt@apple.com>

        Add proper support for letter-spacing to bopomofo Ruby
        https://bugs.webkit.org/show_bug.cgi?id=136171

        Reviewed by Sam Weinig.

        Added fast/ruby/bopomofo-letter-spacing.html

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout):
        Alter the layout of bopomofo ruby so that the distance between the base characters is the max of
        the letter-spacing between the characters and the minimum required width to hold two rows of
        Ruby.

        Push the bopomofo ruby into the letter-spacing to ensure that it comes right after the base character
        and not after all the letter-spacing.

2014-08-22  Simon Fraser  <simon.fraser@apple.com>

        Fix showing paint rects when selecting lines in the timeline
        https://bugs.webkit.org/show_bug.cgi?id=136173

        Reviewed by Joseph Pecoraro.

        Fix the condition used to decide when to show the overlay.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::shouldShowOverlay):

2014-08-22  Simon Fraser  <simon.fraser@apple.com>

        Use the correct rect for paint flashing
        https://bugs.webkit.org/show_bug.cgi?id=136169

        Reviewed by Sam Weinig.

        Use the rect we've converted to root document coordinates for paint flashing.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didPaint):

2014-08-22  Dean Jackson  <dino@apple.com>

        Google Canvas2D maps are too slow and uncontrollable with Safari with full screen mode
        https://bugs.webkit.org/show_bug.cgi?id=136168

        Reviewed by Tim Horton.

        When Google maps are using their 2D "lite" fallback and you're drawing in a huge
        window such as fullscreen 4K, we would drop back to unaccelerated mode, thinking
        that we'd exceeded the maximum IOSurface size.

        Remove the hardcoded limit on IOSurface sizes, and instead ask the system
        what it believe the maximum to be. This was significantly higher than our
        limit on the systems I tested.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer): Include our IOSurface wrapper, which
        has a query for maximum size, and use that instead.

2014-08-22  Simon Fraser  <simon.fraser@apple.com>

        Maybe fix Windows.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::showPaintRect):

2014-08-22  Simon Fraser  <simon.fraser@apple.com>

        Implement paint flashing in the WK1 InspectorOverlay page
        https://bugs.webkit.org/show_bug.cgi?id=136138

        Reviewed by Sam Weinig, Joseph Pecoraro.

        Implement paint flashing for the WebKit1 InspectorOverlay via a second canvas in the overlay page.
        We avoid allocating backing store for this canvas until we have paint rects.
        
        Because this overlay page is weird and doesn't know how to paint itself, InspectorOverlay manages
        an array of rects, and pushes them to the page when they change, before forcing a paint.
        
        Because iOS doesn't use the InspectorOverlay page, stub out setShowPaintRects on its
        WebKit WebInspectorClient, but don't yet implement paint flashing there.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::InspectorOverlay):
        (WebCore::InspectorOverlay::shouldShowOverlay):
        (WebCore::InspectorOverlay::update):
        (WebCore::buildObjectForRect):
        (WebCore::InspectorOverlay::setShowingPaintRects):
        (WebCore::InspectorOverlay::showPaintRect):
        (WebCore::InspectorOverlay::updatePaintRectsTimerFired):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::InspectorOverlay::forcePaint):
        (WebCore::quadToPath): Deleted.
        (WebCore::drawOutlinedQuad): Deleted.
        (WebCore::InspectorOverlay::drawOutline): Deleted.
        * inspector/InspectorOverlay.h:
        * inspector/InspectorOverlayPage.html:
        * inspector/InspectorOverlayPage.js:
        (updatePaintRects):
        (reset):
        (_drawShapeHighlight):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore::InspectorPageAgent::didPaint):

2014-08-22  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Cleanup media code
        https://bugs.webkit.org/show_bug.cgi?id=136163

        Reviewed by Jer Noble.

        No new tests, no functionality was changed.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Don't initialize m_requestingPlay.
        (WebCore::HTMLMediaElement::parseMediaPlayerAttribute): Deleted.
        (WebCore::HTMLMediaElement::parseAttribute): Don't call parseMediaPlayerAttribute.
        (WebCore::HTMLMediaElement::playInternal): m_requestingPlay is dead, Jim.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Remove obsolete FIXME.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::attributeChanged): Deleted.
        (WebCore::MediaPlayer::readyForPlayback): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::attributeChanged): Deleted.
        (WebCore::MediaPlayerPrivateInterface::readyForPlayback): Deleted.

2014-08-20  Maciej Stachowiak  <mjs@apple.com>

        Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
        https://bugs.webkit.org/show_bug.cgi?id=136082

        Reviewed by Alexey Proskuryakov.

        * platform/mac/Language.mm:
        (WebCore::httpStyleLanguageCode): Replace use of WKCopyCFLocalizationPreferredName
        with new WebCoreNSStringExtras helper.
        * platform/mac/WebCoreNSStringExtras.mm: Replacements for the aspects of
        WKCopyCFLocalizationPreferredName.
        (preferredBundleLocalizationName): New helper - most preferred localization available
        in the main bundle, canonicalized the way we like it.
        (canonicalLocalizationName): Convert a lcalization name to a string with language and
        country code, using default if necessary (e.g. "en" maps to "en_US").
        * WebCore.order: Remove mention of WKCopyCFLocalizationPreferredName.
        * WebCore.exp.in: ditto; also export preferredBundleLocalizationName for WebKit(2).
        * platform/ios/WebCoreSystemInterfaceIOS.mm: ditto
        * platform/mac/WebCoreSystemInterface.h: ditto
        * platform/mac/WebCoreSystemInterface.mm: ditto

2014-08-22  Daniel Bates  <dabates@apple.com>

        [iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUCH_EVENTS
        and ENABLE_XSLT when building with the iOS public SDK
        https://bugs.webkit.org/show_bug.cgi?id=135945

        Reviewed by Andy Estes.

        Towards bringing up the iOS WebKit port using the iOS public SDK, disable the proprietary
        iOS gesture and touch event code. For now we also temporarily disable ENABLE_TOUCH_EVENTS
        and ENABLE_XSLT while we focus to get the rest of the port built using the public SDK. We'll
        look to enable these features once we stabilize the build.

        * Configurations/FeatureDefines.xcconfig: Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, ENABLE_TOUCH_EVENTS
        and ENABLE_XSLT when building with the public SDK.
        * Configurations/WebCore.xcconfig:
        * DerivedSources.make: Conditionally generate derived sources for touch and gesture events as applicable and pass
        define WTF_USE_APPLE_INTERNAL_SDK when generating bindings (if applicable). Make the logic for determining
        whether WTF_PLATFORM_IOS is defined consistent with logic for determining whether WTF_USE_APPLE_INTERNAL_SDK and
        ENABLE_ORIENTATION_EVENTS are defined. We should look to further cleanup this code.
        * bindings/js/ios/TouchConstructors.cpp: Substitute ENABLE(IOS_TOUCH_EVENTS) for macro expression "PLATFORM(IOS) && ENABLE(TOUCH_EVENTS)".
        * bindings/objc/DOMEvents.h: Write preprocessor logic in terms of ENABLE_TOUCH_EVENTS and ENABLE_IOS_GESTURE_EVENTS.
        * bindings/objc/PublicDOMInterfaces.h: Include private header <WebKitAdditions/PublicDOMInterfacesIOS.h> when
        it exists as opposed to assuming it exists when building for iOS.
        * dom/Document.cpp:
        (WebCore::Document::Document): Substitute ENABLE(IOS_TOUCH_EVENTS) for macro expression "ENABLE(TOUCH_EVENTS) && PLATFORM(IOS)".
        (WebCore::Document::prepareForDestruction): Ditto.
        (WebCore::Document::removeAllEventListeners): Ditto.
        * dom/Document.h: Write preprocessor logic in terms of ENABLE_IOS_TOUCH_EVENTS and ENABLE_TOUCH_EVENTS.
        * dom/Document.idl: Ditto.
        * dom/Touch.h: Substitute ENABLE(IOS_TOUCH_EVENTS) for PLATFORM(IOS)..
        * dom/TouchEvent.h: Ditto.
        * dom/TouchList.h: Ditto.
        * dom/ios/TouchEvents.cpp: Substitute ENABLE(IOS_TOUCH_EVENTS) for macro expression "PLATFORM(IOS) && ENABLE(TOUCH_EVENTS)".
        * history/CachedFrame.cpp: Add PLATFORM(IOS) guard.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement): Substitute ENABLE(IOS_TOUCH_EVENTS) for ENABLE(TOUCH_EVENTS).
        (WebCore::SliderThumbElement::willDetachRenderers): Ditto.
        * html/shadow/SliderThumbElement.h: Ditto.
        * loader/EmptyClients.h: Ditto.
        * platform/ios/PlatformEventFactoryIOS.h: Write preprocessor logic in terms of ENABLE_IOS_TOUCH_EVENTS and ENABLE_TOUCH_EVENTS.
        Only include header <WebKitAdditions/PlatformTouchEventIOS.h> when building with ENABLE_TOUCH_EVENTS enabled.

2014-08-22  Simon Fraser  <simon.fraser@apple.com>

        Implement paint flashing via GraphicsLayers in the WK2 inspector overlay
        https://bugs.webkit.org/show_bug.cgi?id=136136

        Reviewed by Sam Weinig, Joseph Pecoraro.

        Allow InspectorClient to have a custom implementation of showPaintRect(). For
        WebKit2's WebInspectorClient, implement this by creating a set of GraphicsLayers
        which are parented in a document overlay, with 0.25s fade-out animations.
        
        Also change InspectorInstrumentation::didPaintImpl() to no longer take a GraphicsContext;
        it makes no sense to paint the paint rects directly into the context of the web page.
        Now that the paint rects are painted into an overlay, the rectangles need to be converted
        to root document coordinates, which is done in InspectorInstrumentation::didPaintImpl().
        
        Remove the generic InspectorOverlay::drawOutline()-based indicators; they will
        be reimplemented in a later patch.

        * WebCore.exp.in:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::showPaintRect):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didPaintImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didPaint):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didPaint):
        * inspector/InspectorPageAgent.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::didPaintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2014-08-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r172844.
        https://bugs.webkit.org/show_bug.cgi?id=136164

        re-applying WEBCORE_EXPORTS patch (Requested by
        alexchristensen on #webkit).

        Reverted changeset:

        "Revert r172831, it broke the Windows build."
        http://trac.webkit.org/changeset/172844

2014-08-21  David Hyatt  <hyatt@apple.com>

        Implement rudimentary Bopomofo Ruby support (ruby-position:inter-character)
        https://bugs.webkit.org/show_bug.cgi?id=136137
        <rdar://problem/12567545>

        Reviewed by Sam Weinig.

        Added fast/ruby/bopomofo.html and fast/ruby/bopomofo-rl.html.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator RubyPosition):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        Add support for the new inter-character value for ruby-position and also
        add support for a new font-size keyword, -webkit-ruby-text, that is used
        to set a smart initial font size based off the type of ruby being presented.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontSize::determineRubyTextSizeMultiplier):
        (WebCore::ApplyPropertyFontSize::applyValue):
        Determine the Ruby text size multiplier when -webkit-ruby-text is specified
        as the font size. For ruby-position of before/after, we use 50% of the parent
        font size. For inter-character ruby, we default to 25% instead. If inter-character
        Ruby is nested, we assume it's to display tone marks, and we use 100% to ensure
        the tone mark is the same size and does not get smaller.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustStyleForInterCharacterRuby):
        (WebCore::StyleResolver::applyMatchedProperties):
        * css/StyleResolver.h:
        ruby-position is now the highest priority CSS property, and it is resolved
        before all other properties to ensure that its value can be checked when
        determining a smart default font size. adjustStyleForInterCharacterRuby is a new
        function called to auto-adjust inter-character ruby text to be vertical writing mode when
        encountered inside horizontal documents.

        * css/html.css:
        (ruby > rt):
        Change the font-size from 50% to -webkit-ruby-text to allow us to customize it as
        needed depending on what kind of Ruby we want to show.

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout):
        * rendering/RenderRubyRun.h:
        Add layout code to properly position vertical ruby text relative to a horizontal base.

        * rendering/style/RenderStyleConstants.h:
        Add the new inter-character constant for ruby-position.

        * rendering/style/StyleRareInheritedData.h:
        Increase the number of storage bits for RubyPosition from 1 to 2 now that we support 3 values.

2014-08-22  Jon Lee  <jonlee@apple.com>

        Fix iOS build due to r172832 and move RUBBER_BANDING out of FeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=136157

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE(RUBBER_BANDING).

2014-08-22  Iago Toral  <itoral@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add the Wayland protocol extension
        https://bugs.webkit.org/show_bug.cgi?id=136102

        Reviewed by Martin Robinson.

        Add the Wayland protocol extension that allows mapping GtkWidget
        objects (via an ID that's unique to that GtkWidget) to the
        corresponding Wayland surface objects. This way the nested
        compositor has the proper information about what GtkWidget has
        to be updated when surfaces are committed by the LayerTreeHost.

        * PlatformGTK.cmake:
        * platform/graphics/wayland: Added.
        * platform/graphics/wayland/WebKitGtkWaylandClientProtocol.xml: Added.

2014-08-21  Antti Koivisto  <antti@apple.com>

        Animated GIFs scrolled out of view still cause titlebar blur to update, on tumblr.com page
        https://bugs.webkit.org/show_bug.cgi?id=136139

        Reviewed by Simon Fraser.

        The mechanism for pausing GIF images outside the viewport did not work for subframes.

        Test: fast/repaint/no-animation-outside-viewport-subframe.html

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::resumeVisibleImageAnimationsIncludingSubframes):

            Add a function for resuming animations as needed in all subframes.
            This is used after scrolling instead of calling the RenderView function directly.

        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::resumeAnimatingImages):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::newImageAnimationFrameAvailable):

            Determine the overall visible rect so that it is correct in subframes too.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::resumePausedImageAnimationsIfNeeded):

2014-08-21  Alex Christensen  <achristensen@webkit.org>

        More WEBCORE_EXPORT macros!
        https://bugs.webkit.org/show_bug.cgi?id=136146

        Reviewed by Benjamin Poulain.

        * Modules/geolocation/GeolocationClient.h:
        * Modules/mediastream/UserMediaClient.h:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/notifications/NotificationClient.h:
        * Modules/speech/SpeechSynthesis.h:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/GCController.h:
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSNodeCustom.h:
        * bindings/js/JSNodeListCustom.h:
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/ScriptController.h:
        * bindings/js/SerializedScriptValue.h:
        * crypto/SerializedCryptoKeyWrap.h:
        * css/LengthFunctions.h:
        * css/StyleProperties.h:
        * css/StyleSheetContents.h:
        * dom/DeviceOrientationClient.h:
        * dom/Range.h:
        * dom/ScriptExecutionContext.h:
        * dom/StyledElement.h:
        * dom/TreeScope.h:
        * dom/UIEventWithKeyState.h:
        * dom/UserGestureIndicator.h:
        * dom/UserTypingGestureIndicator.h:
        * dom/ViewportArguments.h:
        * editing/SmartReplace.h:
        * editing/TextIterator.h:
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.h:
        * editing/VisibleUnits.h:
        * editing/cocoa/HTMLConverter.h:
        * editing/htmlediting.h:
        * editing/mac/TextAlternativeWithRange.h:
        * editing/mac/TextUndoInsertionMarkupMac.h:
        * editing/markup.h:
        * history/HistoryItem.cpp:
        * history/PageCache.h:
        * html/TimeRanges.h:
        * html/parser/HTMLParserIdioms.h:
        * inspector/InstrumentingAgents.h:
        * loader/FrameLoader.h:
        * loader/ResourceBuffer.h:
        * loader/ResourceLoadScheduler.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::originalRequest):
        * loader/SubframeLoader.h:
        * loader/SubresourceLoader.h:
        * loader/TextResourceDecoder.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/cache/MemoryCache.h:
        * loader/icon/IconDatabaseBase.h:
        * loader/ios/DiskImageCacheIOS.h:
        * page/Chrome.h:
        * page/SecurityOrigin.h:
        * page/SecurityPolicy.h:
        * page/Settings.h:
        * page/UserContentController.h:
        * page/UserContentURLPattern.h:
        * page/UserMessageHandlerDescriptor.h:
        * page/ViewportConfiguration.h:
        * page/VisitedLinkStore.h:
        * page/WheelEventDeltaTracker.h:
        * page/cocoa/UserAgent.h:
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeOverflowScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * platform/Cursor.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/Language.h:
        * platform/LinkHash.h:
        * platform/LocalizedStrings.h:
        * platform/Logging.h:
        * platform/MemoryPressureHandler.h:
        * platform/NotImplemented.h:
        * platform/PlatformStrategies.h:
        * platform/PublicSuffix.h:
        * platform/RuntimeApplicationChecks.h:
        * platform/RuntimeApplicationChecksIOS.h:
        * platform/SchemeRegistry.h:
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        * platform/Scrollbar.h:
        * platform/ScrollbarTheme.h:
        * platform/SharedBuffer.h:
        * platform/ThreadCheck.h:
        * platform/ThreadGlobalData.h:
        * platform/Timer.h:
        * platform/URL.h:
        * platform/UUID.h:
        * platform/UserActivity.h:
        * platform/Widget.h:
        * platform/cf/CFURLExtras.h:
        * platform/cf/RunLoopObserver.h:
        * platform/cocoa/SystemVersion.h:
        * platform/graphics/Color.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/GeometryUtilities.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/LayoutRect.h:
        * platform/graphics/StringTruncator.h:
        * platform/graphics/TextRun.h:
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.h:
        * platform/graphics/cg/GraphicsContextCG.h:
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/ios/FileSystemIOS.h:
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/SelectionRect.h:
        * platform/ios/SystemMemory.h:
        * platform/ios/TileControllerMemoryHandlerIOS.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/WebCoreNSURLExtras.h:
        * platform/mac/WebNSAttributedStringExtras.h:
        * platform/network/BlobRegistry.h:
        * platform/network/CookieStorage.h:
        * platform/network/DNS.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/ProxyServer.h:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/ios/QuickLook.h:
        * platform/network/mac/AuthenticationMac.h:
        * platform/sql/SQLiteDatabase.cpp:
        * platform/text/LocaleToScriptMapping.h:
        * platform/text/TextBreakIterator.h:
        * platform/text/TextEncoding.h:
        (WebCore::TextEncoding::decode):
        * platform/text/TextEncodingRegistry.h:
        * platform/text/TextStream.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.h:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderListItem.h:
        * rendering/RenderObject.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderTreeAsText.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/ScrollBehavior.cpp:
        * rendering/break_lines.cpp:
        * rendering/style/RenderStyle.h:
        * replay/UserInputBridge.h:
        * storage/StorageEventDispatcher.h:
        * storage/StorageMap.h:
        * storage/StorageStrategy.h:
        * storage/StorageTracker.h:
        * testing/Internals.h:
        * workers/WorkerThread.h:
        Added more WEBCORE_EXPORT macros where needed.

2014-08-21  Tim Horton  <timothy_horton@apple.com>

        Revert r172831, it broke the Windows build.

2014-08-21  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix when RUBBER_BANDING is not enabled.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::overhangAmount):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):

2014-08-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] WebCore.proj is not copying WebKit resource files.
        https://bugs.webkit.org/show_bug.cgi?id=136142
        <rdar://problem/17733682>

        Reviewed by Tim Horton.

        * WebCore.vcxproj/WebCore.proj: Copy missing resource files during
        post-build step.

2014-08-21  Simon Fraser  <simon.fraser@apple.com>

        Try to fix the 32-bit build by using wildcards in the exported non-virtual thunks
        for GraphicsLayerCA::platformCALayerAnimationStarted and GraphicsLayerCA::platformCALayerAnimationEnded.

        * WebCore.exp.in:

2014-08-21  Simon Fraser  <simon.fraser@apple.com>

        Add animationDidEnd callbacks on GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=136084

        Reviewed by Tim Horton.

        Hook up GraphicsLayerClient::notifyAnimationEnded() so that code using GraphicsLayers directly
        can add animations, and know when they finish.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::notifyAnimationStarted):
        (WebCore::GraphicsLayerClient::notifyAnimationEnded):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationEnded):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerAnimationStarted):
        (WebCore::PlatformCALayerClient::platformCALayerAnimationEnded):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        (-[WebAnimationDelegate animationDidStop:finished:]):
        (PlatformCALayerMac::animationStarted):
        (PlatformCALayerMac::animationEnded):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::notifyAnimationStarted):
        * rendering/RenderLayerBacking.h:

2014-08-21  Zalan Bujtas  <zalan@apple.com>

        Enable SATURATED_LAYOUT_ARITHMETIC.
        https://bugs.webkit.org/show_bug.cgi?id=136106

        Reviewed by Simon Fraser.

        SATURATED_LAYOUT_ARITHMETIC protects LayoutUnit against arithmetic overflow.
        (No measurable performance regression on Mac.)

        Test: fast/dynamic/saturated-layout-arithmetic.html

        * Configurations/FeatureDefines.xcconfig:

2014-08-21  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        New ruby parsing rule breaks some real web sites.
        https://bugs.webkit.org/show_bug.cgi?id=136062

        Reviewed by Ryosuke Niwa.

        An RP element should not auto close an RTC element.

        The HTML5.1 spec was changed:
        http://www.w3.org/html/wg/drafts/html/master/syntax.html#parsing-main-inbody
        This was done at the following commit:
        https://github.com/w3c/html/commit/c61397b989b28235ee2228f280aa8d475f3b9ebf

        This patch changed the RP element's behavior to follow the spec change.

        Test: fast/ruby/rp-inside-rtc.html

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

2014-08-21  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        REGRESSION: CSS not() selector does not work when it appears after or within @supports
        https://bugs.webkit.org/show_bug.cgi?id=136063

        Reviewed by Darin Adler.

        CSSParser changes its m_parsingMode to SupportsMode when it finds
        "@supports" token. However, the mode will be never changed to
        NormalMode. This changes parsing algorithm for "not" token forever,
        and it cannot parse not pseudo class selector.

        When we finish parsing @supports rule, we should change to normal
        mode.

        @media does the same thing. This patch changed CharacterEndMediaQuery
        to CharacterEndConditionQuery, and we change parsing mode from
        SupportsMode to NormalMode when the parser finished to parse
        @supports rule.

        Like "@-webkit-mediaquery", we cannot use '{' to
        "@-webkit-supports-condition". Changed "@-webkit-supports-condition"
        parsing rule and parseSupportsCondition() not to use '{'.

        Tests: css3/supports-not-selector-cssom.html
               css3/supports-not-selector.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::isCSSLetter):
        (WebCore::CSSParser::realLex):

2014-08-21  Beth Dakin  <bdakin@apple.com>

        overflow:scroll elements should support rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=91655

        Reviewed by Sam Weinig and Darin Adler.

        This patch enables rubber-banding in overflow regions and it keeps latching 
        working as currently implemented.

        We cannot return early here if there is no scroll delta. There won't be a scroll
        delta in most cases during event.phase() == PlatformWheelEventPhaseEnded, but that 
        phase is required to be processed in order for rubber-banding to work properly. 
        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent):
        * page/EventHandler.cpp:
        (WebCore::handleWheelEventInAppropriateEnclosingBoxForSingleAxis):

        Add a setting for this, which will default to true. This allows us to disable the 
        feature in WebKit1 for now. There is a bug about making it work.
        * page/Settings.in:

        allowsHorizontalStretching() and allowsVerticalStretching() now take the 
        PlatformWheelEvent as a parameter, so that ScrollElasticityAutomatic can use the 
        event to decide whether or not stretching should be allowed in this case. 
        ScrollElasticityAutomatic will not allow stretching if it is a brand new gesture 
        that would result in a rubber-band. We don't want to rubber-band in that case
        because we want the event to propagate up to a parent view. Also added some helper 
        functions just to make that code easier to read.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::newGestureIsStarting):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::isAlreadyPinnedInDirectionOfGesture):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsHorizontalStretching):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsVerticalStretching):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::newGestureIsStarting):
        (WebCore::ScrollAnimatorMac::isAlreadyPinnedInDirectionOfGesture):
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::handleWheelEvent):

        To opt into rubber-banding, all we have to do is implement overhangAmount and set 
        scroll elasticity. We'll choose ScrollElasticityAutomatic which means that we'll
        only rubber-band in directions that can scroll and that we won't rubber-band for
        new gestures when we're already pinned to the edge.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::overhangAmount):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):

2014-08-21  Alex Christensen  <achristensen@webkit.org>

        More WEBCORE_EXPORT macros.
        https://bugs.webkit.org/show_bug.cgi?id=136129

        Reviewed by Tim Horton.

        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/GeolocationController.h:
        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBDatabaseMetadata.h:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/IDBKeyPath.h:
        * Modules/indexeddb/IDBKeyRange.h:
        * Modules/indexeddb/IDBKeyRangeData.h:
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationController.h:
        * bindings/js/GCController.h:
        * bridge/IdentifierRep.h:
        * css/StyleProperties.h:
        * dom/ExceptionCodePlaceholder.h:
        * dom/KeyboardEvent.h:
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.h:
        * dom/Node.h:
        (WebCore::Node::hasEditableStyle):
        * dom/NodeTraversal.h:
        * dom/Position.h:
        (WebCore::Position::Position):
        * dom/Range.h:
        (WebCore::Range::startContainer):
        (WebCore::Range::startOffset):
        (WebCore::Range::endContainer):
        (WebCore::Range::endOffset):
        * editing/FrameSelection.h:
        (WebCore::DragCaretController::clear):
        * history/HistoryItem.h:
        * history/PageCache.h:
        * html/FormController.h:
        * html/HTMLElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLVideoElement.h:
        * html/ImageDocument.h:
        * html/PluginDocument.h:
        * html/forms/FileIconLoader.h:
        * html/shadow/InsertionPoint.h:
        * inspector/InspectorClient.h:
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorInstrumentation.h:
        * loader/FrameLoadRequest.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderStateMachine.h:
        * loader/HistoryController.h:
        * loader/LoaderStrategy.h:
        * loader/NavigationAction.h:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ProgressTracker.h:
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/cache/MemoryCache.h:
        * loader/icon/IconController.h:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.h:
        * page/FocusController.h:
        * page/Frame.h:
        * page/FrameDestructionObserver.h:
        Replaced WEBCORE_TESTING with WEBCORE_EXPORT.
        * page/FrameTree.h:
        * page/FrameView.h:
        * page/Page.h:
        * page/PageConsole.h:
        * page/PageGroup.h:
        * page/PageThrottler.h:
        * page/PrintContext.h:
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingStateNode.h:
        * platform/FileChooser.h:
        * platform/GamepadProvider.h:
        * platform/Length.h:
        * platform/MIMETypeRegistry.h:
        * platform/MemoryPressureHandler.h:
        * platform/Pasteboard.h:
        * platform/PlatformExportMacros.h:
        Removed WEBCORE_TESTING, which I'm replacing with WEBCORE_EXPORT.
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformPasteboard.h:
        * platform/PlatformSpeechSynthesisVoice.h:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/audio/MediaSessionManager.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatQuad.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontGlyphs.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/LayoutRect.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/Path.h:
        * platform/graphics/Region.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/LayerFlushScheduler.h:
        * platform/graphics/ca/LayerPool.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/ios/LegacyTileCache.h:
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/wak/FloatingPointEnvironment.h:
        * platform/mac/HIDGamepadProvider.h:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/network/FormData.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/ProtectionSpaceBase.h:
        * platform/network/cocoa/ProtectionSpaceCocoa.h:
        (WebCore::ProtectionSpace::encodingRequiresPlatformData):
        * platform/network/ios/QuickLook.h:
        * platform/text/TextBreakIterator.h:
        * plugins/PluginData.h:
        * plugins/PluginMainThreadScheduler.h:
        * rendering/HitTestLocation.h:
        * rendering/HitTestResult.h:
        * rendering/InlineBox.h:
        Added more WEBCORE_EXPORT macros, which don't do anything yet.

2014-08-21  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK] WebkitWebProcess crashing navigating away from ogg video element
        https://bugs.webkit.org/show_bug.cgi?id=135348

        Reviewed by Philippe Normand.

        Let GraphicsLayerTextureMapper know it needs to detach the platform
        layer when a MediaPlayerPrivateGStreamerBase is destroyed.

        No new test since media/restore-from-page-cache.html covers it.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):

2014-08-20  Benjamin Poulain  <benjamin@webkit.org>

        CSS: Implement the :placeholder-shown pseudo-class from Selectors Level 4
        https://bugs.webkit.org/show_bug.cgi?id=118162

        Reviewed by Antti Koivisto.

        Previously, HTMLTextFormControlElement was using some mix of its own state
        and style to change the visibility of the placeholder. That approach was a little
        bit too fragile, and we do not want the style to depends on the renderer() since
        that creates circular dependencies.

        The biggest change here is refactoring HTMLTextFormControlElement to have
        1) An explicit "visible placeholder" state.
        2) Separate the textUpdate() from the visibilityUpdate().
        3) Remove the dependencies between the Element's style and the placeholder's style.
           This is done by simply using display:none; on the placeholder so that its parent's visibility
           is irrelevant.

        When matching the selector, the style is set as unique since style sharing does not deal with
        the changes of HTMLTextFormControlElement.

        Tests: fast/css/placeholder-shown-basics.html
               fast/selectors/placeholder-shown-long-adjacent-backtracking.html
               fast/selectors/placeholder-shown-sibling-style-update.html
               fast/selectors/placeholder-shown-style-update.html
               fast/selectors/placeholder-shown-with-input-basics.html
               fast/selectors/placeholder-shown-with-textarea-basics.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        Add the CSS Selector description for CSSOM.

        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isPlaceholderShown):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/html.css:
        (::-webkit-input-placeholder):
        Previously, the display was forced through the UA stylesheet. Since the display is now part
        of the placeholder visibility, it is explicitly handled by HTMLTextFormControlElement and
        its subclasses.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::makeUniqueIfNecessaryAndTestIsPlaceholderShown):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPlaceholderShown):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::setValueCommon):
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::HTMLTextFormControlElement):
        (WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLTextFormControlElement::dispatchBlurEvent):
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
        (WebCore::HTMLTextFormControlElement::selectionDirection):
        (WebCore::HTMLTextFormControlElement::restoreCachedSelection):
        (WebCore::HTMLTextFormControlElement::parseAttribute):
        (WebCore::HTMLTextFormControlElement::hidePlaceholder):
        (WebCore::HTMLTextFormControlElement::showPlaceholderIfNecessary):
        * html/HTMLTextFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::isPlaceholderVisible):
        (WebCore::HTMLTextFormControlElement::cachedSelectionDirection):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updatePlaceholderText):
        (WebCore::TextFieldInputType::subtreeHasChanged):
        (WebCore::TextFieldInputType::updateInnerTextValue):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        * testing/Internals.cpp:
        (WebCore::Internals::visiblePlaceholder):

2014-08-20  Mark Rowe  <mrowe@apple.com>

        Fix the release build after r172806.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveRenderingError): Add a missing semicolon.

2014-08-20  Benjamin Poulain  <bpoulain@apple.com>

        Remove HTMLInputElement's suggestedValue
        https://bugs.webkit.org/show_bug.cgi?id=136094

        Reviewed by Darin Adler.

        That code is Chrome specific. It is unused now.

        * WebCore.exp.in:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::suggestedValue): Deleted.
        (WebCore::HTMLInputElement::setSuggestedValue): Deleted.
        * html/HTMLInputElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        * html/HTMLTextFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::isEmptySuggestedValue): Deleted.
        * html/InputType.cpp:
        (WebCore::InputType::canSetSuggestedValue): Deleted.
        * html/InputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updateInnerTextValue):
        (WebCore::TextFieldInputType::canSetSuggestedValue): Deleted.
        * html/TextFieldInputType.h:
        * testing/Internals.cpp:
        (WebCore::Internals::suggestedValue): Deleted.
        (WebCore::Internals::setSuggestedValue): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

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

        WebAudio FFT analysis uses incorrect scaling
        https://bugs.webkit.org/show_bug.cgi?id=136120

        Reviewed by Tim Horton.

        This is a port of Blink r166687 (author rtoy)
        https://codereview.chromium.org/156993002

        Currently, for a fixed sine-wave input, the peak FFT amplitude changes
        depending on the selected FFT size. This is incorrect; the FFT amplitude
        should not appreciably change when the FFT size changes.

        Layout test added to verify the FFT result stays approximately constant,
        independent of the FFT size used.

        When this test is run using an older version of WebKit, the peak varies
        from about -44 dB (FFT size 32) to -7 dB (FFT size 2048).  With this CL,
        the peak is about -7 dB.  (It's not 0 dB because of the Blackman window that is applied.)

        Note: this change may break existing applications that depended on this strange scaling effect.

        Test: webaudio/realtimeanalyser-fft-scaling.html

        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::doFFTAnalysis):

2014-08-20  Alex Christensen  <achristensen@webkit.org>

        Introducing WEBCORE_EXPORT macro.
        https://bugs.webkit.org/show_bug.cgi?id=136108

        Reviewed by Antti Koivisto.

        This should eventually replace WebCore.exp.in.

        * platform/PlatformExportMacros.h:
        Define WEBCORE_EXPORT to nothing to not cause problems while I'm working on it.
        * Modules/encryptedmedia/CDM.h:
        * Modules/speech/DOMWindowSpeechSynthesis.h:
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseTracker.h:
        * accessibility/AXObjectCache.h:
        * bindings/js/DOMWrapperWorld.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:
        * bridge/runtime_root.h:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSParserMode.h:
        * css/CSSValue.h:
        * css/DOMWindowCSS.h:
        * css/StyleSheetContents.h:
        * dom/CharacterData.h:
        * dom/ClientRect.h:
        * dom/ClientRectList.h:
        * dom/ContainerNode.h:
        * dom/ContextDestructionObserver.h:
        * dom/DOMImplementation.h:
        * dom/DataTransfer.h:
        * dom/DeviceMotionData.h:
        * dom/DeviceOrientationData.h:
        * dom/Document.h:
        (WebCore::Document::setAnnotatedRegionsDirty):
        * dom/DocumentMarker.h:
        * dom/DocumentMarkerController.h:
        * dom/DocumentStyleSheetCollection.h:
        * dom/Element.h:
        * dom/Event.h:
        (WebCore::Event::create):
        * dom/EventListenerMap.h:
        * editing/DictationAlternative.h:
        * editing/EditCommand.h:
        * editing/EditingStyle.h:
        * editing/Editor.h:
        * editing/mac/AlternativeTextUIController.h:
        * history/BackForwardController.h:
        * history/BackForwardList.h:
        * history/CachedFrame.h:
        * loader/CookieJar.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentLoader.h:
        * loader/DocumentWriter.h:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/archive/ArchiveResource.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceHandle.h:
        * loader/cache/CachedResourceLoader.h:
        * page/Chrome.h:
        * page/ContextMenuController.h:
        * page/DOMWindow.h:
        * page/DOMWindowExtension.h:
        * page/DragController.h:
        * page/EventHandler.h:
        * page/animation/AnimationController.h:
        * page/scrolling/AsyncScrollingCoordinator.h:
        * platform/CalculationValue.h:
        * platform/ContentFilter.h:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        * platform/CrossThreadCopier.h:
        * platform/Cursor.h:
        * platform/DatabaseStrategy.h:
        * platform/DisplaySleepDisabler.h:
        * platform/DragData.h:
        * platform/LocalizedStrings.h:
        * platform/audio/AudioHardwareListener.h:
        * platform/audio/AudioSession.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        * platform/ios/wak/WAKView.mm:
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WKView.h:
        * platform/ios/wak/WebCoreThread.h:
        * platform/ios/wak/WebCoreThreadMessage.h:
        * platform/mac/BlockExceptions.h:
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/network/AuthenticationChallengeBase.h:
        * platform/network/BlobData.h:
        * platform/network/BlobDataFileReference.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/CredentialBase.h:
        * platform/network/CredentialStorage.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/cocoa/CredentialCocoa.h:
        * platform/network/mac/CertificateInfo.h:
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::disableThreadingChecks):
        * platform/sql/SQLiteDatabaseTracker.h:
        * platform/sql/SQLiteStatement.h:
        * platform/sql/SQLiteTransaction.h:
        * platform/text/BidiContext.h:
        Added WEBCORE_EXPORT macros.

2014-08-20  Pratik Solanki  <psolanki@apple.com>

        Move DiskCacheMonitor to WebCore so that WebKit1 clients can use it as well
        https://bugs.webkit.org/show_bug.cgi?id=135896

        Reviewed by Andreas Kling.

        Refactor code and move it to WebCore.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.h:
            Make willCacheResponse protected so that SubresourceLoader can override it.
        * loader/SubresourceLoader.h:
        * loader/cocoa/DiskCacheMonitorCocoa.h: Added.
            Mostly the same as the existing NetworkDiskCacheMonitor class in WebKit2. In the
            CFNetwork callback block, it calls a virtual function that is overridden by
            NetworkDiskCacheMonitor to send a message to WebContent process.
        (WebCore::DiskCacheMonitor::~DiskCacheMonitor):
        (WebCore::DiskCacheMonitor::resourceRequest):
        (WebCore::DiskCacheMonitor::sessionID):
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::tryGetFileBackedSharedBufferFromCFURLCachedResponse):
            Copied from NetworkResourceLoader::tryGetFileBackedSharedBufferFromCFURLCachedResponse.
        (WebCore::DiskCacheMonitor::monitorFileBackingStoreCreation):
        (WebCore::DiskCacheMonitor::DiskCacheMonitor):
        (WebCore::DiskCacheMonitor::resourceBecameFileBacked):
            Replace the cached resource data with the contents of the file backed buffer. This is
            used in WebKit1 (and also for any resource loads that happen from the WebContent
            process).
        * loader/cocoa/SubresourceLoaderCocoa.mm: Added.
        (WebCore::SubresourceLoader::willCacheResponse):
            Override willCacheresponse from ResourceLoader to listen for disk cache notifications.

2014-08-20  Eric Carlson  <eric.carlson@apple.com>

        Cleanup MediaSession
        https://bugs.webkit.org/show_bug.cgi?id=136116

        Reviewed by Brent Fulgham.

        MediaSessionManagerClient interface isn't used, remove it.
        No new tests, this doesn't change behavior.

        * WebCore.exp.in:
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::addSession): 
        (WebCore::MediaSessionManager::removeSession):
        (WebCore::MediaSessionManager::sessionWillBeginPlayback):
        (WebCore::MediaSessionManager::addClient): Deleted.
        (WebCore::MediaSessionManager::removeClient): Deleted.
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManagerClient::~MediaSessionManagerClient): Deleted.
        (WebCore::MediaSessionManagerClient::MediaSessionManagerClient): Deleted.

2014-08-20  Eric Carlson  <eric.carlson@apple.com>

        [MSE] add additional SourceBuffer and MediaSource logging
        https://bugs.webkit.org/show_bug.cgi?id=136114

        Reviewed by Brent Fulgham.

        No new tests, this adds debug-only logging.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setReadyState): Fix a typo.
        (WebCore::MediaSource::streamEndedWithError): Log the error.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Log when parsing fails.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveRenderingError): Log error.
        (WebCore::SourceBuffer::sourceBufferPrivateDidEndStream): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Log.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Log error.

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

        Unreviewed, rolling out r172798.
        https://bugs.webkit.org/show_bug.cgi?id=136113

        Broke builds (Requested by msaboff on #webkit).

        Reverted changeset:

        "Introducing WEBCORE_EXPORT macro."
        https://bugs.webkit.org/show_bug.cgi?id=136108
        http://trac.webkit.org/changeset/172798

2014-08-20  Alex Christensen  <achristensen@webkit.org>

        Introducing WEBCORE_EXPORT macro.
        https://bugs.webkit.org/show_bug.cgi?id=136108

        Reviewed by Antti Koivisto.

        This should eventually replace WebCore.exp.in.

        * platform/PlatformExportMacros.h:
        Define WEBCORE_EXPORT to nothing to not cause problems while I'm working on it.
        * Modules/encryptedmedia/CDM.h:
        * Modules/speech/DOMWindowSpeechSynthesis.h:
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseTracker.h:
        * accessibility/AXObjectCache.h:
        * bindings/js/DOMWrapperWorld.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/runtime_root.h:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSParserMode.h:
        * css/CSSValue.h:
        * css/DOMWindowCSS.h:
        * css/StyleSheetContents.h:
        * dom/CharacterData.h:
        * dom/ClientRect.h:
        * dom/ClientRectList.h:
        * dom/ContainerNode.h:
        * dom/ContextDestructionObserver.h:
        * dom/DOMImplementation.h:
        * dom/DataTransfer.h:
        * dom/DeviceMotionData.h:
        * dom/DeviceOrientationData.h:
        * dom/Document.h:
        (WebCore::Document::setAnnotatedRegionsDirty):
        * dom/DocumentMarker.h:
        * dom/DocumentMarkerController.h:
        * dom/DocumentStyleSheetCollection.h:
        * dom/Element.h:
        * dom/Event.h:
        (WebCore::Event::create):
        * dom/EventListenerMap.h:
        * editing/DictationAlternative.h:
        * editing/EditCommand.h:
        * editing/EditingStyle.h:
        * editing/Editor.h:
        * editing/mac/AlternativeTextUIController.h:
        * history/BackForwardController.h:
        * history/BackForwardList.h:
        * history/CachedFrame.h:
        * loader/CookieJar.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentLoader.h:
        * loader/DocumentWriter.h:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/archive/ArchiveResource.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceHandle.h:
        * loader/cache/CachedResourceLoader.h:
        * page/Chrome.h:
        * page/ContextMenuController.h:
        * page/DOMWindow.h:
        * page/DOMWindowExtension.h:
        * page/DragController.h:
        * page/EventHandler.h:
        * page/animation/AnimationController.h:
        * page/scrolling/AsyncScrollingCoordinator.h:
        * platform/CalculationValue.h:
        * platform/ContentFilter.h:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        * platform/CrossThreadCopier.h:
        * platform/Cursor.h:
        * platform/DatabaseStrategy.h:
        * platform/DisplaySleepDisabler.h:
        * platform/DragData.h:
        * platform/LocalizedStrings.h:
        * platform/audio/AudioHardwareListener.h:
        * platform/audio/AudioSession.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        * platform/ios/wak/WAKView.mm:
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WKView.h:
        * platform/ios/wak/WebCoreThread.h:
        * platform/ios/wak/WebCoreThreadMessage.h:
        * platform/mac/BlockExceptions.h:
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/network/AuthenticationChallengeBase.h:
        * platform/network/BlobData.h:
        * platform/network/BlobDataFileReference.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/CredentialBase.h:
        * platform/network/CredentialStorage.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/cocoa/CredentialCocoa.h:
        * platform/network/mac/CertificateInfo.h:
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::disableThreadingChecks):
        * platform/sql/SQLiteDatabaseTracker.h:
        * platform/sql/SQLiteStatement.h:
        * platform/sql/SQLiteTransaction.h:
        * platform/text/BidiContext.h:
        Added WEBCORE_EXPORT macros.

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

        Dashed/dotted borders do not paint.
        https://bugs.webkit.org/show_bug.cgi?id=135898

        Reviewed by Simon Fraser.

        Remove the empty line checks for drawLines. There's no need to protect the graphics
        context from empty lines.

        Tests: fast/borders/border-painting-dashed-at-all.html
               fast/borders/border-painting-dashed.html
               fast/borders/border-painting-dotted-at-all.html
               fast/borders/border-painting-dotted.html
               fast/borders/border-painting-double-at-all.html
               fast/borders/border-painting-double.html
               fast/borders/border-painting-groove-at-all.html
               fast/borders/border-painting-inset-at-all.html
               fast/borders/border-painting-inset.html
               fast/borders/border-painting-outset-at-all.html
               fast/borders/border-painting-outset.html
               fast/borders/border-painting-ridge-at-all.html
               fast/borders/border-painting-solid-at-all.html
               fast/borders/border-painting-solid.html
               fast/borders/hidpi-border-painting-groove.html
               fast/borders/hidpi-border-painting-ridge.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::drawBorderLineRect): Deleted.
        (WebCore::drawBorderLine): Deleted.

2014-08-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Ignore usemap attributes without '#' in img element
        https://bugs.webkit.org/show_bug.cgi?id=133336

        Reviewed by Ryosuke Niwa.

        HTML5 specification says we should ignore usemap attributes without #.
        http://www.w3.org/TR/html5/infrastructure.html#valid-hash-name-reference

        Test: fast/dom/replaced-image-map-valid-hash-name.html

        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getImageMap):

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

        Remove PurgeableBuffer since it is not very useful any more
        https://bugs.webkit.org/show_bug.cgi?id=135939

        Reviewed by Andreas Kling.

        The usefulness of having purgeable memory for cached resources has diminished now that
        WebKit uses file backed resources when possible. Since this is read only memory, it is in
        essence "purgeable". Having the PurgeableBuffer code adds additional complexity that we
        don't need. e.g. on my Mac, I am not seeing any entry for "WebCore purgeable data" when I
        run vmmap against the web processes that I have running. It is used on iOS, however even
        there much of the purgeable memory we create gets replaced by file backed memory once we get
        the notification from CFNetwork.

        No new tests because no functional changes.

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::prepareCachedResourceBuffer):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource):
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::hasPurgeableBuffer): Deleted.
        (WebCore::ResourceBuffer::setShouldUsePurgeableMemory): Deleted.
        (WebCore::ResourceBuffer::createPurgeableBuffer): Deleted.
        (WebCore::ResourceBuffer::releasePurgeableBuffer): Deleted.
        * loader/ResourceBuffer.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText):
        (WebCore::CachedCSSStyleSheet::destroyDecodedData):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::imageForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::destroyDecodedData):
        (WebCore::CachedImage::canUseDiskImageCache):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::isSafeToMakePurgeable): Deleted.
        (WebCore::CachedResource::makePurgeable): Deleted.
        (WebCore::CachedResource::isPurgeable): Deleted.
        (WebCore::CachedResource::wasPurged): Deleted.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::resourceBuffer):
        (WebCore::CachedResource::purgePriority): Deleted.
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::destroyDecodedData):
        * loader/cache/CachedScript.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::resourceForRequestImpl):
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        (WebCore::MemoryCache::evict):
        (WebCore::MemoryCache::TypeStatistic::addResource):
        (WebCore::MemoryCache::dumpStats):
        (WebCore::MemoryCache::dumpLRULists):
        (WebCore::MemoryCache::makeResourcePurgeable): Deleted.
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::TypeStatistic::TypeStatistic):
        (WebCore::MemoryCache::shouldMakeResourcePurgeableOnEviction): Deleted.
        * platform/PurgePriority.h: Removed.
        * platform/PurgeableBuffer.h: Removed.
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::size):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::copy):
        (WebCore::SharedBuffer::getSomeData):
        (WebCore::SharedBuffer::adoptPurgeableBuffer): Deleted.
        (WebCore::SharedBuffer::createPurgeableBuffer): Deleted.
        (WebCore::SharedBuffer::releasePurgeableBuffer): Deleted.
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::hasPurgeableBuffer): Deleted.
        (WebCore::SharedBuffer::shouldUsePurgeableMemory): Deleted.
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/mac/PurgeableBufferMac.cpp: Removed.
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        * platform/soup/SharedBufferSoup.cpp:

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

        Remove ENABLE(SUBPIXEL_LAYOUT).
        https://bugs.webkit.org/show_bug.cgi?id=136077

        Reviewed by Simon Fraser.

        Remove compile time flag SUBPIXEL_LAYOUT. All ports have it enabled for a while now.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        * dom/Element.cpp:
        (WebCore::adjustForLocalZoom):
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientLeft):
        (WebCore::Element::clientTop):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::LayoutUnit):
        (WebCore::LayoutUnit::ceilToFloat):
        (WebCore::LayoutUnit::ceil):
        (WebCore::LayoutUnit::round):
        (WebCore::LayoutUnit::floor):
        (WebCore::boundedMultiply):
        (WebCore::operator*):
        (WebCore::operator/):
        (WebCore::intMod):
        (WebCore::operator%):
        (WebCore::roundedLayoutUnit):
        (WebCore::ceiledLayoutUnit):
        (WebCore::LayoutUnit::toInt): Deleted.
        (WebCore::LayoutUnit::toFloat): Deleted.
        (WebCore::LayoutUnit::toDouble): Deleted.
        (WebCore::LayoutUnit::epsilon): Deleted.
        * platform/graphics/LayoutPoint.h:
        (WebCore::roundedForPainting):
        (WebCore::flooredForPainting):
        (WebCore::ceiledForPainting):
        (WebCore::roundedLayoutPoint):
        * platform/graphics/LayoutRect.cpp:
        (WebCore::enclosingLayoutRect):
        * platform/graphics/LayoutRect.h:
        (WebCore::pixelSnappedIntRect):
        (WebCore::pixelSnappedForPainting):
        * platform/graphics/LayoutSize.h:
        (WebCore::roundedLayoutSize):
        (WebCore::flooredForPainting):
        * rendering/RenderBlock.cpp:
        (WebCore::adjustFloatForSubPixelLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild):
        * rendering/RenderElement.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):

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

        [CSS Shapes] A few calc() test failures in the shape-image-threshold parsing tests
        https://bugs.webkit.org/show_bug.cgi?id=135926

        Reviewed by Dirk Schulze.

        shape-image-threshold is a Number, so it should be parsed as one. The
        default parsing doesn't support calcs, but numbers do.

        No new tests, fixes exitsing test to pass.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Use
            ApplyPropertyNumber instead of ApplyPropertyDefault for
            shape-image-threshold.

2014-08-18  Maciej Stachowiak  <mjs@apple.com>

        Use NSURLFileTypeMappings directly instead of depending on WebKitSystemInterface wrappers for it
        https://bugs.webkit.org/show_bug.cgi?id=136035

        Reviewed by Dan Bernstein.

        * WebCore.exp.in: Remove reference to no longer existent sumbols.
        * WebCore.order: ditto
        * WebCore.xcodeproj/project.pbxproj: Install new NSURLFileTyeMappings.h header.
        * platform/ios/MIMETypeRegistryIOS.mm:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): Use NSURLFileTypeMappings
        directly instead of via WKSI wrapper.
        * platform/mac/MIMETypeRegistryMac.mm:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): ditto
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType): ditto
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType): ditto
        * platform/mac/WebCoreSystemInterface.h: Remove references to the no-longer-used
        WKGetExtensionsForMIMEType, WKGetPreferredExtensionForMIMEType, or WKGetMIMETypeForExtension
        * platform/mac/WebCoreSystemInterface.mm: ditto
        * platform/spi: Added. This is where headers to declare SPI go.
        * platform/spi/cocoa: Added. See above.
        * platform/spi/cocoa/NSURLFileTypeMappingsSPI.h: Added. Header to declare
        the internal class NSURLFileTypeMappings and some of its methods.

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

        Unreviewed, rolling out r172736.
        https://bugs.webkit.org/show_bug.cgi?id=136060

        Caused 14% PLT regressions (Requested by rniwa on #webkit).

        Reverted changeset:

        "Remove PurgeableBuffer since it is not very useful any more"
        https://bugs.webkit.org/show_bug.cgi?id=135939
        http://trac.webkit.org/changeset/172736

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

        Provide default implementations of all GraphicsLayerClient methods
        https://bugs.webkit.org/show_bug.cgi?id=136054

        Reviewed by Tim Horton.

        Make none of the functions in GraphicsLayerClient pure virtual, since in many cases
        subclasses don't need to provide their own implementations.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::notifyAnimationStarted):
        (WebCore::GraphicsLayerClient::notifyFlushRequired):
        (WebCore::GraphicsLayerClient::paintContents):
        * rendering/RenderLayerCompositor.h:

2014-08-18  Pratik Solanki  <psolanki@apple.com>

        Remove PurgeableBuffer since it is not very useful any more
        https://bugs.webkit.org/show_bug.cgi?id=135939

        Reviewed by Geoffrey Garen.

        The usefulness of having purgeable memory for cached resources has diminished now that
        WebKit uses file backed resources when possible. Since this is read only memory, it is in
        essence "purgeable". Having the PurgeableBuffer code adds additional complexity that we
        don't need. e.g. on my Mac, I am not seeing any entry for "WebCore purgeable data" when I
        run vmmap against the web processes that I have running. It is used on iOS, however even
        there much of the purgeable memory we create gets replaced by file backed memory once we get
        the notification from CFNetwork.

        No new tests because no functional changes.

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::prepareCachedResourceBuffer):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource):
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::hasPurgeableBuffer): Deleted.
        (WebCore::ResourceBuffer::setShouldUsePurgeableMemory): Deleted.
        (WebCore::ResourceBuffer::createPurgeableBuffer): Deleted.
        (WebCore::ResourceBuffer::releasePurgeableBuffer): Deleted.
        * loader/ResourceBuffer.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText):
        (WebCore::CachedCSSStyleSheet::destroyDecodedData):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::imageForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::destroyDecodedData):
        (WebCore::CachedImage::canUseDiskImageCache):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::isSafeToMakePurgeable): Deleted.
        (WebCore::CachedResource::makePurgeable): Deleted.
        (WebCore::CachedResource::isPurgeable): Deleted.
        (WebCore::CachedResource::wasPurged): Deleted.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::resourceBuffer):
        (WebCore::CachedResource::purgePriority): Deleted.
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::destroyDecodedData):
        * loader/cache/CachedScript.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::resourceForRequestImpl):
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        (WebCore::MemoryCache::evict):
        (WebCore::MemoryCache::TypeStatistic::addResource):
        (WebCore::MemoryCache::dumpStats):
        (WebCore::MemoryCache::dumpLRULists):
        (WebCore::MemoryCache::makeResourcePurgeable): Deleted.
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::TypeStatistic::TypeStatistic):
        (WebCore::MemoryCache::shouldMakeResourcePurgeableOnEviction): Deleted.
        * platform/PurgePriority.h: Removed.
        * platform/PurgeableBuffer.h: Removed.
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::size):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::copy):
        (WebCore::SharedBuffer::getSomeData):
        (WebCore::SharedBuffer::adoptPurgeableBuffer): Deleted.
        (WebCore::SharedBuffer::createPurgeableBuffer): Deleted.
        (WebCore::SharedBuffer::releasePurgeableBuffer): Deleted.
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::hasPurgeableBuffer): Deleted.
        (WebCore::SharedBuffer::shouldUsePurgeableMemory): Deleted.
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/mac/PurgeableBufferMac.cpp: Removed.
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        * platform/soup/SharedBufferSoup.cpp:

2014-08-18  Pratik Solanki  <psolanki@apple.com>

        Use modern for loop instead of iterators in SharedBufferCF.cpp
        https://bugs.webkit.org/show_bug.cgi?id=136000

        Reviewed by Andreas Kling.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::copyBufferAndClear):
        (WebCore::SharedBuffer::copySomeDataFromDataArray):
        (WebCore::SharedBuffer::maybeAppendDataArray): Use auto& instead of auto for less RetainPtr/refcount churn.

2014-08-18  Antti Koivisto  <antti@apple.com>

        Tighten RenderCounter typing
        https://bugs.webkit.org/show_bug.cgi?id=136049

        Reviewed by Andreas Kling.

        RenderObject* -> RenderElement&

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode):
        (WebCore::CounterNode::create):
        (WebCore::showTreeAndMark):
        * rendering/CounterNode.h:
        (WebCore::CounterNode::owner):
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::parentOrPseudoHostElement):
        (WebCore::previousSiblingOrParent):
        (WebCore::areRenderersElementsSiblings):
        (WebCore::nextInPreOrder):
        (WebCore::planCounter):
        (WebCore::findPlaceForCounter):
        (WebCore::makeCounterNode):
        (WebCore::RenderCounter::originalText):
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::RenderCounter::rendererRemovedFromTree):
        (WebCore::updateCounters):
        (WebCore::RenderCounter::rendererSubtreeAttached):
        (WebCore::RenderCounter::rendererStyleChanged):
        (showCounterRendererTree):
        * rendering/RenderCounter.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::removeChildInternal):
        (WebCore::RenderElement::styleDidChange):
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasCounterNodeMap):
        (WebCore::RenderElement::setHasCounterNodeMap):
        
            Move CounterNodeMap to RenderElement from RenderObject.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::hasCounterNodeMap): Deleted.
        (WebCore::RenderObject::setHasCounterNodeMap): Deleted.

2014-08-18  Peyton Randolph  <prandolph@apple.com>

        Expose long mouse press WebKit API. Part of 135257 - Add long mouse press gesture
        https://bugs.webkit.org/show_bug.cgi?id=136048

        Reviewed by Dan Bernstein.

        This patch exposes long mouse press API callbacks in both the injected bundle and on the UI process
        through their respective page UI clients. The callbacks are modeled off of the mouseDidMoveOverElement
        callback. Like the mouseDidMoveOverElement callback, these callbacks allow the bundle to pass 
        information to the UI process via a userData out parameter.

        * page/Chrome.cpp:
        (WebCore::Chrome::didBeginTrackingPotentialLongMousePress): Added.
        (WebCore::Chrome::didRecognizeLongMousePress): Added.
        (WebCore::Chrome::didCancelTrackingPotentialLongMousePress): Added.
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didBeginTrackingPotentialLongMousePress): Added.
        (WebCore::ChromeClient::didRecognizeLongMousePress): Added.
        (WebCore::ChromeClient::didCancelTrackingPotentialLongMousePress): Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): 
        Pass the press hit test result to kick off the long mouse press.
        (WebCore::EventHandler::beginTrackingPotentialLongMousePress): Notify the chrome.
        (WebCore::EventHandler::recognizeLongMousePress): Ditto.
        (WebCore::EventHandler::cancelTrackingPotentialLongMousePress): 
        Ditto. Also opportunistically remove a runtime switch check to see if long pressing is enabled. The
        runtime switch check was only triggered when long pressing was disabled in the middle of a long press.
        * page/EventHandler.h:

2014-08-18  Przemyslaw Kuczynski  <p.kuczynski@samsung.com>

        Fix unintentional integer overflow before widen
        https://bugs.webkit.org/show_bug.cgi?id=135463

        Reviewed by Oliver Hunt.

        Overflowing expression is evaluated using operands arithmetic but then is used in
        context which expects an wider integer type. To avoid overflow at least one operand
        has to be representative of the wider type.

        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine): Changed strtoul to strtoull.
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress): Added static_cast to long long.
        * platform/efl/FileSystemEfl.cpp:
        (WebCore::getVolumeFreeSizeForPath): Added static_cast to uint64_t.

2014-08-18  Vivek Galatage  <vivek.vg@samsung.com>

        Implement CanvasRenderingContext2D direction attribute
        https://bugs.webkit.org/show_bug.cgi?id=135878

        Reviewed by Darin Adler.

        The attribute, 'direction', represents the text directionality.
        This is an important attribute for the bi-directional text within the CanvasRenderingContext2D.
        The allowed set of values are 'rtl', 'ltr' and 'inherit'.

        Specification URL: http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting.html#dom-context-2d-direction

        Test: fast/canvas/canvas-direction.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::inheritedDirection):
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::reset):
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::State::operator=):
        (WebCore::CanvasRenderingContext2D::direction):
        (WebCore::CanvasRenderingContext2D::setDirection):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2014-08-18  Benjamin Poulain  <benjamin@webkit.org>

        The style is not updated correctly when the pseudo class :empty is applied on anything but the rightmost element
        https://bugs.webkit.org/show_bug.cgi?id=135999

        Reviewed by Antti Koivisto.

        In Element's checkForEmptyStyleChange(), the style invalidation was only considering the invalidation of the element
        for which the subtree has changed. When the pseudo class :empty is used with a sibling combinator (e.g. foo:empty+bar),
        we were never invalidating the style of the element on which the selector applies.

        This patch fixes the issue by invalidating the whole subtree rooted at the parent if the :empty rules applies
        to siblings. A new flag "styleOfSiblingsAffectedByEmpty" is introduced to cover this case.

        SelectorChecker just sets the flag all the time if any sibling rule exists.
        This is overkill but that code is just there for non-jit cases.

        SelectorCompiler does a better job and only sets the flag if matching anything else than the rightmost element.
        There is a case not optimized, :empty with descendant (e.g. foo:empty>bar). Those cases are useless in practice,
        it is not worth optimizing them.

        Tests: fast/css/pseudo-element-updates-on-empty.html
               fast/selectors/not-empty-adjacent-style-update.html
               fast/selectors/not-empty-style-update.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentMatchesTheRightmostElement):
        shouldUseRenderStyleFromCheckingContext() is renamed fragmentMatchesTheRightmostElement() because
        it is now also used by generateElementIsEmpty() in a context where the Context's style is irrelevant.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
        (WebCore::SelectorCompiler::setStyleOfSiblingsAffectedByEmpty):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsEmpty):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLastChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsOnlyChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRequestedPseudoElementEqualsToSelectorPseudoElement):
        (WebCore::SelectorCompiler::shouldUseRenderStyleFromCheckingContext): Deleted.
        (WebCore::SelectorCompiler::setElementStyleIsAffectedByEmptyAndUpdateRenderStyleIfNecessary): Deleted.
        * dom/Element.cpp:
        (WebCore::checkForEmptyStyleChange):
        (WebCore::Element::setStyleOfSiblingsAffectedByEmpty):
        (WebCore::Element::rareDataStyleOfSiblingsAffectedByEmpty):
        * dom/Element.h:
        (WebCore::Element::styleOfSiblingsAffectedByEmpty):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::styleOfSiblingsAffectedByEmpty):
        (WebCore::ElementRareData::setStyleOfSiblingsAffectedByEmpty):
        (WebCore::ElementRareData::ElementRareData):

2014-08-18  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unreviewed merge correction.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformCompleteWheelEvent): Revert an
        unintended change from r172705.

2014-08-18  Bem Jones-Bey  <bjonesbe@adobe.com>

        Small cleanup for ShapeOutsideDeltas
        https://bugs.webkit.org/show_bug.cgi?id=136043

        Reviewed by Zoltan Horvath.

        Remove explicit initializtion of LayoutUnit members and explicitly
        size the boolean flags so they pack properly.

        No new tests, no behavior change.

        * rendering/shapes/ShapeOutsideInfo.h:

2014-08-18  Dirk Schulze  <krit@webkit.org>

        calc() doesn't work for SVG CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=136026

        Reviewed by Andreas Kling.

        Make calc() work on SVG CSS properties as well. stroke-width and
        stroke-dashoffset used SVGLength. SVGLength doesn't work together with
        cross units length arguments like % and px (just returns 0 in these
        cases). I moved these properties over to Length. All modified files
        beside to SVGCSSParser are related to this switch.

        Test: svg/css/parse-calc-length.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setStrokeWidth):
        (WebCore::SVGRenderStyle::setStrokeDashOffset):
        (WebCore::SVGRenderStyle::strokeWidth):
        (WebCore::SVGRenderStyle::strokeDashOffset):
        (WebCore::SVGRenderStyle::initialStrokeDashOffset): Deleted.
        (WebCore::SVGRenderStyle::initialStrokeWidth): Deleted.
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleStrokeData::StyleStrokeData):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::strokeWidth):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::valueForLength):

2014-08-18  Andy Estes  <aestes@apple.com>

        REGRESSION (r167856): adobe.com no longer able to launch Create Cloud app using a URL with a custom scheme
        https://bugs.webkit.org/show_bug.cgi?id=136010

        Reviewed by Darin Adler.

        r167856 caused WebKit to stop scheduling certain kinds of navigations (window.location changes, meta-refresh,
        and some calls to window.open) when the request URL is invalid. Adobe.com performs one of these navigations to
        an invalid URL with an external scheme (aam:), relying on Safari's navigation policy delegate to ignore the
        navigation and launch the external app registered to handle aam: URLs. Since the navigation is no longer
        scheduled, the policy delegate is never executed and the external app never launches.

        Instead of not scheduling the navigation, allow it to proceed until the client's policy delegate has executed
        and made a decision. Only disallow the navigation if the policy delegate told WebKit to proceed with the load.
        This exposes these navigations to clients via the policy delegate and via willPerformClientRedirectToURL and
        didCancelClientRedirectForFrame on the frame load delegate.
        
        To constrain this check only to the navigation types covered by r167856, only two NavigationSchedulers
        (ScheduledRedirect and ScheduledLocationChange) enable the invalid URL check.

        Note that r167856 also caused an iOS regression, and this was resolved in r170120 by adding a linked-on-or-after
        check and a WebCore setting. Since the iOS regression is also resolved by the approach described above, this
        patch reverts r170120 (but keeps some of its tests).

        Tests: fast/loader/redirect-to-invalid-url-using-javascript-calls-policy-delegate.html
               fast/loader/redirect-to-invalid-url-using-javascript-disallowed.html
               fast/loader/redirect-to-invalid-url-using-meta-refresh-calls-policy-delegate.html
               fast/loader/redirect-to-invalid-url-using-meta-refresh-disallowed.html
               fast/loader/window-open-to-invalid-url-calls-policy-delegate.html
               fast/loader/window-open-to-invalid-url-disallowed.html

        * WebCore.exp.in: Updated the symbol FrameLoader::loadFrameRequest.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation): Added an AllowNavigationToInvalidURL argument; passed down to urlSelected.
        (WebCore::FrameLoader::urlSelected): Added an AllowNavigationToInvalidURL argument; passed down to loadFrameRequest.
        (WebCore::FrameLoader::loadURLIntoChildFrame): Passed AllowNavigationToInvalidURL::Yes to loadURL.
        (WebCore::FrameLoader::loadFrameRequest): Added an AllowNavigationToInvalidURL argument; passed down to loadURL and loadPostRequest.
        (WebCore::FrameLoader::loadURL): Added an AllowNavigationToInvalidURL argument; passed down to continueLoadAfterNewWindowPolicy and loadWithNavigationAction.
        (WebCore::FrameLoader::loadPostRequest): Ditto.
        (WebCore::FrameLoader::load): Passed AllowNavigationToInvalidURL::Yes to continueLoadAfterNewWindowPolicy.
        (WebCore::FrameLoader::loadWithNavigationAction): Added an AllowNavigationToInvalidURL argument; passed down to loadWithDocumentLoader.
        (WebCore::FrameLoader::loadWithDocumentLoader): Added an AllowNavigationToInvalidURL argument; passed down to continueLoadAfterNavigationPolicy.
        (WebCore::FrameLoader::reloadWithOverrideEncoding): Passed AllowNavigationToInvalidURL::Yes to loadWithDocumentLoader.
        (WebCore::FrameLoader::reload): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
            Added an AllowNavigationToInvalidURL argument; if its value is No and the request's URL is invalid, do not continue.
            Added a FIXME about calling clientRedirectCancelledOrFinished on non-quick redirect cancellations.
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Added an AllowNavigationToInvalidURL argument; passed down to loadWithNavigationAction.
        (WebCore::FrameLoader::loadDifferentDocumentItem): Passed AllowNavigationToInvalidURL::Yes to either loadWithDocumentLoader or loadWithNavigationAction.
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h: Defined AllowNavigationToInvalidURL to have values of Yes and No.
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledRedirect::fire): Passed AllowNavigationToInvalidURL::No to FrameLoader::changeLocation.
        (WebCore::ScheduledLocationChange::fire): Ditto.
        (WebCore::NavigationScheduler::shouldScheduleNavigation): Removed the URL::isValid check.
        (WebCore::NavigationScheduler::scheduleLocationChange): Passed AllowNavigationToInvalidURL::No to FrameLoder::changeLocation during fragment navigations.
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow): Passed AllowNavigationToInvalidURL::Yes to FrameLoader::loadFrameRequest.
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.
        * page/Settings.in: Removed allowNavigationToInvalidURL.

2014-08-18  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        Fix keyTimes list length of from/to/by animations.
        https://bugs.webkit.org/show_bug.cgi?id=136037

        Reviewed by Darin Adler.

        For from/to/by animations, the length of keyTimes and keyPoints
        attribute if are specified must be equal and must have at least
        2 values.

        This is backport of my fix in Blink: https://codereview.chromium.org/453243003/

        Test: svg/animations/invalid-keytime-number-crash.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::startedActiveInterval):

2014-08-18  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Follow-up to r136040 based on Darin Adler's comments.

        Pass Widget* as a Widget&, since it can never be null.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformCompleteWheelEvent):
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent):

2014-08-17  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Gesture scrolls don't work in the WebKit1 clients after scrolling a non-scrollable iFrame
        https://bugs.webkit.org/show_bug.cgi?id=136029
        <rdar://problem/17767169>

        Reviewed by Maciej Stachowiak.

        This is difficult to test in our layout tests, since it relies on specific host application
        behavior.

        If the platform widget is a frame view (IFrame), and we are in WebKit1, 'passWheelEventToWidget'
        has already called 'scrollWheel' on the underlying platform widget. We need to return true in
        this case to avoid getting multiple copies of the scrollWheel event sent to the platform widget.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): Revise default stub to
        accept a Widget* argument.
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): Check for WK1 case and
        return 'true' when the underlying NSScrollView has been issues a scrollWheel event.
        

2014-08-18  Andy Estes  <aestes@apple.com>

        Revert r172697.

        It made several webarchive layout tests flaky and didn't have the correct behavior for non-quick redirects.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::shouldScheduleNavigation):
        * page/Settings.in:

2014-08-15  Andy Estes  <aestes@apple.com>

        REGRESSION (r167856): adobe.com no longer able to launch Create Cloud app using a URL with a custom scheme
        https://bugs.webkit.org/show_bug.cgi?id=136010

        Reviewed by Darin Adler.

        r167856 caused WebKit to stop scheduling certain kinds of navigations (window.location changes, meta-refresh,
        and some calls to window.open) when the request URL is invalid. Adobe.com performs one of these navigations to
        an invalid URL with an external scheme (aam:), relying on Safari's navigation policy delegate to ignore the
        navigation and launch the external app registered to handle aam: URLs. Since the navigation is no longer
        scheduled, the policy delegate is never executed and the external app never launches.

        Instead of not scheduling the navigation, allow it to proceed until the client's policy delegate has executed
        and made a decision. Only disallow the navigation if the policy delegate told WebKit to proceed with the load.
        This exposes these navigations to clients via the policy delegate and via willPerformClientRedirectToURL and
        didCancelClientRedirectForFrame on the frame load delegate.

        Note that r167856 also caused an iOS regression, and this was resolved in r170120 by adding a linked-on-or-after
        check and a WebCore setting. Since the iOS regression is also resolved by the approach described above, this
        patch reverts r170120 (but keeps some of its tests).

        Tests: fast/loader/redirect-to-invalid-url-using-javascript-calls-policy-delegate.html
               fast/loader/redirect-to-invalid-url-using-javascript-disallowed.html
               fast/loader/redirect-to-invalid-url-using-meta-refresh-calls-policy-delegate.html
               fast/loader/redirect-to-invalid-url-using-meta-refresh-disallowed.html
               fast/loader/window-open-to-invalid-url-calls-policy-delegate.html
               fast/loader/window-open-to-invalid-url-disallowed.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Do not continue if the navigation will be a redirect
        to an invalid URL.
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::shouldScheduleNavigation): Resumed scheduling navigations to invalid URLs.
        * page/Settings.in: Removed the allowNavigationToInvalidURL setting.

2014-08-15  Dean Jackson  <dino@apple.com>

        REGRESSION (r164173): Safari AutoFill button in popover, default buttons on iCloud control panel and Safari Safe Browsing pages don't have default appearance
        https://bugs.webkit.org/show_bug.cgi?id=136011

        Reviewed by Sam Weinig.

        When we render some controls, we need to make sure the NSWindow subclass we
        use as the host of the AppKit views identifies itself as the key window (if
        the control state is correct). We already have a flag tracking this for
        key appearance - just make sure we do the same for isKeyWindow.

        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeWindow isKeyWindow]): New override to mirror the static
        variable for key appearance.

2014-08-15  Zalan Bujtas  <zalan@apple.com>

        Do not use FloatRect::infiniteRect() to flag full repaints.
        https://bugs.webkit.org/show_bug.cgi?id=135900

        Reviewed by Simon Fraser.

        Converting FloatRect::infiniteRect() to IntRect leads to value overflow
        and we end up with invalid repaint rectangle. Use a boolean flag to indicate
        full repaint request.

        Covered by existing tests.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerCA::repaintLayerDirtyRects):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::setTileNeedsDisplayInRect):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setNeedsDisplay):
        (PlatformCALayerMac::setNeedsDisplayInRect):

2014-08-15  Benjamin Poulain  <benjamin@webkit.org>

        Unify the modes style resolution modes SharingRules and StyleInvalidation
        https://bugs.webkit.org/show_bug.cgi?id=135969

        Reviewed by Andreas Kling.

        Unifying the Collector and SelectorCheckers was done in previous patches,
        this is just removing the enums.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::hasAnyMatchingRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        * css/SelectorChecker.h:
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::invalidateStyleRecursively):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateMarkPseudoStyleForPseudoElement):

2014-08-15  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: compile :-webkit-full-page-media
        https://bugs.webkit.org/show_bug.cgi?id=135968

        Reviewed by Alexey Proskuryakov.

        Add the pseudo class :-webkit-full-page-media with an unoptimized function call.

        It would be possible to inline it, but this selector is so uncommon I don't think
        it is worth having any additional complexity for it.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isMediaDocument):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix gliding in AxisScrollSnapAnimator for Mac
        https://bugs.webkit.org/show_bug.cgi?id=135971

        Reviewed by Dean Jackson.

        Previously, momentum events that are handled immediately after finishing a glide animation cause a second, extremely
        slow glide animation to trigger. To fix this, I added a new state DestinationReached. During this state, additional
        momentum events that are handled after the glide animation completes will not fill up the momentum window and trigger
        a second glide event.

        * platform/mac/AxisScrollSnapAnimator.h:
        * platform/mac/AxisScrollSnapAnimator.mm:
        (WebCore::AxisScrollSnapAnimator::AxisScrollSnapAnimator):
        (WebCore::AxisScrollSnapAnimator::handleWheelEvent):
        (WebCore::AxisScrollSnapAnimator::scrollSnapAnimationUpdate):
        (WebCore::AxisScrollSnapAnimator::endScrollSnapAnimation):
        (WebCore::AxisScrollSnapAnimator::computeGlideDelta):

2014-08-15  Eric Carlson  <eric.carlson@apple.com>

        [MSE] Implement a maximum buffer size for SourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=135614

        Reviewed by Jer Noble.

        Implement the MSE coded frame eviction algorithm: when new buffers are appended attempt
        to keep the amount of data buffered below a maximum size (which is determined by the media
        session manager) by freeing coded frames as follows:
            1 - Free frames in 30 second chunks from 0 to 30 seconds before the current time.
            2 - If there are time ranges after the range with the current time, free frames in
                30 second chunks from duration back to the beginning of the time range after
                current time.

        For now we DO NOT throw a QUOTA_EXCEEDED_ERR when we are not able to free up enough
        space to remain below the prescribed quota, because some big name, widely deployed, 
        code bases ignore the error and continue appending data as though the failed append
        succeeded, leading to a corrupted bitstream and failure to play.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::SampleMap::addSample): Drive-by performance optimization: sample->presentationTime()
            is used more than once, stash it in a local variable.
        (WebCore::SampleMap::removeSample): Ditto.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::logRanges): Debug-only function to log TimeRanges.
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::remove): Optimize logging. Buffer full and coded frame eviction logic
            is in SourceBuffer instead of SourceBufferPrivate.
        (WebCore::SourceBuffer::appendBufferInternal): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Set m_bufferFull when more data
            has been buffered than allowed.
        (WebCore::removeSamplesFromTrackBuffer): Add logging.
        (WebCore::SourceBuffer::removeCodedFrames): Improve logging. Avoid debug build assert when
            current time is after last enqueued presentation time.
        (WebCore::SourceBuffer::evictCodedFrames): The coded frame eviction algorithm.
        (WebCore::SourceBuffer::maximumBufferSize): Return the maximum amount of data that can 
            be buffered.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Improve logging. Don't attempt
            to create a PlatformTimeRanges with inverted start and end to avoid an assert in debug.
        (WebCore::SourceBuffer::hasAudio): New, return true if there are any audio tracks.
        (WebCore::SourceBuffer::hasVideo): New, return true if there are any video tracks.
        (WebCore::SourceBuffer::sourceBufferPrivateHasAudio): Call hasAudio.
        (WebCore::SourceBuffer::sourceBufferPrivateHasVideo): Call hasVideo.
        (WebCore::SourceBuffer::hasCurrentTime): Return true if currentTime is greater than duration.
        (WebCore::SourceBuffer::hasFutureTime): Ditto.
        (WebCore::SourceBuffer::extraMemoryCost): Return the amount of data buffered: the size of
            the input buffer plus the size of all track samples.
        (WebCore::SourceBuffer::reportExtraMemoryCost): Move buffered size calculation to extraMemoryCost.
        (WebCore::SourceBuffer::document): Document accessor.
        * Modules/mediasource/SourceBuffer.h: Drive-by size optimization by moving all bool member
            variables to the end of class.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::refreshCachedTime): Drive-by removal of overly chatty logging.
        (WebCore::HTMLMediaElement::maximumSourceBufferSize): New, maximum source buffer size.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::maximumMediaSourceBufferSize): New, get maximum source buffer 
            size from settings, return full amount for an SourceBuffer with video and audio, return 5%
            of the maximum for an audio-only SourceBuffer.
        * html/HTMLMediaSession.h:

        * page/Settings.in: Add maximumSourceBufferSize. Default value is enough for approximately
            five minutes of 1080p video and stereo audio.

        * platform/graphics/PlatformTimeRanges.cpp:
        (WebCore::PlatformTimeRanges::totalDuration): Drive-by optimization.
        (WebCore::PlatformTimeRanges::dump): New, allow a PlatformTimeRanges to be printed.
        * platform/graphics/PlatformTimeRanges.h:

        * platform/graphics/SourceBufferPrivate.h: Delete evictCodedFrames and isFull, that logic
            is not in SourceBuffer.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame): Drive-by logging fix.
        (WebCore::SourceBufferPrivateAVFObjC::evictCodedFrames): Deleted.
        (WebCore::SourceBufferPrivateAVFObjC::isFull): Deleted.

        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::evictCodedFrames): Deleted.
        (WebCore::MockSourceBufferPrivate::isFull): Deleted.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2014-08-15  Zalan Bujtas  <zalan@apple.com>

        REGRESSION: Parts of the route/route options windows are invisible at maps.google.com
        https://bugs.webkit.org/show_bug.cgi?id=135977
        <rdar://problem/17961698>

        Reviewed by Andreas Kling.

        When the style change requires both layout and repaint, the style diff is set to
        'layout is needed' (and masks the repaint change) as normally layout is followed by a repaint.
        However, in compositing context, layout may not be followed by repaint, so when the style diff
        indicates layout, we need to figure out whether it implies repaint too.
        This logic should eventually be moved from RenderElement to RenderLayerModelObject/RenderLayer.
        -tracked here: webkit.org/b/135990

        Test: compositing/cliprect-and-position-change-on-compositing-layer.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setNeedsPositionedMovementLayout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::diffRequiresLayerRepaint):
        (WebCore::RenderStyle::diffRequiresRepaint): Deleted.
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2014-08-15  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: rewrite CodeGeneratorInspector to be modular and testable
        https://bugs.webkit.org/show_bug.cgi?id=131596

        Reviewed by Joseph Pecoraro.

        Aside from hooking up the new inspector bindings generator to the build system,
        there are a few comingled changes that would be painful to split from the main
        patch. Together, these changes make it possible to forward-declare all protocol
        enumerations as scoped enums, reducing weird ordering dependencies between domains.

        All runtimeCast() methods are now static methods of BindingTraits specializations,
        rather than as static methods of the type builder classes.

        All protocol enumeration types are scoped enums rather than struct-namespaced enums.

        Remove some implicit protocol type and enumeration definitions because they trigger
        compiler bugs or introduce unnecessary complexity in the bindings generator.

        No new tests, no behavior changed.

        * CMakeLists.txt:
        * DerivedSources.make: Update script dependencies and the bindings generator script name.

        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspectImpl): Convert to BindingTraits.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceTypeJson):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus): Convert to scoped enums.

        (WebCore::InspectorPageAgent::buildObjectForFrameTree): Extract FrameResourceTree::Resources
        into its own explicitly-defined object type. The new generator does not support implicitly
        defining object types as elements of arrays.
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp: Disambiguate between internal and protocol types.
        (WebCore::buildInspectorObjectForSessionState):
        (WebCore::buildInspectorObjectForSegmentState):
        (WebCore::InspectorReplayAgent::sessionState):
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorReplayAgent::frameNavigated):
        (WebCore::InspectorReplayAgent::frameDetached):
        (WebCore::InspectorReplayAgent::willDispatchEvent):
        (WebCore::InspectorReplayAgent::startCapturing):
        (WebCore::InspectorReplayAgent::stopCapturing):
        (WebCore::InspectorReplayAgent::replayToPosition):
        (WebCore::InspectorReplayAgent::replayToCompletion):
        (WebCore::InspectorReplayAgent::pausePlayback):
        (WebCore::InspectorReplayAgent::cancelPlayback):
        (WebCore::InspectorReplayAgent::switchSession):
        (WebCore::InspectorReplayAgent::insertSessionSegment):
        (WebCore::InspectorReplayAgent::removeSessionSegment):
        (WebCore::InspectorReplayAgent::currentReplayState):
        (WebCore::InspectorReplayAgent::getAvailableSessions):
        (WebCore::InspectorReplayAgent::getSessionData):
        (WebCore::InspectorReplayAgent::getSegmentData):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        * inspector/InspectorStyleSheet.cpp: Convert to scoped enums. Extract CSSProperty::Status
        because scoped enums defined in a class scope trigger compiler bugs in GCC 4.8.
        (WebCore::buildMediaObject):
        (WebCore::InspectorStyle::styleWithProperties): Work around compiler disagreements.
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:

        * inspector/InspectorTimelineAgent.cpp: Convert to scoped enums and BindingTraits.
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::sendEvent):

        * inspector/protocol/CSS.json: Extract CSSProperty::Status.
        * inspector/protocol/Page.json: Extract FrameResourceTree::Resources.

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

        [EME][Mac] Adopt AVStreamSession.
        https://bugs.webkit.org/show_bug.cgi?id=135983

        Reviewed by Eric Carlson.

        Add AVStreamDataParsers to a new AVStreamSession instance, and expire that session when asked to release
        the session's keys.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC):
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys):
        (WebCore::CDMSessionMediaSourceAVFObjC::update):

2014-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement snapping behavior for iOS
        https://bugs.webkit.org/show_bug.cgi?id=135769

        Reviewed by Brent Fulgham.

        Added support for snap points on iOS. This entails sending snap points from the web process to the UI process
        by encoding and decoding snap points and updating ScrollingTreeOverflowScrollingNodeIOS and WKWebView to support
        animation to snap points in the cases of mainframe and overflow scrolling, respectively.

        There are no new tests yet -- we'll need to find a way to test this!

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::setStateScrollingNodeSnapOffsetsAsFloat): Helper functions used to convert LayoutUnits to floats for snap offsets.
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Update snap offsets for mainframe scrolling, as well as the state node.
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode): Added snap offsets.
        * page/scrolling/AxisScrollSnapOffsets.h:
        (WebCore::closestSnapOffset): Computes the closest snap offset given a sorted vector of comparable types (e.g. float, LayoutUnit).
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setHorizontalSnapOffsets):
        (WebCore::ScrollingStateScrollingNode::setVerticalSnapOffsets):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::horizontalSnapOffsets):
        (WebCore::ScrollingStateScrollingNode::verticalSnapOffsets):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::horizontalSnapOffsets):
        (WebCore::ScrollingTreeScrollingNode::verticalSnapOffsets):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Update snap offsets for overflow scrolling.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Updates the state node's snap offsets for overflow scrolling.

2014-08-15  Dirk Schulze  <krit@webkit.org>

        Turn r/rx/ry to presentation attributes
        https://bugs.webkit.org/show_bug.cgi?id=135978

        Unreviewed typo.

        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):

2014-08-15  Dirk Schulze  <krit@webkit.org>

        Turn r/rx/ry to presentation attributes
        https://bugs.webkit.org/show_bug.cgi?id=135978

        Reviewed by Dean Jackson.

        This follows the patch for width and height presentation attributes and
        turns rx, ry and r to presentation attributes as well:

        ​http://trac.webkit.org/changeset/171341

        Extended existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setR):
        (WebCore::SVGRenderStyle::setRx):
        (WebCore::SVGRenderStyle::setRy):
        (WebCore::SVGRenderStyle::r):
        (WebCore::SVGRenderStyle::rx):
        (WebCore::SVGRenderStyle::ry):
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleLayoutData::StyleLayoutData):
        (WebCore::StyleLayoutData::operator==):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromCircleElement):
        (WebCore::updatePathFromEllipseElement):
        (WebCore::updatePathFromRectElement):
        (WebCore::updatePathFromLineElement): Deleted.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap):
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):

2014-08-15  Dirk Schulze  <krit@webkit.org>

        Turn cx/cy to presentation attributes
        https://bugs.webkit.org/show_bug.cgi?id=135975

        Reviewed by Dean Jackson.

        This follows the patch for width and height presentation attributes and
        turns x and y to presentation attributes as well:

        ​http://trac.webkit.org/changeset/171341

        Extended existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setCx):
        (WebCore::SVGRenderStyle::setCy):
        (WebCore::SVGRenderStyle::cx):
        (WebCore::SVGRenderStyle::cy):
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleLayoutData::StyleLayoutData):
        (WebCore::StyleLayoutData::operator==):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromCircleElement):
        (WebCore::updatePathFromEllipseElement):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        (WebCore::SVGCircleElement::selfHasRelativeLengths): Deleted.
        * svg/SVGCircleElement.h:
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap):
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        (WebCore::SVGEllipseElement::selfHasRelativeLengths): Deleted.
        * svg/SVGEllipseElement.h:

2014-08-15  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Fix typo in Path comment
        https://bugs.webkit.org/show_bug.cgi?id=135960

        Reviewed by Alexey Proskuryakov.

        No new tests, no change on behavior.

        * platform/graphics/Path.h:

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

        Remove two unused Range functions.
        <https://webkit.org/b/135944>

        Reviewed by Geoffrey Garen.

        * dom/Range.cpp:
        (WebCore::Range::maxStartOffset): Deleted.
        (WebCore::Range::maxEndOffset): Deleted.
        * dom/Range.h:

2014-08-14  Daniel Bates  <dabates@apple.com>

        Preserve editing style for -webkit-tap-highlight-color on all ports that enable ENABLE_TOUCH_EVENTS
        https://bugs.webkit.org/show_bug.cgi?id=135963

        Reviewed by Andy Estes.

        Currently we only preserve the CSS property -webkit-tap-highlight-color during editing operations
        for iOS. Instead we should preserve it for all ports that enable ENABLE_TOUCH_EVENTS as this CSS
        property isn't specific to iOS.

        Also added FIXME comment with regards to the CSS property -webkit-composition-fill-color.

        * editing/EditingStyle.cpp:

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

        CSS JIT: compile the :empty pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=135958

        Reviewed by Andreas Kling.

        Compile :empty, nothing fancy.

        Tests: fast/selectors/empty-basics.html
               fast/selectors/empty-long-adjacent-backtracking.html
               fast/selectors/empty-adjacent-style-update.html
               fast/selectors/empty-style-update.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::jumpIfElementIsNotEmpty):
        (WebCore::SelectorCompiler::setElementStyleIsAffectedByEmpty):
        (WebCore::SelectorCompiler::setElementStyleFromContextIsAffectedByEmptyAndUpdateRenderStyleIfNecessary):
        (WebCore::SelectorCompiler::setElementStyleIsAffectedByEmptyAndUpdateRenderStyleIfNecessary):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsEmpty):
        * dom/CharacterData.h:
        (WebCore::CharacterData::dataMemoryOffset):
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::firstChildMemoryOffset):
        * dom/Node.h:
        (WebCore::Node::flagIsText):

2014-08-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement scroll snapping animations on Mac
        https://bugs.webkit.org/show_bug.cgi?id=135768

        Reviewed by Beth Dakin.

        Implementing the scroll snap animations required for snapping in both overflow and mainframe areas on Mac.
        Since we receive a series of discrete wheel events, we need to predict the distance we need to traverse,
        compute the appropriate snap point, and then compute an animation curve to that location. The snap animations
        are split into two types: snapping, which handles letting go of the trackpad with zero velocity, and gliding,
        which handles flick gestures. In both cases, sinusoidal curves are used to ease animation to the target
        location. In the former case, the initial velocity is low, and increases to a maximum value during the middle
        of the animation before decreasing to 0. In the latter case, the curve is computed such that the initial
        velocity matches the user's scroll velocity, and the final velocity matches a lower final velocity that is
        somewhat arbitrarily computed. (See the FIXME in AxisScrollSnapOffsets::initializeGlideParameters). How the
        equations and constants were chosen is described in greater detail in the comments above
        AxisScrollSnapOffsets::computeGlideDelta and AxisScrollSnapOffsets::computeSnapDelta. Note that the final
        velocity should ideally be equal to 0. However, with this particular curve, this caused the animation to feel
        too slow near the snap point.

        No tests, since there is no observable change in behavior. Tests will be included when iOS and Mac scrolling
        areas hook into this code.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj: 
        * page/scrolling/AxisScrollSnapOffsets.cpp: 
        (WebCore::closestSnapOffset): Computes the closest snap offset given velocity and prdicted destination.
        * page/scrolling/AxisScrollSnapOffsets.h:
        * platform/mac/AxisScrollSnapAnimator.h: Added.
        (WebCore::AxisScrollSnapAnimatorClient::~AxisScrollSnapAnimatorClient):
        * platform/mac/AxisScrollSnapAnimator.mm: Added.
        (WebCore::toWheelEventStatus): Converts a pair of PlatformWheelEventPhases to a WheelEventStatus.
        (WebCore::projectedInertialScrollDistance): Attempts to predict the distance covered by the inertial scrolling phase.
        (WebCore::AxisScrollSnapAnimator::AxisScrollSnapAnimator):
        (WebCore::AxisScrollSnapAnimator::handleWheelEvent): Updates the internal state of the AxisScrollSnapAnimator, given a PlatformWheelEvent
        (WebCore::AxisScrollSnapAnimator::shouldOverrideWheelEvent): Determines whether or not we should override a wheel event given the animator's internal state.
        (WebCore::AxisScrollSnapAnimator::scrollSnapAnimationUpdate): Updates a single loop of the scroll snapping animation.
        (WebCore::AxisScrollSnapAnimator::beginScrollSnapAnimation):
        (WebCore::AxisScrollSnapAnimator::endScrollSnapAnimation):
        (WebCore::AxisScrollSnapAnimator::computeSnapDelta): See comments for more information.
        (WebCore::AxisScrollSnapAnimator::computeGlideDelta): See comments for more information.
        (WebCore::AxisScrollSnapAnimator::initializeGlideParameters):
        (WebCore::AxisScrollSnapAnimator::pushInitialWheelDelta):
        (WebCore::AxisScrollSnapAnimator::averageInitialWheelDelta):
        (WebCore::AxisScrollSnapAnimator::clearInitialWheelDeltaWindow):

2014-08-14  Saam Barati  <sbarati@apple.com>

        Allow high fidelity type profiling to be enabled and disabled.
        https://bugs.webkit.org/show_bug.cgi?id=135423

        Reviewed by Geoffrey Garen.

        PageRuntimeAgent and WorkerRuntimeAgent now call their super 
        class's (InspectorRuntimeAgent) implementation of willDestroyFrontendAndBackend
        to give InspectorRuntimeAgent a chance to recompile all JavaScript
        functions, if necessary, for type profiling.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):

2014-08-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct build when DerivedSources location not supplied by build environment
        https://bugs.webkit.org/show_bug.cgi?id=135954
        <rdar://problem/18023620>

        Reviewed by Joseph Pecoraro.

        The DerivedSourcesDirectory is not always defined, depending on what
        solution is being used to build this project. Instead, just define
        it directly, since we already know where it needs to go.

        Also:
        1. Stop redirecting the copy output to NUL so I can see if this fails in the future.
        2. Make sure the target directory exists before copying to it.

        * WebCore.vcxproj/copyForwardingHeaders.cmd: Properly specify
        the directories for copying the JS file.

2014-08-14  Zoltan Horvath  <zoltan@webkit.org>

        [CSS3-Text] Cosmetics on RenderBlockFlow::textAlignmentForLine
        https://bugs.webkit.org/show_bug.cgi?id=135940

        Reviewed by Darin Adler.

        Processing the not CSS3_TEXT case first, and removing an extra whitespace after r172524.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::textAlignmentForLine):

2014-08-14  Martin Hock  <mhock@apple.com>

        IndexedDB should respect SchemeRegistry's database access setting.
        https://bugs.webkit.org/show_bug.cgi?id=135890
        <rdar://problem/17989469>

        Reviewed by Alexey Proskuryakov.

        Test: storage/indexeddb/open-db-private-browsing.html

        * Modules/indexeddb/IDBFactory.cpp:

2014-08-14  Yoav Weiss  <yoav@yoav.ws>

        srcset with w descriptor doesn't behave as expected when sizes is not supported.
        https://bugs.webkit.org/show_bug.cgi?id=135935

        Reviewed by Dean Jackson.

        In current implementation, if sizes is not supported, when authors would write
        markup such as `<img src=fallback.jpg srcset="100px.jpg 100w, 400px.jpg 400w">`
        the first candidate in srcset would be picked, regardless of its dimensions 
        That is likely to be confusing for authors.
        Dropping these "not yet supported" candidates is likely to be less confusing,
        and will result in the "fallback.jpg" candidate being picked.

        No new tests since this change only concerns builds that are built
        with the PICTURE_SIZES compile flag turned off.

        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::parseDescriptors):
        Drop candidates that include either 'w' or 'h' descriptors when the
        sizes feature is not supported.

2014-08-14  Antti Koivisto  <antti@apple.com>

        Make inherited style and parent renderer references
        https://bugs.webkit.org/show_bug.cgi?id=135857

        Reviewed by Andreas Kling.

        We don't recurse into non-rendered subtrees anymore so they can't be null.
        Also stop using Element::renderStyle() as it differs from e->renderer().style() in
        some rare cases (that should be fixed).

        * style/StyleResolveTree.cpp:
        (WebCore::Style::RenderTreePosition::parent):
        (WebCore::Style::RenderTreePosition::RenderTreePosition):
        (WebCore::Style::RenderTreePosition::canInsert):
        (WebCore::Style::RenderTreePosition::insert):
        (WebCore::Style::RenderTreePosition::computeNextSibling):
        (WebCore::Style::shouldCreateRenderer):
        (WebCore::Style::styleForElement):
        (WebCore::Style::createRendererIfNeeded):
        (WebCore::Style::textRendererIsNeeded):
        (WebCore::Style::createTextRendererIfNeeded):
        (WebCore::Style::updateTextRendererAfterContentChange):
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::resolveLocal):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::resolveTree):

2014-08-14  Antti Koivisto  <antti@apple.com>

        [Forms] We should share RenderStyle object for optgroup and option element
        https://bugs.webkit.org/show_bug.cgi?id=88405

        Reviewed by Andreas Kling.

        We can remove this special case now.

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

2014-08-14  Antti Koivisto  <antti@apple.com>

        Remove nonRendererStyle
        https://bugs.webkit.org/show_bug.cgi?id=135938

        Reviewed by Andreas Kling.

        It is used to support styling of non-renderer option elements. We have a better
        mechanism for this, Element::computedStyle().

        * dom/Element.cpp:
        (WebCore::Element::resetComputedStyle):
        (WebCore::Element::willResetComputedStyle):
        
            Add a virtual callback for computed style reset.

        * dom/Element.h:
        * dom/Node.h:
        (WebCore::Node::nonRendererStyle): Deleted.
        * dom/NodeRenderStyle.h:
        (WebCore::Node::renderStyle):
        
            renderStyle() now always matches renderer()->style()

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
        (WebCore::HTMLOptGroupElement::isFocusable):
        (WebCore::HTMLOptGroupElement::didAttachRenderers): Deleted.
        (WebCore::HTMLOptGroupElement::willDetachRenderers): Deleted.
        (WebCore::HTMLOptGroupElement::updateNonRenderStyle): Deleted.
        (WebCore::HTMLOptGroupElement::nonRendererStyle): Deleted.
        (WebCore::HTMLOptGroupElement::customStyleForRenderer): Deleted.
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isFocusable):
        
            Use computedStyle.

        (WebCore::HTMLOptionElement::willResetComputedStyle):
        (WebCore::HTMLOptionElement::didAttachRenderers): Deleted.
        (WebCore::HTMLOptionElement::willDetachRenderers): Deleted.
        (WebCore::HTMLOptionElement::updateNonRenderStyle): Deleted.
        (WebCore::HTMLOptionElement::nonRendererStyle): Deleted.
        (WebCore::HTMLOptionElement::customStyleForRenderer): Deleted.
        (WebCore::HTMLOptionElement::didRecalcStyle): Deleted.
        * html/HTMLOptionElement.h:
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::updateOptionsWidth):
        (RenderMenuList::setTextFromOption):
        
            Use computedStyle.

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

        [MSE] Altering the quality of a YouTube video will cause the video to distort and display an error message
        https://bugs.webkit.org/show_bug.cgi?id=135931

        Reviewed by Eric Carlson.

        When removing samples from the TrackBuffer's sample map, also remove those samples from the
        TrackBuffer's decode queue. Otherwise, removed samples may persist in the decode queue and
        either break sync-sample dependencies or cause decoding artifacts.

        Pull the code which removes samples from a track buffer into its own utility function, and
        use this function both from removeCodedFrames(), and also when samples are removed due to
        overlapping appends in sourceBufferPrivateDidReceiveSample(). In order to reference
        TrackBuffers outside of SourceBuffer (and in the static removeSamplesFromTrackBuffer()
        function), make TrackBuffer a public forward declaration.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::removeSamplesFromTrackBuffer):
        (WebCore::SourceBuffer::removeCodedFrames):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        * Modules/mediasource/SourceBuffer.h:

2014-08-14  Zan Dobersek  <zdobersek@igalia.com>

        ImageBufferDataCairo.h is missing header guards
        https://bugs.webkit.org/show_bug.cgi?id=135933

        Reviewed by Philippe Normand.

        * platform/graphics/cairo/ImageBufferDataCairo.h:
        Add the missing head guards to avoid problems when re-inclusion occurs.

2014-08-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable CSS_SCROLL_SNAP for iOS
        https://bugs.webkit.org/show_bug.cgi?id=135915

        Turn on CSS_SCROLL_SNAP for iOS and the iOS simulator.

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2014-08-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Compute and store snap point positions
        https://bugs.webkit.org/show_bug.cgi?id=135268

        Reviewed by Simon Fraser.

        Working towards implementing a way to extract snap positions (i.e. LayoutUnits) from the parsed snap point properties from CSS,
        as well as a way of storing the information. Supports both mainframe and overflow scrolling.

        No changes in behavior. I will write tests when I implement snapping for iOS and Mac.
        
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateSnapOffsets): Invokes the static routine in AxisScrollSnapOffsets to update snap offsets for mainframe.
        * page/FrameView.h:
        * page/scrolling/AxisScrollSnapOffsets.cpp: Added.
        (WebCore::appendAndSortChildSnapOffsets):
        (WebCore::updateFromStyle):
        (WebCore::updateSnapOffsetsForScrollableArea): Update the ScrollableArea's snap axes.
        * page/scrolling/AxisScrollSnapOffsets.h: Added.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setHorizontalSnapOffsets):
        (WebCore::ScrollableArea::setVerticalSnapOffsets):
        (WebCore::ScrollableArea::clearHorizontalSnapOffsets): Resets the unique_ptr for horizontal snap points.
        (WebCore::ScrollableArea::clearVerticalSnapOffsets): Resets the unique_ptr for vertical snap points.
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::horizontalSnapOffsets): Returns a pointer to the ScrollableArea's horizontal snap points.
        (WebCore::ScrollableArea::verticalSnapOffsets): Returns a pointer to the ScrollableArea's vertical snap points.
        (WebCore::ScrollableArea::updateSnapOffsets):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateSnapOffsets): Invokes the static routine in AxisScrollSnapOffsets to update snap offsets for an overflow area.
        * rendering/RenderLayer.h:

2014-08-13  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/135911> WebKit should build on Yosemite with the public SDK.

        Reviewed by Darin Adler.

        * rendering/RenderThemeMac.mm: Fix the forward-declaration of NSServicesRolloverButtonCell.

2014-08-13  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=135819

        Reviewed by Laszlo Gombos.

        * CMakeLists.txt:
        Include derived sources directory, which is needed by Apple ports.
        Separated svg and non-svg idls for ObjC bindings.
        Don't build the new gamepad API right now.  It's causing naming conflicts and it's not done.
        Process CSSUnknownRule.idl.
        * PlatformGTK.cmake:
        Added cpp as the extension of the generated bindings.
        * PlatformMac.cmake:
        Include more directories and sources.
        Add forwarding headers.
        Generate ObjC bindings.
        * bindings/objc/DOMUIKitExtensions.mm:
        Moved config.h to recognize the PLATFORM macro.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):
        (GenerateInterface):
        Added some workarounds for CMake.
        * bindings/scripts/IDLAttributes.txt:
        Added missing attribute names.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        Added PLATFORM(IOS) to protect IOS_AIRPLAY code.
        * platform/mac/PasteboardMac.mm:
        Added necessary DRAG_SUPPORT protection.
        * platform/text/mac/TextCodecMac.cpp:
        Moved config.h to recognize the PLATFORM macro.        

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

        [MSE] Replacing existing samples with overlapping new samples will cause playback to stutter.
        https://bugs.webkit.org/show_bug.cgi?id=135902

        Reviewed by Eric Carlson.

        Only mark the TrackBuffer as needing re-enqueueing if the samples removed by overlapping samples
        themselves overlap with potentially enqueued but not yet displayed frames.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

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

        CSSValueList should never contain null values.
        <https://webkit.org/b/135887>

        It's not legal for a CSSValueList to contain null CSSValues, so make
        it store a Vector of Ref<CSSValue> internally instead.

        This allows the compiler to avoid emitting a number of null checks.
        It will also allow a future patch to make CSSValueList vend CSSValue&
        instead of CSSValue*.

        Most of the patch is fixing up things on their way into a CSSValueList
        to not be null at the call site, now that append() and prepend() are
        taking PassRef instead of PassRefPtr.

        Reviewed by Sam Weinig.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        * css/BasicShapeFunctions.h:
        * css/CSSBorderImage.cpp:
        (WebCore::createBorderImageValue):
        * css/CSSBorderImage.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForImageSliceSide):
        (WebCore::valueForNinePieceImageSlice):
        (WebCore::valueForNinePieceImageQuad):
        (WebCore::valueForNinePieceImage):
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::ComputedStyleExtractor::valueForShadow):
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::specifiedValueForGridTrackSize):
        (WebCore::addValuesForNamedGridLinesAtIndex):
        (WebCore::scrollSnapCoordinates):
        (WebCore::createTimingFunctionValue):
        (WebCore::fillSourceTypeToCSSValue):
        (WebCore::contentToCSSValue):
        (WebCore::shapePropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForShorthandProperties):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForSidesShorthand):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForGridShorthand):
        (WebCore::ComputedStyleExtractor::getBackgroundShorthandValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSParser.cpp:
        (WebCore::createPrimitiveValuePair):
        (WebCore::parseTranslateTransformValue):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::createPrimitiveStringValue):
        (WebCore::CSSParser::addFillValue):
        (WebCore::CSSParser::parseNonElementSnapPoints):
        (WebCore::CSSParser::parseScrollSnapDestination):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::addAnimationValue):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseQuotes):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseGridPosition):
        (WebCore::CSSParser::parseGridTemplateRowsAndAreas):
        (WebCore::CSSParser::parseGridLineNames):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        (WebCore::CSSParser::parseGridTrackSize):
        (WebCore::CSSParser::parseBasicShapeAndOrBox):
        (WebCore::CSSParser::parseFontVariant):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::parseTextEmphasisStyle):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::wrapValueInCommaSeparatedList):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        (WebCore::CSSValueList::removeAll):
        (WebCore::CSSValueList::hasValue):
        (WebCore::CSSValueList::copy):
        (WebCore::CSSValueList::customCSSText):
        (WebCore::CSSValueList::equals):
        (WebCore::CSSValueList::addSubresourceStyleURLs):
        (WebCore::CSSValueList::hasFailedOrCanceledSubresources):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::item):
        (WebCore::CSSValueList::itemWithoutBoundsCheck):
        (WebCore::CSSValueList::append):
        (WebCore::CSSValueList::prepend):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::paintOrder):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parsePaintOrder):
        * editing/EditingStyle.cpp:
        (WebCore::mergeTextDecorationValues):
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::srcValue):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::toCSSPrimitiveValue):
        * svg/SVGLength.h:

2014-08-13  Alex Christensen  <achristensen@webkit.org>

        Removed dead plugins code.
        https://bugs.webkit.org/show_bug.cgi?id=135862

        Reviewed by Alexey Proskuryakov.

        * plugins/PluginDataNone.cpp: Removed.
        * plugins/mac: Removed.
        * plugins/mac/PluginPackageMac.cpp: Removed.
        * plugins/mac/PluginViewMac.mm: Removed.

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

        [WK1] A fixed-position <img> may not show on page load
        https://bugs.webkit.org/show_bug.cgi?id=135893

        Reviewed by Tim Horton.
        
        A position:fixed image could fail to display because we didn't make a
        compositing layer for it under some circumstances. This can happen if
        RenderLayerCompositor::requiresCompositingForPosition() runs before the
        image is loaded, in which cause the layer is zero-sized, so does not get
        composited.
        
        When the image loads, there was no code path that ensured that compositing
        would be re-evaluated (unlike size changes due to style updates). Fix by
        having RenderLayer::contentChanged() also check for ImageChanged.

        Test: compositing/fixed-image-loading.html

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

2014-08-13  Bem Jones-Bey  <bjonesbe@adobe.com>

        Refactor ShapeOutsideInfo so it isn't mutated for each line
        https://bugs.webkit.org/show_bug.cgi?id=135781

        Reviewed by Zoltan Horvath.

        Encapsulate the per line state into a ShapeOutsideDeltas object.
        updateDeltasForContainingBlockLine has been renamed to
        computeDeltasForContainingBlockLine, and it returns an instance of the
        ShapeOutsideDeltas object for that line. This object is cached, but
        none of the functionality of ShapeOutsideInfo is dependant on any line
        specific data anymore.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
            Update to take a FloatingObject reference because the FloatingObject cannot be null.
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
            Ditto.
        (WebCore::ComputeFloatOffsetAdapter<FloatTypeValue>::collectIfNeeded): Pass FloatingObject to
            updateOffsetIfNeeded as a reference, since it cannot be null.
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
            Use ShapeOutsideDeltas object to calculate the offset and take the FloatingObject as a
            reference.
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
            Ditto.
        (WebCore::shapeInfoForFloat): Deleted.
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): Update to use ShapeOutsideDeltas object.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computeDeltasForContainingBlockLine): Return a ShaoeOutsideDeltas object
            instead of storing line specific data in instance variables.
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine): Deleted.
        * rendering/shapes/ShapeOutsideInfo.h:

2014-08-13  Zoltan Horvath  <zoltan@webkit.org>

        [CSS3-Text] Add rendering support for the none value of text-justify property
        https://bugs.webkit.org/show_bug.cgi?id=135349

        Reviewed by David Hyatt.

        Spec: http://dev.w3.org/csswg/css-text-3/#valdef-text-justify.none

        Test: fast/css3-text/css3-text-justify/text-justify-none.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):

2014-08-13  Eric Carlson  <eric.carlson@apple.com>

        Media document sends incorrect referer header
        https://bugs.webkit.org/show_bug.cgi?id=135839

        Reviewed by Jer Noble.

        Test: http/tests/media/media-document-referer.html

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::MediaDocumentParser): Stash referrer.
        (WebCore::MediaDocumentParser::createDocumentStructure): Set outgoing referrer.
        (WebCore::MediaDocument::MediaDocument): Stash referrer.
        * html/MediaDocument.h:

2014-08-13  Antti Koivisto  <antti@apple.com>

        Don't recurse into non-rendered subtrees when computing style
        https://bugs.webkit.org/show_bug.cgi?id=135844

        Reviewed by Andreas Kling.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        
        Do a simple reset of the style dirty bits and any computed style in non-renderer subtrees.

        (WebCore::Style::attachRenderTree):
        (WebCore::Style::resolveTree):
        
        Don't recurse into descendants if the element does not create a renderer.
        We didn't compute style anyway in such subtrees.

2014-08-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Elements whose contents start with an astral Unicode symbol disappear when CSS `::first-letter` is applied to them
        https://bugs.webkit.org/show_bug.cgi?id=135756

        Reviewed by Darin Adler.

        The previous code assumed that all "characters" are exactly 1 16-bit code unit wide. Instead, use numCharactersInGraphemeClusters().

        This patch also modifies the signature of numCharactersInGraphemeClusters() to take a StringView instead
        of a string, which will avoid a copy.

        Test: css1/pseudo/firstletter-surrogate.html

        * platform/text/TextBreakIterator.cpp:
        (WebCore::numCharactersInGraphemeClusters): Update numCharactersInGraphemeClusters() to take a StringView.
        * platform/text/TextBreakIterator.h: Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createFirstLetterRenderer): Use numCharactersInGraphemeClusters() to determine the length
        of the first letter, rather than assuming it has length of 1 code unit
        (WebCore::RenderBlock::updateFirstLetter): Add a FIXME comment.

2014-08-12  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Seeking to the very beginning of a buffered range stalls video playback
        https://bugs.webkit.org/show_bug.cgi?id=135865

        Reviewed by Eric Carlson.

        AVSampleBufferRenderSynchronizer will report a current time of about 100ms or so before
        the destination seek time when seeking. It does this in order to pre-roll the synchronized
        audio renderer, but this can lead to playback stalling when MediaSource::monitorSourceBuffers()
        looks at the media element's current time and determines that the current time is 100ms before
        any buffered samples.

        Clamp the value of currentMediaTime() to, at a minimum, the last requested seek time. This was
        the suggested course of action from <rdar://problem/17789374>.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentMediaTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

2014-08-12  Jer Noble  <jer.noble@apple.com>

        [MSE] YouTube will lose audio, video after seeking backwards to an unbuffered range.
        https://bugs.webkit.org/show_bug.cgi?id=135855

        Reviewed by Eric Carlson.

        When seeking into an unbuffered or partially buffered range, we will unconditionally pass samples to the
        decode queue even if there exist large gaps between those samples. Subsequently, the decoder will not
        notify us that it has become ready for new samples until playback reaches those later samples and the samples
        are discarded.

        When sending samples to be decoded in provideMediaData(), stop if there exists a large gap in the sample timeline.
        Do this by tracking the last enqueued decode end time, and look to see if the next sample's decode time indicates
        a gap of greater than 1 second.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer): Initialize lastEnqueuedDecodeEndTime.
        (WebCore::SourceBuffer::seekToTime): Set needsReenqueueing, in case samples do not yet exist in the trackBuffer
            sufficient to re-enqueue for the destination time, so that re-enqueueing will occur after the next append.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Check against lastEnqueuedDecodeEndTime, rather than
            lastEnqueuedPresentationTime before adding samples to the decodeQueue.
        (WebCore::SourceBuffer::provideMediaData): Stop when we reach a large gap between samples.
        (WebCore::SourceBuffer::reenqueueMediaForTime): Set or clear lastEnqueuedDecodeEndTime based on whether we
            have appended any non-displaying samples after flushing.

2014-08-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r172494.
        https://bugs.webkit.org/show_bug.cgi?id=135864

        asserting on bots (Requested by kling on #webkit).

        Reverted changeset:

        "Don't recurse into non-rendered subtrees when computing
        style"
        https://bugs.webkit.org/show_bug.cgi?id=135844
        http://trac.webkit.org/changeset/172494

2014-08-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Fonts forced to use non synthetic italics might be laid out with the incorrect baseline
        https://bugs.webkit.org/show_bug.cgi?id=135403

        Reviewed by Darin Adler.

        When italics is specified on a font, and the font isn't coming from the cache, we ask
        the SimpleFontData to provide a non-synthetic-italic version of itself. Our current
        implementation doesn't preserve whether or not the SimpleFontData includes vertical
        glyphs (glyphs that are not rotated when drawn in the vertical writing mode), which
        determines which baseline we use to lay out the text. By passing "false" to
        the isTextOrientationFallback argument to SimpleFontData::create(), we preserve this
        hasVerticalGlyphs flag.

        Test: fast/text/international/synthesized-italic-vertical-latin-double.html

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::nonSyntheticItalicFontData):
        * testing/Internals.cpp:
        (WebCore::Internals::invalidateFontCache): Add "invalidateFontCache" to window.internals.
        * testing/Internals.h: Ditto.
        * testing/Internals.idl: Ditto.

2014-08-12  Peyton Randolph  <prandolph@apple.com>

        Runtime switch for long mouse press gesture. Part of 135257 - Add long mouse press gesture.
        https://bugs.webkit.org/show_bug.cgi?id=135682

        Reviewed by Tim Horton.

        This patch adds a runtime switch for the Long Mouse Press Gesture and initially sets the feature flag
        to false. It also removes the ENABLE_LONG_MOUSE_PRESS feature flag as the runtime switch now guards
        its functionality.

        * Configurations/FeatureDefines.xcconfig: Remove LONG_MOUSE_PRESS feature flag.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear): Remove feature flag.
        (WebCore::EventHandler::handleMousePressEvent): Ditto.
        (WebCore::EventHandler::eventMayStartDrag): Ditto.
        (WebCore::EventHandler::handleMouseReleaseEvent):
        Perform event iff long mouse presses are enabled.
        (WebCore::EventHandler::beginTrackingPotentialLongMousePress): Ditto.
        (WebCore::EventHandler::recognizeLongMousePress): Ditto.
        (WebCore::EventHandler::cancelTrackingPotentialLongMousePress): Ditto.
        (WebCore::EventHandler::handleMouseMoveEvent): Remove feature flag.
        (WebCore::EventHandler::handleDrag): Ditto.
        (WebCore::EventHandler::mouseMovementExceedsThreshold): Ditto.
        * page/EventHandler.h:
        * page/Settings.in: Add longMousePressEnabled setting, initially false.

2014-08-12  Pratik Solanki  <psolanki@apple.com>

        Cached file backed resources don't make it to the Web Process when NETWORK_CFDATA_ARRAY_CALLBACK is enabled
        https://bugs.webkit.org/show_bug.cgi?id=135727
        <rdar://problem/17947880>

        Reviewed by Darin Adler.

        Add SharedBuffer::existingCFData() which returns CFDataRef if it has one. Refactor
        this code out of createCFData().

        * WebCore.exp.in:
        * platform/SharedBuffer.h:
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::existingCFData): Added.
        (WebCore::SharedBuffer::createCFData):

2014-08-12  Tim Horton  <timothy_horton@apple.com>

        Small region (~1px tall) where you get the selection button instead of the phone number overlay
        https://bugs.webkit.org/show_bug.cgi?id=135852
        <rdar://problem/17992795>

        Reviewed by Enrica Casucci.

        * WebCore.exp.in:

2014-08-12  Alex Christensen  <achristensen@webkit.org>

        Generate header detection headers for CMake on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=135807

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * PlatformWin.cmake:
        Generate and include a stub WebCoreHeaderDetection.h.

2014-08-12  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        Make sure that begin time cannot be greater than SMILTime::indefiniteValue unintentionally.
        https://bugs.webkit.org/show_bug.cgi?id=135838

        Reviewed by Darin Adler.

        When WebCore::SVGSMILElement::resolveInterval creates a SMILTime begin
        node for a SMILInterval, then it only checks if the value of begin is
        indefinite or unresolved but misses the case if it is between these two
        reference values.

        This is a backport of my fix in Blink: https://codereview.chromium.org/406263002/.

        Test: svg/animations/animateMotion-crash-with-large-begin-time.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseOffsetValue):
        (WebCore::SVGSMILElement::parseClockValue):

2014-08-12  Andy Estes  <aestes@apple.com>

        Revert a change that wasn't meant to be a part of r172482.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):

2014-08-12  Antti Koivisto  <antti@apple.com>

        Don't recurse into non-rendered subtrees when computing style
        https://bugs.webkit.org/show_bug.cgi?id=135844

        Reviewed by Andreas Kling.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        
        Do a simple reset of the style dirty bits and any computed style in non-rendered subtrees.

        (WebCore::Style::attachRenderTree):
        (WebCore::Style::resolveTree):
        
        Don't recurse into descendants if the element does not create a renderer.
        We didn't compute style anyway in such subtrees.

2014-08-12  Antti Koivisto  <antti@apple.com>

        Remove isInCanvasSubtree bit
        https://bugs.webkit.org/show_bug.cgi?id=135837

        Reviewed by Andreas Kling.

        The logic to update this bit is in a wrong place and it is not clear it does 
        the right thing in all cases. Also the optimization doesn't seem necessary,
        the focus code is not that hot.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * dom/Element.cpp:
        (WebCore::Element::isFocusable):
        (WebCore::Element::clearStyleDerivedDataBeforeDetachingRenderer):
        (WebCore::Element::setIsInCanvasSubtree): Deleted.
        (WebCore::Element::isInCanvasSubtree): Deleted.
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::isInCanvasSubtree): Deleted.
        (WebCore::ElementRareData::setIsInCanvasSubtree): Deleted.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::willAttachRenderers): Deleted.
        * html/HTMLCanvasElement.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachRenderTree):

2014-08-11  Andy Estes  <aestes@apple.com>

        [iOS] Get rid of iOS.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=135809

        Reviewed by Joseph Pecoraro.

        All iOS.xcconfig did was include AspenFamily.xcconfig, so there's no need for the indirection.

        * Configurations/Base.xcconfig:
        * Configurations/iOS.xcconfig: Removed.
        * WebCore.xcodeproj/project.pbxproj:

2014-08-11  Roger Fong  <roger_fong@apple.com>

        Adjust max-width of cues based on text alignment when cue size is expanded.
        https://bugs.webkit.org/show_bug.cgi?id=135823.

        Reviewed by Brent Fulgham.

        All units are in percentages.
        If we are left aligned the max cue width is the 100 minus the cue position.
        If we are right aligned the max cue width is the cue position.
        If we are centered the max cue width is just 100.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):

2014-08-12  Fabien Vallée  <fvallee@connected-labs.com>

        [GStreamer] playback rate is rounded to integer
        https://bugs.webkit.org/show_bug.cgi?id=135802

        Reviewed by Philippe Normand.

        Test: media/video-ended-event-slow-motion-playback.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setRate):

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

        [Win] Unreviewed build fix after r17425

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h: Remove
        unused 'currentTime' declaration from header file. This is now fully implemented
        in platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h.

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

        Dont allocate GCond in VideoSinkGStreamer.cpp dynamically.

        Rubber-stamped by Carlos Garcia Campos.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (_WebKitVideoSinkPrivate::_WebKitVideoSinkPrivate): Move the
        g_cond_init() and gst_video_info_init() calls here.
        (_WebKitVideoSinkPrivate::~_WebKitVideoSinkPrivate): Move the
        g_cond_clear() call here.
        (webkit_video_sink_init):
        (webkitVideoSinkTimeoutCallback):
        (webkitVideoSinkRender):
        (unlockBufferMutex):
        (webkit_video_sink_class_init):
        (webkitVideoSinkDispose): Deleted. Not required anymore.

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

        Clean up GMutexLocker
        https://bugs.webkit.org/show_bug.cgi?id=135833

        Reviewed by Carlos Garcia Campos.

        Don't dynamically allocate GMutex objects. Update GMutexLocker
        initializations to pass in a GMutex reference, not a pointer.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (_WebKitVideoSinkPrivate::_WebKitVideoSinkPrivate): Initialize the GMutex.
        (_WebKitVideoSinkPrivate::~_WebKitVideoSinkPrivate): Clear the GMutex.
        (webkit_video_sink_init):
        (webkitVideoSinkRender):
        (webkitVideoSinkDispose):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProperty):
        (webKitWebSrcStop):
        (webKitWebSrcStart):
        (webKitWebSrcChangeState):
        (webKitWebSrcQueryWithParent):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri):
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):
        (webKitWebSrcSetMediaPlayer):
        (StreamingClient::createReadBuffer):
        (StreamingClient::handleResponseReceived):
        (StreamingClient::handleDataReceived):
        (StreamingClient::handleNotifyFinished):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):

2014-08-12  Eduardo Lima Mitev  <elima@igalia.com>
        [GTK] Adds dependency on GnuTLS 3.0+ for the implementation of subtle crypto algorithms
        https://bugs.webkit.org/show_bug.cgi?id=133317

        Reviewed by Philippe Normand.

        No new tests since no new functionality has been added.

        * PlatformGTK.cmake: Adds GnuTLS libs and included dirs to WebCore targets

2014-08-10  Philippe Normand  <pnormand@igalia.com>

        [WebAudio] FFTFrame is cluttered with dead code
        https://bugs.webkit.org/show_bug.cgi?id=135751

        Reviewed by Eric Carlson.

        Cleaned up unused FFTFrame implementations from the tree. If the
        FFMPEG or IPP versions are needed later on again this patch can be
        rolled out.

        No new tests, the code removed was disabled on all ports.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::Biquad):
        (WebCore::Biquad::~Biquad):
        (WebCore::Biquad::process):
        (WebCore::Biquad::reset):
        (WebCore::Biquad::setNormalizedCoefficients):
        * platform/audio/Biquad.h:
        * platform/audio/DirectConvolver.cpp:
        (WebCore::DirectConvolver::DirectConvolver):
        (WebCore::DirectConvolver::process):
        (WebCore::DirectConvolver::reset):
        * platform/audio/DirectConvolver.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/FFTFrameStub.cpp:
        * platform/audio/ffmpeg/FFTFrameFFMPEG.cpp: Removed.
        * platform/audio/ipp/FFTFrameIPP.cpp: Removed.
        * platform/audio/mac/FFTFrameMac.cpp:

2014-08-11  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        #if a function that's only used on iOS.

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

        [Mac, iOS] Some media content never reaches full 'loaded' state
        https://bugs.webkit.org/show_bug.cgi?id=135814
        <rdar://problem/17476923>

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::duration): Change to a wrapper that just calls
        the durationDouble method and narrows to a float.
        (WebCore::MediaPlayerPrivateAVFoundation::durationDouble): Revised version of duration
        that works with doubles.
        (WebCore::MediaPlayerPrivateAVFoundation::currentTime): Wrapper that calls the
        currentTimeDouble method and narrows to a float.
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): Use durationDouble for
        comparison with passed 'time' argument (which is a double).
        (WebCore::MediaPlayerPrivateAVFoundation::didEnd): Use 'currentTimeDouble' so we can
        cache the double precision version of this value.
        (WebCore::MediaPlayerPrivateAVFoundation::extraMemoryCost): Use 'durationDouble' since
        the rest of the calculation is in terms of doubles.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformDuration): Convert to 'double'. All
        uses of this method are internal to the MediaPlayerPrivateAVFoundation* files.
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTimeDouble): Switch from float implementation.
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTime): Deleted. (Moved to parent class)
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Convert to 'double'. All
        uses of this method are internal to the MediaPlayerPrivateAVFoundation* files.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTimeDouble): Switch from floating implementation.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime): Deleted. (Moved to parent class)

2014-08-11  Enrica Casucci  <enrica@apple.com>

        Improve look and feel of combined service menu..
        https://bugs.webkit.org/show_bug.cgi?id=135824
        <rdar://problem/17936880>

        Reviewed by Tim Horton.

        Adding some localizable strings.

        * English.lproj/Localizable.strings:

2014-08-11  Jer Noble  <jer.noble@apple.com>

        [iOS] <video> element requests are missing session cookies; sometimes persistant cookies.
        https://bugs.webkit.org/show_bug.cgi?id=135816

        Reviewed by Alexey Proskuryakov.

        On iOS, the AVFoundation framework will copy appropriate cookies for the requested URL across to the
        mediaserverd process. For WebKit2, the WebProcess does not have access to session cookies for the 
        current browsing session. When creating an AVURLAsset, fetch the appropriate cookies for the requested
        URL, and pass them into AVURLAsset in the options dictionary.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerGetRawCookies): Call CookieJar's equivalent method.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::getRawCookies): Pass to HTMLMediaElement.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerGetRawCookies):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::toNSHTTPCookie): Convert a WebCore Cookie -> NSHTTPCookie.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Fetch cookies for the requested
            URL, and if successful, add them to the AVURLAsset options dictionary.

2014-08-11  Roger Fong  <roger_fong@apple.com>

        Adjustments to CueBox CSS Width calculations Part 2.
        https://bugs.webkit.org/show_bug.cgi?id=135820
        <rdar://problem/17954473>.

        Reviewed by Brent Fulgham.

        Two adjustments made:
        a) The default font size used was incorrect. It is not just 10px, 
        but should be based off a percentage of the video size.
        b) The top/left CSS property needs to be adjusted appropriately if the cue
        is center aligned and we change the cue's size such that the cue remains centered.
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        * html/track/VTTCue.h: Remove unnecessary constant.

2014-08-11  Beth Dakin  <bdakin@apple.com>

        Fixed backgrounds don't paint in blurred inset areas
        https://bugs.webkit.org/show_bug.cgi?id=135712

        Reviewed by Simon Fraser.

        Background geometry calculations for fixed background need to use the larger 
        visible rect.

        The first version of this patch caused a regression because it universally 
        adjusted the value for top to account for the inset whether or not the 
        viewportRect location was adjusted for the same. This version fixes that — those 
        two changes go hand-in-hand.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

2014-08-11  Antti Koivisto  <antti@apple.com>

        Pass inherited style only when resolving tree style
        https://bugs.webkit.org/show_bug.cgi?id=135799

        Reviewed by Andreas Kling.

        No need to pass around the style parent element.

        * dom/ContainerNode.h:
        (WebCore::ContainerNode::childShouldCreateRenderer): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::RenderTreePosition::parent):
        (WebCore::Style::nextSiblingRenderer):
        (WebCore::Style::RenderTreePosition::RenderTreePosition):
        (WebCore::Style::RenderTreePosition::computeNextSibling):
        (WebCore::Style::shouldCreateRenderer):
        (WebCore::Style::styleForElement):
        (WebCore::Style::createRendererIfNeeded):
        (WebCore::Style::textRendererIsNeeded):
        (WebCore::Style::createTextRendererIfNeeded):
        (WebCore::Style::attachTextRenderer):
        (WebCore::Style::updateTextRendererAfterContentChange):
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::resolveLocal):
        (WebCore::Style::resolveTextNode):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::resolveTree):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::childShouldCreateRenderer): Deleted.
        
            Implement this in SVGSVGElement::rendererIsNeeded instead.

        * svg/SVGDocument.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::rendererIsNeeded):

2014-08-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: support :scope
        https://bugs.webkit.org/show_bug.cgi?id=135733

        Reviewed by Benjamin Poulain.

        Implement :scope for CSS JIT. It introduces scope field to CheckingContext
        and it makes CheckingContext more similar to SelectorChecker::SelectorCheckingContext.
        And since :scope requires CheckingContext, QueryingRules can accept SelectorCheckerWithCheckingContext.

        Tests: fast/selectors/querySelector-scope-filtered-root.html
               fast/selectors/scope-works-as-root.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::shouldUseRenderStyleFromCheckingContext):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::addFlagsToElementStyleFromContext):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::loadCheckingContext):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLastChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsOnlyChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRequestedPseudoElementEqualsToSelectorPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsScopeRoot):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateMarkPseudoStyleForPseudoElement):
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompiler::CheckingContext::CheckingContext):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithCheckingContext):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:

2014-08-11  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: console.profile shouldn't stop auto-recorded profiles
        https://bugs.webkit.org/show_bug.cgi?id=135810

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start): Added. Call internalStart. Set m_enabledFromFrontend.
        (WebCore::InspectorTimelineAgent::stop): Added. Calls internalStop. Clear m_enabledFromFrontend.
        (WebCore::InspectorTimelineAgent::internalStart): Renamed from start.
        (WebCore::InspectorTimelineAgent::internalStop): Renamed from stop.
        (WebCore::InspectorTimelineAgent::startFromConsole): Use internalStart.
        (WebCore::InspectorTimelineAgent::stopFromConsole): Use internalStop. Only stop if !m_enabledFromFrontend.
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent): Initialize m_enabledFromFrontend.
        * inspector/InspectorTimelineAgent.h: Added m_enabledFromFrontend.

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

        [Win] Adjust build script for Windows production build.
        https://bugs.webkit.org/show_bug.cgi?id=135806
        <rdar://problem/17978299>

        Reviewed by Timothy Hatcher.

        * WebCore.vcxproj/copyForwardingHeaders.cmd: Copy file needed
        for WebInspectorUI build.

2014-08-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r172393.
        https://bugs.webkit.org/show_bug.cgi?id=135796

        discussion needed about GnuTLS version bump on the bots
        (Requested by philn on #webkit).

        Reverted changeset:

        https://bugs.webkit.org/show_bug.cgi?id=133317
        http://trac.webkit.org/changeset/172393

2014-08-11  Eduardo Lima Mitev  <elima@igalia.com>
        [GTK] Adds dependency on GnuTLS 3.0+ for the implementation of subtle crypto algorithms
        https://bugs.webkit.org/show_bug.cgi?id=133317

        Reviewed by Philippe Normand.

        No new tests since no new functionality has been added.

        * PlatformGTK.cmake: Adds GnuTLS libs and included dirs to WebCore targets

2014-08-11  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Fix debug build after r172389.

        Rubber-stamped by Philippe Normand.

        * crypto/gtk/CryptoKeyRSAGtk.cpp:
        (WebCore::CryptoKeyRSA::exportData): Remove spurious ASSERT from
        stub. It will be added back along with the real implementation of
        the method.

2014-08-11  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed fix after r172348.

        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage): Initialize m_minimumSubsamplingLevel to 0.

2014-08-11  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Adds stubs for all subtle crypto algorithm implemntations
        https://bugs.webkit.org/show_bug.cgi?id=133316

        Reviewed by Philippe Normand.

        No new tests since no new functionality has been added.

        * CMakeLists.txt: Add subtle crypto 'algorithms' and 'parameters' dirs to WebCore incuded dirs
        * PlatformGTK.cmake:  Add subtle crypto sources to WebCore target
        * crypto/gtk/CryptoAlgorithmAES_CBCGtk.cpp: Added.
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gtk/CryptoAlgorithmAES_KWGtk.cpp: Added.
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt):
        * crypto/gtk/CryptoAlgorithmHMACGtk.cpp: Added.
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/gtk/CryptoAlgorithmRSAES_PKCS1_v1_5Gtk.cpp: Added.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/gtk/CryptoAlgorithmRSASSA_PKCS1_v1_5Gtk.cpp: Added.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/gtk/CryptoAlgorithmRSA_OAEPGtk.cpp: Added.
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gtk/CryptoAlgorithmRegistryGtk.cpp: Added.
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/gtk/CryptoDigestGtk.cpp: Added.
        (WebCore::CryptoDigest::CryptoDigest):
        (WebCore::CryptoDigest::~CryptoDigest):
        (WebCore::CryptoDigest::create):
        (WebCore::CryptoDigest::addBytes):
        (WebCore::CryptoDigest::computeHash):
        * crypto/gtk/CryptoKeyRSAGtk.cpp: Added.
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::~CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::restrictToHash):
        (WebCore::CryptoKeyRSA::isRestrictedToHash):
        (WebCore::CryptoKeyRSA::keySizeInBits):
        (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        (WebCore::CryptoKeyRSA::exportData):
        (WebCore::CryptoKeyRSA::generatePair):
        * crypto/gtk/SerializedCryptoKeyWrapGtk.cpp: Added.
        (WebCore::getDefaultWebCryptoMasterKey):
        (WebCore::wrapSerializedCryptoKey):
        (WebCore::unwrapSerializedCryptoKey):
        * crypto/keys/CryptoKeyRSA.h:

2014-08-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove inputSpeech.png
        https://bugs.webkit.org/show_bug.cgi?id=135771

        Reviewed by Andreas Kling.

        * Resources/inputSpeech.png: Removed.
        * WebCore.xcodeproj/project.pbxproj:

2014-08-10  Tim Horton  <timothy_horton@apple.com>

        Yelp phone number highlights often disappear
        https://bugs.webkit.org/show_bug.cgi?id=135789
        <rdar://problem/17971057>

        Reviewed by Brady Eidson.

        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        (WebCore::Editor::clearDataDetectedTelephoneNumbers): Deleted.
        * editing/Editor.h:
        (WebCore::Editor::detectedTelephoneNumberRanges):
        * page/EditorClient.h:
        (WebCore::EditorClient::selectedTelephoneNumberRangesChanged):
        Cache and expose detected telephone number ranges on Editor.
        Change selectedTelephoneNumberRangesChanged to take no arguments; it's
        just a notification now.

2014-08-09  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Transforms on non-compositing layers leave bits behind when the box boundaries changes.
        https://bugs.webkit.org/show_bug.cgi?id=135786

        Reviewed by Simon Fraser.

        Since we don't control the transformed context painting's snapping strategy, our best bet to fully
        include the transformed box when requesting for repaint is to use enclosing.
        Pixelsnapping doesn't work here for all cases. For example, a scaled box at 0.8px can be anti-aliased painted
        both at 0.5px and 1px, while with pixelsnapping we'd expect it to be painted starting from 1px;

        Test: fast/repaint/hidpi-transform-on-subpixel-repaintrect.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint): enclose the result of the transform.

2014-08-08  Mark Lam  <mark.lam@apple.com>

        REGRESSION: Inspector crashes when debugger is paused and injected scripts access window.screen().
        <https://webkit.org/b/135656>

        Not reviewed.

        Rolling out r170680 which was merged to ToT in r172129.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::attachDebugger):

2014-08-08  Peyton Randolph  <prandolph@apple.com>

        Implement long mouse press over links. Part of 135257 - Add long mouse press gesture.
        https://bugs.webkit.org/show_bug.cgi?id=135476

        Reviewed by Tim Horton.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): 
        (WebCore::EventHandler::clear): Clear long press state.
        (WebCore::EventHandler::handleMousePressEvent): Start the long-press if the mouse press is a left
        mouse press over a link.
        (WebCore::EventHandler::eventMayStartDrag): We cannot start a drag if we've recognized a long press.
        (WebCore::EventHandler::handleMouseReleaseEvent): 
        If we didn't recognize a long press, cancel the long press.
        (WebCore::EventHandler::beginTrackingPotentialLongMousePress): 
        Begin the long mouse press by kicking off a timer. If the timer fires before the long press is
        cancelled, the long press is recognized.
        (WebCore::EventHandler::recognizeLongMousePress): Added. Trigger the long-press and disable other
        actions like dragging.
        (WebCore::EventHandler::cancelTrackingPotentialLongMousePress): Added. Cancel the long press by 
        clearing related state.
        (WebCore::EventHandler::clearLongMousePressState): Added. Clear long press state.
        (WebCore::EventHandler::handleLongMousePressMouseMovedEvent): Added. Cancel the long press if
        the mouse moves outside a specified hysteresis interval.
        (WebCore::EventHandler::handleMouseMoveEvent): Ask handleLongMousePressMouseMovedEvent whether to
        return early and not update hovers, cursors, drags, etc.
        (WebCore::EventHandler::dragHysteresisExceeded): Factor out the hysteresis bounds check into
        mouseHysteresisExceeded().
        (WebCore::EventHandler::handleDrag): Cancel long press upon starting drag.
        (WebCore::EventHandler::mouseHysteresisExceeded): Added. General hysteresis function that takes an
        arbitrary mouse movement threshold. Factored out from dragHysteresisExceeded.
        * page/EventHandler.h:

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

        [WK2] Scrolling does not work inside nested frames
        https://bugs.webkit.org/show_bug.cgi?id=135775
        <rdar://problem/17959896>

        Reviewed by Tim Horton.
        
        r169733 added an "isMainFrame" check in AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged.
        However we have to rebuild the non-fast-scrollable region when any subframe changes,
        even a deeply nested one. So always rebuild it, starting from the root frame.
        
        Fixes scrolling on nested framesets like http://www.opengl.org/sdk/docs/man3/.

        Test: platform/mac-wk2/tiled-drawing/scrolling/frames/frameset-nested-frame-scrollability.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):

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

        [CSS Shapes] Refactor getExcludedIntervals since only one LineSegment is ever returned
        https://bugs.webkit.org/show_bug.cgi?id=135757

        Reviewed by Zoltan Horvath.

        The interface for getExcludedIntervals was designed when shape-inside
        was still a thing, and it was possible for a line in a shape to have
        multiple segments. shape-outside can only have one segment per line,
        so this refactors the code to simplify and reflect that reality.

        No new test, no behavior change.

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedInterval): 
        (WebCore::BoxShape::getExcludedIntervals): Deleted.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::getExcludedInterval):
        (WebCore::PolygonShape::getExcludedIntervals): Deleted.
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShape::getExcludedInterval):
        (WebCore::RasterShape::getExcludedIntervals): Deleted.
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::getExcludedInterval):
        (WebCore::RectangleShape::getExcludedIntervals): Deleted.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:
        (WebCore::LineSegment::LineSegment):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::logicalLeftOffset):
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):
        (WebCore::ShapeOutsideInfo::computeSegmentsForLine): Deleted.
        * rendering/shapes/ShapeOutsideInfo.h:

2014-08-08  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: add debugging flag to InspectorTest for unbuffered logging to stderr
        https://bugs.webkit.org/show_bug.cgi?id=135726

        Reviewed by Timothy Hatcher.

        Add a bridge so that InspectorTest can synchronously log to the console.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::unbufferedLog): Added.
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2014-08-08  Roger Fong  <roger_fong@apple.com>

        Adjustments to CueBox CSS Width calculations.
        https://bugs.webkit.org/show_bug.cgi?id=135759
        <rdar://problem/17954473>.

        Reviewed by Eric Carlson.

        This is a followup patch that addresses some of the test failures caused by r172224.
        These tests were skipped in r172253.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateActiveCuesFontSize):
        Tell the cue boxes that they need to be updated when the font size specified in the user prefs changes.
        
        Cap width to 100%, calculate max-width in percentages instead of pixels.
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):

        (WebCore::VTTCue::setFontSize):
        Remove some unnecessary code that doesn't actually work.
        Make sure to tell cuebox that it needs to be updated.
        * html/track/VTTCue.h: Change float constant to double.

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

        Clean up image subsampling code, make it less iOS-specific
        https://bugs.webkit.org/show_bug.cgi?id=134916

        Reviewed by Dean Jackson.

        Compile the image subsampling code on both Mac and iOS, and make it more platform
        neutral in general. Add a setting to allow it to be enabled on Mac for testing.
        
        The most significant changes are in ImageSourceCG and BitmapImageCG. CG's ImageSource
        is no longer stateful with respect to subsampling; its functions take a SubsamplingLevel
        when appropriate. CG's BitmapImage now determines which level of subsampling to use
        for a given frame, storing the subsampling level in the frame data. It can replace
        an aggressively subsampled frame with a less subsampled frame if necessary.
        
        To reduce the chances of subsampling affecting rendering, BitmapImage::size() now
        always returns the non-subsampled size; subsampling is strictly internal to BitmapImage.
        BitmapImage::draw() takes care of scaling the srcRect for subsampled images.
        
        iOS had a code path that enabled caching of frame metadata in BitmapImage without
        actually decoding the frame; make this cross-platform.
        
        Fix a couple of issues in the original pathc: remove a log, and ImageSource::allowSubsamplingOfFrameAtIndex()
        return false.

        * WebCore.exp.in: Changed signature for GraphicsContext::drawNativeImage().
        * WebCore.xcodeproj/project.pbxproj: Added ImageSource.cpp, which is not built
        for Cocoa but useful for reference.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer): Remove iOS-specific subsampling code.
        (WebCore::CachedImage::createImage): Call setAllowSubsampling() on the image if we
        can get to Settings (m_loader is null for image documents).
        (WebCore::CachedImage::currentFrameKnownToBeOpaque): This forced decode always
        caused creation of the non-subsampled image, so remove it. There's no reason to
        eagerly decode the frame here.
        * loader/cache/CachedImage.h: Fix comment.
        * page/Settings.cpp: Add defaultImageSubsamplingEnabled, true for iOS and false for Mac.
        * page/Settings.in: Added imageSubsamplingEnabled.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage): Init some more things. Default m_allowSubsampling to
        true for iOS to catch images created in code paths where we can't get to Settings.
        (WebCore::BitmapImage::haveFrameAtIndex): Handy helper.
        (WebCore::BitmapImage::cacheFrame): Now takes the subsampling level and whether to cache
        just metadata, or also the frame.
        (WebCore::BitmapImage::didDecodeProperties): No need to store originalSize.
        (WebCore::BitmapImage::updateSize): When we get the size for the first time, call
        determineMinimumSubsamplingLevel() to choose a reasonable subsampling level which takes
        platform-specific limits into account.
        (WebCore::BitmapImage::dataChanged): Comment.
        (WebCore::BitmapImage::ensureFrameIsCached): Take ImageFrameCaching into account.
        (WebCore::BitmapImage::frameAtIndex): Choose a subsampling level given the scale,
        then determine if we can use the currently cached frame, or whether we should resample.
        (WebCore::BitmapImage::frameIsCompleteAtIndex): Caching m_isComplete is now done when caching
        frame metadata.
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex): The 'true' return is the safe return value.
        (WebCore::BitmapImage::frameOrientationAtIndex): Caching m_orientation is now done when caching
        frame metadata.
        (WebCore::BitmapImage::cacheFrameInfo): Deleted.
        (WebCore::BitmapImage::originalSize): Deleted.
        (WebCore::BitmapImage::originalSizeRespectingOrientation): Deleted.
        (WebCore::BitmapImage::currentFrameSize): Deleted.
        (WebCore::BitmapImage::ensureFrameInfoIsCached): Deleted.
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/GraphicsContext.h: No need to pass a scale param now.
        * platform/graphics/ImageSource.cpp: Non-Cocoa changes.
        (WebCore::ImageSource::subsamplingLevelForScale):
        (WebCore::ImageSource::allowSubsamplingOfFrameAtIndex):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameBytesAtIndex):
        * platform/graphics/ImageSource.h: No longer stores subsampling state.
        (WebCore::ImageSource::isSubsampled): Deleted.
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::determineMinimumSubsamplingLevel):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage): Init more members.
        (WebCore::BitmapImage::determineMinimumSubsamplingLevel): Choose a minimum subsampling
        level for the platform (subsample until the image area falls under a threshold).
        (WebCore::BitmapImage::checkForSolidColor): Don't bother decoding frames if the image
        is not 1x1. Also take care not to decode a non-subsampled image.
        (WebCore::BitmapImage::draw): The actual bug fix is here; remove logic that
        computed srcRectForCurrentFrame from m_size and m_originalSize; for some callers
        srcRect was computed using the pre-subsampled size, and for others it was the subsampled size.
        Instead, scale srcRect by mapping between the non-subsampled size, and the size of the CGImageRef
        which is affected by subsampling.
        (WebCore::BitmapImage::copyUnscaledFrameAtIndex):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): Remove #ifdeffed code.
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage): No more weird scaling!
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::createImageSourceOptions): Helper that always returns a new CFDictionaryRef.
        (WebCore::imageSourceOptions): If not subsampling, return the cached CFDictionaryRef, otherwise
        make a new options dict and return it.
        (WebCore::ImageSource::subsamplingLevelForScale): Helper that returns a subsampling level
        between 0 and 3 given a scale.
        (WebCore::ImageSource::isSizeAvailable): SkipMetadata is a default value for the param now.
        (WebCore::ImageSource::allowSubsamplingOfFrameAtIndex): We turn off subsampling for progressive
        JPEGs because of a bug, so need this to know if a frame should be subsampled.
        (WebCore::ImageSource::frameSizeAtIndex): The looping to find a subsampling level is now in BitmapImageCG.
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore::ImageSource::size): Always use a subsampling level of 0 for size().
        (WebCore::ImageSource::getHotSpot):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex): The caller mapped a scale to a level.
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameBytesAtIndex):
        (WebCore::ImageSource::imageSourceOptions): Deleted.
        (WebCore::ImageSource::originalSize): Deleted.
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::invalidatePlatformData): 0 -> nullptr
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::determineMinimumSubsamplingLevel):

2014-08-08  Alex Christensen  <achristensen@webkit.org>

        Progress towards using CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=135662

        Reviewed by Laszlo Gombos.

        * CMakeLists.txt:
        Added necessary include directories and idls.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        Moved ImageSource.cpp and image-decoders to platform CMake files because they are not used on mac.
        * PlatformMac.cmake:
        Corrected some sources.
        * config.h:
        Added workaround for not using prefix headers with CMake.
        * platform/graphics/ANGLEWebKitBridge.h:
        Compile fix to find ANGLE headers while using CMake.
        * platform/graphics/FormatConverter.h:
        * platform/mac/NSScrollerImpDetails.h:
        Removed unnecessary config.h includes.

2014-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Drop the required version of CMake down to 2.8.8
        https://bugs.webkit.org/show_bug.cgi?id=135713

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Use set_property() to set INCLUDE_DIRECTORIES for
        the ANGLESupport library. This avoids using target_include_directories()
        which requires CMake 2.8.11.

2014-08-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][1.4] Caps negotiation failure in playback pipeline
        https://bugs.webkit.org/show_bug.cgi?id=135607

        Reviewed by Carlos Garcia Campos.

        Ensure the capsfilters used in front of interleave negotiate their
        caps correctly with audioconvert which requires audio buffers with
        interleaved layout.

        No new tests, existing webaudio tests will cover this change once
        we bump our JHBuild moduleset to GStreamer 1.4.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (getGStreamerMonoAudioCaps):

2014-08-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r172291.
        https://bugs.webkit.org/show_bug.cgi?id=135748

        broke background-attachment-fixed with backround-size-contain
        (e.g. iCloud.com) (Requested by thorton on #webkit).

        Reverted changeset:

        "Fixed backgrounds don't paint in blurred inset areas"
        https://bugs.webkit.org/show_bug.cgi?id=135712
        http://trac.webkit.org/changeset/172291

2014-08-07  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Border thickness and length flooring can result empty borders
        due to losing precision during multiple float <-> LayoutUnit conversions.
        https://bugs.webkit.org/show_bug.cgi?id=135686

        Reviewed by Simon Fraser.

        The combination of losing precision and flooring the border thickness/length to avoid
        empty border rect drawing can lead to false positives of missing borders.
        This patch moves empty border checking right before painting where we can safely use round
        instead of floor.

        Tests: fast/borders/hidpi-border-width-flooring.html

        * rendering/RenderObject.cpp:
        (WebCore::drawBorderLineRect):
        (WebCore::drawBorderLine):
        (WebCore::RenderObject::drawLineForBoxSide):

2014-08-07  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with mpegts since r167025
        https://bugs.webkit.org/show_bug.cgi?id=135737

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Added includes and libraries about MPEG-TS

2014-08-07  Simon Fraser  <simon.fraser@apple.com>

        HTML <sub> and <sup> elements do not work in some 64-bit builds
        https://bugs.webkit.org/show_bug.cgi?id=135736

        Reviewed by Tim Horton.
        
        RootInlineBox::verticalPositionForBox() had some implicit conversions between
        LayoutUnit and int that caused overflow, and resulted in different comparison
        behavior with an int constant in different architectures, since overflow behavior
        is undefined.
        
        Specifically, VerticalPositionCache was written in terms of ints with a special
        0x80000000 "not found" value. However, 0x80000000 was being assigned to
        a LayoutUnit, which multiplies by 64 causing overflow. The result was then
        compared again with 0x80000000 which could pass or fail depending on overflow
        behavior.
        
        Fix by converting VerticalPositionCache to use LayoutUnits, and to have a bool
        return value with a result out param, instead of a special return value.

        Not easily testable, since the difference does not show in DRT output,
        and a ref test would be flakey.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/VerticalPositionCache.h:
        (WebCore::VerticalPositionCache::get):
        (WebCore::VerticalPositionCache::set):

2014-08-07  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of SCRIPTED_SPEECH
        https://bugs.webkit.org/show_bug.cgi?id=135729

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/speech/SpeechGrammar.cpp: Removed.
        * Modules/speech/SpeechGrammar.h: Removed.
        * Modules/speech/SpeechGrammar.idl: Removed.
        * Modules/speech/SpeechGrammarList.cpp: Removed.
        * Modules/speech/SpeechGrammarList.h: Removed.
        * Modules/speech/SpeechGrammarList.idl: Removed.
        * Modules/speech/SpeechRecognition.cpp: Removed.
        * Modules/speech/SpeechRecognition.h: Removed.
        * Modules/speech/SpeechRecognition.idl: Removed.
        * Modules/speech/SpeechRecognitionAlternative.cpp: Removed.
        * Modules/speech/SpeechRecognitionAlternative.h: Removed.
        * Modules/speech/SpeechRecognitionAlternative.idl: Removed.
        * Modules/speech/SpeechRecognitionClient.h: Removed.
        * Modules/speech/SpeechRecognitionController.cpp: Removed.
        * Modules/speech/SpeechRecognitionController.h: Removed.
        * Modules/speech/SpeechRecognitionError.cpp: Removed.
        * Modules/speech/SpeechRecognitionError.h: Removed.
        * Modules/speech/SpeechRecognitionError.idl: Removed.
        * Modules/speech/SpeechRecognitionEvent.cpp: Removed.
        * Modules/speech/SpeechRecognitionEvent.h: Removed.
        * Modules/speech/SpeechRecognitionEvent.idl: Removed.
        * Modules/speech/SpeechRecognitionResult.cpp: Removed.
        * Modules/speech/SpeechRecognitionResult.h: Removed.
        * Modules/speech/SpeechRecognitionResult.idl: Removed.
        * Modules/speech/SpeechRecognitionResultList.cpp: Removed.
        * Modules/speech/SpeechRecognitionResultList.h: Removed.
        * Modules/speech/SpeechRecognitionResultList.idl: Removed.
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setScriptedSpeechEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::scriptedSpeechEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitSpeechRecognitionEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitSpeechRecognitionErrorEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitSpeechRecognitionEventEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitSpeechGrammarEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitSpeechGrammarListEnabled): Deleted.
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue): Deleted.
        * bindings/js/JSDictionary.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:

2014-08-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        Don't build the JSFileException and JSFileReaderSync files in 64-bit; they are already part
        of DerivedObjects.cpp.

        * WebCore.vcxproj/WebCore.vcxproj: Exclude JSFileException and JSFileReaderSync to avoid
        multiple definitions of symbols.

2014-08-07  Enrica Casucci  <enrica@apple.com>

        [Services with UI] Action menu does not appear if selection includes both text and an image.
        https://bugs.webkit.org/show_bug.cgi?id=135731
        <rdar://problem/17837491>

        Reviewed by Brady Eidson.

        When collecting selection rects via SelectionRectGatherer we should also note if the selection
        contains non text elements. This way the Notifier class can send that information to ServicesOverlayController
        to properly handle the highlight for the service.

        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::SelectionRectGatherer):
        (WebCore::SelectionRectGatherer::Notifier::~Notifier):
        (WebCore::SelectionRectGatherer::clearAndCreateNotifier):
        * editing/SelectionRectGatherer.h:
        (WebCore::SelectionRectGatherer::setTextOnly):
        (WebCore::SelectionRectGatherer::isTextOnly):
        * page/EditorClient.h:
        (WebCore::EditorClient::selectionRectsDidChange):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::applySubtreeSelection):

2014-08-07  Andy Estes  <aestes@apple.com>

        [Mac] Parental Controls content filter is mistakenly enabled for HTTP responses
        https://bugs.webkit.org/show_bug.cgi?id=135730

        Reviewed by Brady Eidson.

        On the Mac, the WebFilterEvaluator (Parental Controls) content filter should only be enabled for HTTPS
        responses. During iOS upstreaming we mistakenly enabled it for HTTP responses as well, and this causes HTTP
        responses to be filtered twice -- once by the Parental Controls HTTP proxy and once by WebCore. Revert to the
        pre-upstreaming behavior and only enable the content filter for HTTPS responses.

        No new tests. Content filtering is not testable from WebKit.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Passed the response to ContentFilter::canHandleResponse().
        * platform/ContentFilter.h:
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::canHandleResponse): Renamed from isEnabled(). Checks the response's scheme on Mac to
        determine whether WebFilterEvaluator should be used.
        (WebCore::ContentFilter::isEnabled): Deleted.

2014-08-07  Beth Dakin  <bdakin@apple.com>

        Fixed backgrounds don't paint in blurred inset areas
        https://bugs.webkit.org/show_bug.cgi?id=135712

        Reviewed by Simon Fraser.

        Background geometry calculations for fixed background need to use the larger 
        visible rect. 

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

2014-08-07  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] Error codes returned by AVSampleBufferDisplayLayer are negative; clip when passed to JavaScript as doubles.
        https://bugs.webkit.org/show_bug.cgi?id=135710

        Reviewed by Brent Fulgham.

        Return the absolute value of the error codes returned by AVSampleBufferDisplayLayer, so that the conversion from
        unsigned -> double does not clip due to the (converted) value being greater than 2^53.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::layerDidReceiveError):
        (WebCore::CDMSessionMediaSourceAVFObjC::rendererDidReceiveError):

2014-08-07  Daniel Bates  <dabates@apple.com>

        Sometimes Gmail cannot load messages, particularly on refresh ("...the application ran into an unexpected error...")
        https://bugs.webkit.org/show_bug.cgi?id=135688
        <rdar://problem/17886686>

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where gmail.com may fail to load the list of messages. In particular, a SQLTransactionCallback
        function may not be executed and hence Gmail will not display the list of messages and
        will subsequently display an error message.

        When a WebKit client defers loading of a page (e.g. -[WebView setDefersCallbacks:YES]), WebCore
        may still load the main resource, say if substitute data is available for it, and defer executing
        tasks, such as a SQLTransactionCallback function, by appending such tasks to the end of the list
        of pending tasks for the associated Document. This list of pending tasks is never processed when
        a client subsequently allows loading (e.g. -[WebView setDefersCallbacks:NO])). Therefore, we never
        execute a SQLTransactionCallback function that was deferred.

        Ideally WebCore would defer loading of substitute data when a WebKit client requests that loading
        be deferred and hence a SQLTransactionCallback function would be deferred as a consequence of the
        lack of JavaScript script execution (since substitute data wasn't loaded and hence any JavaScript
        script contained in the substitute data that initiates a SQL transaction isn't executed). For now,
        it's sufficient to only defer executing tasks when either there are existing pending tasks or the
        page defers loading and active DOM objects in the document are suspended (e.g. Document::suspendActiveDOMObjects() was called).

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

2014-08-07  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of INPUT_SPEECH
        https://bugs.webkit.org/show_bug.cgi?id=135672

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * Modules/speech/SpeechSynthesis.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setSpeechInputEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::speechInputEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitSpeechEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitGrammarEnabled): Deleted.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/html.css:
        (input::-webkit-input-speech-button): Deleted.
        * dom/Element.h:
        (WebCore::Element::isInputFieldSpeechButtonElement): Deleted.
        * dom/EventNames.in:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::speechButtonElement): Deleted.
        (WebCore::HTMLInputElement::isSpeechEnabled): Deleted.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/InputType.cpp:
        (WebCore::InputType::shouldRespectListAttribute):
        (WebCore::InputType::shouldRespectSpeechAttribute): Deleted.
        * html/InputType.h:
        (WebCore::InputType::speechButtonElement): Deleted.
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::shouldRespectSpeechAttribute): Deleted.
        * html/NumberInputType.h:
        * html/PasswordInputType.cpp:
        (WebCore::PasswordInputType::shouldRespectSpeechAttribute): Deleted.
        * html/PasswordInputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::shouldRespectSpeechAttribute): Deleted.
        * html/SearchInputType.h:
        * html/TelephoneInputType.cpp:
        (WebCore::TelephoneInputType::shouldRespectSpeechAttribute): Deleted.
        * html/TelephoneInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::needsContainer):
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::destroyShadowSubtree):
        (WebCore::TextFieldInputType::speechButtonElement): Deleted.
        * html/TextFieldInputType.h:
        * html/TextInputType.cpp:
        (WebCore::TextInputType::shouldRespectSpeechAttribute): Deleted.
        * html/TextInputType.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement): Deleted.
        (WebCore::InputFieldSpeechButtonElement::~InputFieldSpeechButtonElement): Deleted.
        (WebCore::InputFieldSpeechButtonElement::create): Deleted.
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler): Deleted.
        (WebCore::InputFieldSpeechButtonElement::willRespondToMouseClickEvents): Deleted.
        (WebCore::InputFieldSpeechButtonElement::setState): Deleted.
        (WebCore::InputFieldSpeechButtonElement::speechInput): Deleted.
        (WebCore::InputFieldSpeechButtonElement::didCompleteRecording): Deleted.
        (WebCore::InputFieldSpeechButtonElement::didCompleteRecognition): Deleted.
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult): Deleted.
        (WebCore::InputFieldSpeechButtonElement::willAttachRenderers): Deleted.
        (WebCore::InputFieldSpeechButtonElement::willDetachRenderers): Deleted.
        (WebCore::InputFieldSpeechButtonElement::startSpeechInput): Deleted.
        (WebCore::InputFieldSpeechButtonElement::stopSpeechInput): Deleted.
        * html/shadow/TextControlInnerElements.h:
        (WebCore::toInputFieldSpeechButtonElement): Deleted.
        * page/SpeechInput.cpp: Removed.
        * page/SpeechInput.h: Removed.
        * page/SpeechInputClient.h: Removed.
        * page/SpeechInputEvent.cpp: Removed.
        * page/SpeechInputEvent.h: Removed.
        * page/SpeechInputEvent.idl: Removed.
        * page/SpeechInputListener.h: Removed.
        * page/SpeechInputResult.cpp: Removed.
        * page/SpeechInputResult.h: Removed.
        * page/SpeechInputResult.idl: Removed.
        * page/SpeechInputResultList.cpp: Removed.
        * page/SpeechInputResultList.h: Removed.
        * page/SpeechInputResultList.idl: Removed.
        * platform/ThemeTypes.h:
        * rendering/RenderInputSpeech.cpp: Removed.
        * rendering/RenderInputSpeech.h: Removed.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::adjustInputFieldSpeechButtonStyle): Deleted.
        (WebCore::RenderTheme::paintInputFieldSpeechButton): Deleted.
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):

2014-08-07  Eric Carlson  <eric.carlson@apple.com>

        Create UTF-8 string from in-band VTT cues
        https://bugs.webkit.org/show_bug.cgi?id=135716

        Reviewed by Brent Fulgham.

        Tests will be added in https://bugs.webkit.org/show_bug.cgi?id=135717.

        * platform/graphics/ISOVTTCue.cpp:
        (WebCore::ISOBox::peekString): Call String::fromUTF8 because we know that VTT is always
            UTF-8.

2014-08-06  Jeremy Jones  <jeremyj@apple.com>

        Disable implicit animations on video layer.
        https://bugs.webkit.org/show_bug.cgi?id=135679

        Reviewed by Eric Carlson.

        Disable implicit animations on AVPlayerLayer except when setting fullscreen frame.
        This prevents unwanted animations.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): disable implicit animations
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenFrame): allow implicit animations while changing fullscreen frame.

2014-08-07  Gordon Sheridan  <gordon_sheridan@apple.com>

        Provide methods to clear undesired references to HistoryItems that have been removed from the back/forard list.
        https://bugs.webkit.org/show_bug.cgi?id=135634
        <rdar://problem/17388461>

        Reviewed by Brady Eidson.

        No new tests.  Would require an API test that also needs an httpd, which we don't currently support.

        * WebCore.exp.in:
        Added export for Page::clearPreviousItemFromAllPages.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::clearPreviousItem):
        Clear m_previousItem and iterate over children recursively calling clearPreviousItem().
        The m_previousItem is cleared for the target HistoryController, and all of its descendents.

        * loader/HistoryController.h:
        Declared HistoryController::clearPreviousItem.

        * page/Page.cpp:
        (WebCore::Page::clearPreviousItemFromAllPages):
        Iterate over each page in the web process, checking if the previous item of
        the HistoryController for the main frame is the same as the item being removed. If so, the
        frameTree is traversed and each associated HistoryController has its m_previousItem cleared.

        * page/Page.h:
        Declared Page::clearPreviousItemFromAllPages.

2014-08-07  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix attempt #2 following r172224.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):

2014-08-07  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix following r172224.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        * html/track/VTTCue.h:

2014-08-07  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r172219.

        Caused some /fast/workers tests to fail; will investigate
        offline.

        Reverted changeset:

        "Sometimes Gmail cannot load messages, particularly on refresh
        ("...the application ran into an unexpected error...")"
        https://bugs.webkit.org/show_bug.cgi?id=135688
        http://trac.webkit.org/changeset/172219

2014-08-06  Roger Fong  <roger_fong@apple.com>

        Increase width of caption container if a larger font size is selected from user prefs.
        https://bugs.webkit.org/show_bug.cgi?id=135677.

        Reviewed by Brent Fulgham.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        Upon creation of a VTTCueBox make sure to supply the font size set by the user prefs.
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        Increase the width of the cue box based on user prefs font size selection.

        * html/track/VTTCue.h:
        Keep track of the font size set in the user prefs for use when the cue boxes are created.
        (WebCore::VTTCueBox::setFontSizeFromCaptionUserPrefs):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        Increase the width of the cue box based on user prefs font size selection.
        (WebCore::VTTCue::getDisplayTree):
        (WebCore::VTTCue::setFontSize):
        If the font size set is important then we don't want to use the font size set by user prefs, set it to 0.

2014-08-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r172220.

        * css/SelectorChecker.cpp:
        (WebCore::hasScrollbarPseudoElement):
        Use ASSERT_UNUSED instead of just ASSERT.

2014-08-07  Alex Christensen  <achristensen@webkit.org>

        Compile scrollbar pseudoclass css selectors.
        https://bugs.webkit.org/show_bug.cgi?id=135242

        Reviewed by Benjamin Poulain.

        Tests: scrollbars/corner-resizer-window-inactive.html
               scrollbars/scrollbar-selectors.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        Changed assertion because there are pseudo-elements selectors that return CannotCompileAnything now, which
        make SimpleSelectorCheckers.
        Add scrollbar, scrollbarPart, and document to the CheckingContext and compile scrollbar pseudo-element selectors.
        * css/SelectorChecker.cpp:
        (WebCore::hasScrollbarPseudoElement):
        Added.  Logic moved from matchRecursively to be easier to read and to add assertions.
        context.scrollbar is always non-null when dynamicPseudo is SCROLLBAR_CORNER.
        (WebCore::SelectorChecker::matchRecursively):
        Moved logic to hasScrollbarPseudoElement.
        (WebCore::SelectorChecker::checkOne):
        checkScrollbarPseudoClass accesses the document through the element now.
        (WebCore::SelectorChecker::checkScrollbarPseudoClass):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::scrollbarMatchesEnabledPseudoClass):
        (WebCore::scrollbarMatchesDisabledPseudoClass):
        (WebCore::scrollbarMatchesHoverPseudoClass):
        (WebCore::scrollbarMatchesActivePseudoClass):
        (WebCore::scrollbarMatchesHorizontalPseudoClass):
        (WebCore::scrollbarMatchesVerticalPseudoClass):
        (WebCore::scrollbarMatchesDecrementPseudoClass):
        (WebCore::scrollbarMatchesIncrementPseudoClass):
        (WebCore::scrollbarMatchesStartPseudoClass):
        (WebCore::scrollbarMatchesEndPseudoClass):
        (WebCore::scrollbarMatchesDoubleButtonPseudoClass):
        (WebCore::scrollbarMatchesSingleButtonPseudoClass):
        (WebCore::scrollbarMatchesNoButtonPseudoClass):
        (WebCore::scrollbarMatchesCornerPresentPseudoClass):
        Move scrollbar selector logic from SelectorChecker.cpp to SelectorCheckerTestFunctions.h
        For window-inactive pseudo classes, we now access the document through the element instead of as a separate parameter.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext):
        (WebCore::SelectorCompiler::addScrollbarPseudoClassType):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::isScrollbarPseudoElement):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        Call functions for unoptimized pseudo classes that require a context.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateContextFunctionCallTest):
        Added.  Similar to generateElementFunctionCallTest, but the CheckingContext pointer is stored on the stack instead of a dedicated register.
        * cssjit/SelectorCompiler.h:
        Added scrollbar, scrollbarPart, and document to the CheckingContext.
        (WebCore::SelectorCompiler::CheckingContext::document):
        Added method to access the document in a way that is syntactically equal to SelectorCheckingContext.
        This way, the template functions in SelectorCheckerTestFunctions.h can be compiled with both context types,
        but the context types store the document differently.

2014-08-07  Daniel Bates  <dabates@apple.com>

        Sometimes Gmail cannot load messages, particularly on refresh ("...the application ran into an unexpected error...")
        https://bugs.webkit.org/show_bug.cgi?id=135688
        <rdar://problem/17886686>

        Reviewed by Maciej Stachowiak.

        Fixes an issue where gmail.com may fail to load the list of messages. In particular, a SQLTransactionCallback
        function may not be executed and hence Gmail will not display the list of messages and
        will subsequently display an error message.

        When a WebKit client defers loading of a page (e.g. -[WebView setDefersCallbacks:YES]), WebCore
        may still load the main resource, say if substitute data is available for it, and defer executing
        tasks, such as a SQLTransactionCallback function, by appending such tasks to the end of the list
        of pending tasks for the associated Document. This list of pending tasks is never processed when
        a client subsequently allows loading (e.g. -[WebView setDefersCallbacks:NO])). Therefore, we never
        execute a SQLTransactionCallback function that was deferred.

        Ideally WebCore would defer loading of substitute data when a WebKit client requests that loading
        be deferred and hence a SQLTransactionCallback function would be deferred as a consequence of the
        lack of JavaScript script execution (since substitute data wasn't loaded and hence any JavaScript
        script contained in the substitute data that initiates a SQL transaction isn't executed). For now,
        it's sufficient to only defer executing tasks when either there are existing pending tasks or the
        active DOM objects for the document are suspended (e.g. Document::suspendActiveDOMObjects() was called).

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

2014-08-07  Zalan Bujtas  <zalan@apple.com>

        border-radius on html does not render properly.
        https://bugs.webkit.org/show_bug.cgi?id=135706

        Reviewed by Simon Fraser.

        Ensure that background is initialized when border-radius is present.

        Test: fast/borders/border-radius-on-html.html

        * rendering/RenderView.cpp:
        (WebCore::rendererObscuresBackground):

2014-08-07  Pratik Solanki  <psolanki@apple.com>

        Random resource replacement on beta.icloud.com
        https://bugs.webkit.org/show_bug.cgi?id=135685
        <rdar://problem/17937975>

        Reviewed by Alexey Proskuryakov.

        Revert the performance optimization in r170499. It turns out we could get a delayed disk
        cache notification for a resource that has since been changed in WebCore. In such a case, we
        were replacing the newer resource data with the older disk cached resource data. This was
        happening for cached POST content on beta.icloud.com. Fix this by forcing a memcmp of data
        contents before replacing it which is what we used to do before.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData):

2014-08-06  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] Captions are appearing multiple times during repeated video play through
        https://bugs.webkit.org/show_bug.cgi?id=135680
        <rdar://problem/17926802>

        Reviewed by Eric Carlson.

        Test: media/track/track-in-band-cues-added-once.html

        Revert TextTrackCueGeneric::isOrderedBefore logic to its original form, and add
        a new 'isOrderedBeforeDuringDisplay' for the special case of displaying captions.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::compareCueIntervalForDisplay): Added helper function.
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Use the new
        'isOrderedBeforeDuringDisplay' to order the cues for display.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::isOrderedBeforeDuringDisplay): Added. This just
        calls the existing 'isOrderedBefore' method.
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::isOrderedBefore): Revert to logic used
        prior to r171700.
        (WebCore::TextTrackCueGeneric::isOrderedBeforeDuringDisplay): New method that
        implements the behavior in r171700.
        * html/track/TextTrackCueGeneric.h:

2014-08-07  Jer Noble  <jer.noble@apple.com>

        [Mac] Taking a paused video full screen flashes black at beginning of animation.
        https://bugs.webkit.org/show_bug.cgi?id=135668

        Reviewed by Eric Carlson.

        When entering fullscreen, the full screen window will momentarily occlude the browser
        window, causing a visiblity change notification. To avoid flickering when client buffering
        is disabled, throttle calls to updateClientDataBuffering by delaying those calls for a
        short period.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::clientWillPausePlayback):
        (WebCore::MediaSession::visibilityChanged):
        (WebCore::MediaSession::clientDataBufferingTimerFired):
        (WebCore::MediaSession::updateClientDataBuffering):
        * platform/audio/MediaSession.h:

2014-08-07  Zan Dobersek  <zdobersek@igalia.com>

        ASSERT in Document::unregisterCollection reloading apple.com
        https://bugs.webkit.org/show_bug.cgi?id=135168

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::unregisterCollection): This assertion was failing
        because the passed-in HTMLCollection was not invalidated for a non-related
        attribute, but was instead unregistered during destruction, at which point
        the m_collectionsInvalidatedAtDocument HashSet was empty.
        The assertion could be trivially reduced into checking that the HashSet is
        empty when it was moved out of in Document::invalidateNodeListAndCollectionCaches(),
        but that just checks that the move semantics on HashSet work properly. Removing
        a non-existent element from a HashSet is harmless, so the assertion can be removed
        completely.

2014-08-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct build errors when WebGL Disabled
        https://bugs.webkit.org/show_bug.cgi?id=135687

        Unreviewed build fix.

        * WebCore.vcxproj/WebCore.vcxproj: Don't build Cairo files
        when building CG.
        * platform/graphics/GLContext.cpp: Correct use of 3D_GRAPHICS macro.
        * platform/graphics/GraphicsContext3DPrivate.cpp: Ditto.
        * platform/graphics/opengl/GLPlatformContext.cpp: Ditto.
        * platform/graphics/opengl/GLPlatformSurface.cpp: Ditto.

2014-08-06  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on non Cocoa port since r172172

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::defaultTextEncodingNameForSystemLanguage):
        * platform/text/TextEncodingRegistry.h:

2014-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Make document marker assets not specific to particular scale factors
        https://bugs.webkit.org/show_bug.cgi?id=135671

        Reviewed by Simon Fraser.

        No new tests.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/wak/WKGraphics.mm:
        (imageResourcePath):
        (WKGraphicsCreateImageFromBundleWithName):

2014-08-06  Enrica Casucci  <enrica@apple.com>

        Services menu doesn't show up after you defocus/refocus the Safari window.
        https://bugs.webkit.org/show_bug.cgi?id=135678
        <rdar://problem/17929247>

        Reviewed by Tim Horton.

        In setSelection we create a SelectionRectGatherer::Notifier object that will notify
        SelectionOverlayController about changes to the selection rects.
        Upon creation, the list of selections rects is cleared, since it is populated by
        the code that collects the selection rects. That code is never called
        when setSelection won't change the selection, which the case when the window is
        activated. The fix consists in postponing the SelectionRectGatherer::Notifier object
        creation until we know for sure that the selection is indeed going to change.
        
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):

2014-08-06  Dean Jackson  <dino@apple.com>

        ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED is not used anywhere. Remove it.
        https://bugs.webkit.org/show_bug.cgi?id=135675

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2014-08-06  Brady Eidson  <beidson@apple.com>

        IDB transactions never reset if the Web Process ends before cleaning up
        https://bugs.webkit.org/show_bug.cgi?id=135218

        Reviewed by David Kilzer.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/IDBServerConnection.h: Add sync versions of reset/rollback.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::abort): Call the sync versions.

2014-08-06  Wenson Hsieh <wenson_hsieh@apple.com>

        Implement parsing for CSS scroll snap points
        https://bugs.webkit.org/show_bug.cgi?id=134301

        Provided support for parsing -webkit-scroll-snap-* properties, i.e.  type, points-x, points-y, destination, and coordinates.
        The exact syntax of the scroll snap CSS properties follow the W3C spec at http://dev.w3.org/csswg/css-snappoints/

        Reviewed by Dean Jackson.

        Tests: css3/scroll-snap/scroll-snap-property-parsing.html,
            css3/scroll-snap/scroll-snap-property-computed-style.html

        * CMakeLists.txt: Added StyleScrollSnapPoints.h, StyleScrollSnapPoints.cpp
        * Configurations/FeatureDefines.xcconfig: Added ENABLE_CSS_SCROLL_SNAP
        * WebCore.vcxproj/WebCore.vcxproj: Added StyleScrollSnapPoints.h, StyleScrollSnapPoints.cpp
        * WebCore.vcxproj/WebCore.vcxproj.filters: Added StyleScrollSnapPoints.h, StyleScrollSnapPoints.cpp
        * WebCore.xcodeproj/project.pbxproj: Added StyleScrollSnapPoints.h, StyleScrollSnapPoints.cpp, LengthRepeat.h
        * css/CSSCalculationValue.cpp: Support for LengthRepeat
        (WebCore::hasDoubleValue):
        * css/CSSComputedStyleDeclaration.cpp: Support for showing computed style for snap point properties.
        (WebCore::scrollSnapDestination):
        (WebCore::scrollSnapPoints):
        (WebCore::scrollSnapCoordinates):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp: Support for parsing snap point properties.
        (WebCore::isValidKeywordPropertyAndValue): handle snap point type
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue): Added support for parsing snap points.
        (WebCore::CSSParser::parseNonElementSnapPoints): Helper for parsing snap points-x/y.
        (WebCore::CSSParser::parseScrollSnapDestination): Helper for parsing snap point destinations.
        (WebCore::CSSParser::parseScrollSnapCoordinate): Helper for parsing snap point coordinates.
        * css/CSSParser.h: Support for parsing snap point properties.
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::init):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getLengthRepeatValue):
        (WebCore::CSSPrimitiveValue::formatNumberForcustomCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isLengthRepeat):
        (WebCore::CSSPrimitiveValue::getLengthRepeatValue):
        * css/CSSPrimitiveValueMappings.h: Added converters for snap point type properties.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ScrollSnapType):
        * css/CSSPropertyNames.in: Added relevant snap point property names.
        * css/CSSValueKeywords.in: Added "proximity", "mandatory" and "elements".
        * css/LengthRepeat.h: Added to represent values of repeat(<length>)
        (WebCore::LengthRepeat::create):
        (WebCore::LengthRepeat::cloneForCSSOM):
        (WebCore::LengthRepeat::interval):
        (WebCore::LengthRepeat::setInterval):
        (WebCore::LengthRepeat::equals):
        (WebCore::LengthRepeat::cssText):
        (WebCore::LengthRepeat::LengthRepeat):
        * css/StyleResolver.cpp: Support for handling snap point properties
        (WebCore::StyleResolver::applyProperty):Updated switch case to build snap-point-related style data
        * rendering/style/RenderStyle.h: Added methods to access and modify snap point data
        * rendering/style/RenderStyleConstants.h: Added scroll snap type flags.
        * rendering/style/StyleAllInOne.cpp: Added StyleScrollSnapPoints.cpp
        * rendering/style/StyleRareNonInheritedData.cpp: Added initiazing for m_scrollSnapPoints, updated equality check
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h: Added field for StyleScrollSnapPoints
        * rendering/style/StyleScrollSnapPoints.cpp: Added. Wrapper for basic snap point data structures.
        (WebCore::StyleScrollSnapPoints::StyleScrollSnapPoints):
        (WebCore::StyleScrollSnapPoints::copy):
        (WebCore::StyleScrollSnapPoints::operator==):
        * rendering/style/StyleScrollSnapPoints.h: Added.
        (WebCore::StyleScrollSnapPoints::create):
        (WebCore::StyleScrollSnapPoints::defaultRepeatOffset): Creates a new Length representing the default repeat value of repeat(100%)
        (WebCore::StyleScrollSnapPoints::defaultDestinationOffset): Creates a new Length representing a default destination value (0px)
        (WebCore::StyleScrollSnapPoints::operator!=):

2014-08-06  Andy Estes  <aestes@apple.com>

        [iOS] Subresources referenced in converted QuickLook documents sometimes fail to load
        https://bugs.webkit.org/show_bug.cgi?id=135676

        Reviewed by David Kilzer.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setQuickLookHandle):
        (WebCore::DocumentLoader::quickLookHandle):

2014-08-06  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r168119): Album flipping animation doesn’t work
        https://bugs.webkit.org/show_bug.cgi?id=132801
        <rdar://problem/16878497>, <rdar://problem/17908085>

        Reviewed by Dean Jackson.
        
        In r168119 I avoided creating backing store for backface-visibility:hidden unless
        some ancestor was 3d-transformed. However, when starting transitions or animations
        that apply transforms, we don't do a layout, and therefore don't update the RenderLayer
        flags that mark an ancestor as having a transform. This broke various content which
        used backface-visibility:hidden for "flip" animations.
        
        Make a low-risk fix that looks for the pattern of CSS properties used for flipping,
        making a compositing layer for backface-visibility:hidden if the stacking context element
        has transform-style: preserve-3d.

        Test: compositing/backing/backface-visibility-flip.html

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

2014-08-06  Brent Fulgham  <bfulgham@apple.com>

        Consolidate logic for calculating scrollbar page step size
        https://bugs.webkit.org/show_bug.cgi?id=135670

        Reviewed by Simon Fraser.

        Consolidate the calculation of the scroll step size into a single place.
        Improve the handling of sub-pixel layout behavior by performing proper
        rounding on the fractional scroll ranges.

        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance): Switch to Scrollbar::pageStep method.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent): Ditto.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Ditto.
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::pageStep): Added.
        (WebCore::Scrollbar::pageStepDelta): Added.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout): Switch to Scrollbar method.

2014-08-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: dispatch timing information should be stored out-of-line in a replay segment
        https://bugs.webkit.org/show_bug.cgi?id=135295

        Reviewed by Timothy Hatcher.

        We need to save a timestamp for each event loop input so that replay can
        simulate the original user and network delays. Currently that timestamp
        is stored on each EventLoopInput instance.

        This patch stores timestamp data in a separate vector attached to the segment.
        The event loop input class is now immutable, and new auxiliary data can be added
        without adding members to the EventLoopInput class.

        As part of the refactoring, InputCursors now keep a reference to the relevant
        session segment instead of a reference to their input storage. InputCursors can
        be created directly, instead of through ReplaySessionSegment.

        No new tests. No behavior was changed.

        * inspector/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForInput): Don't send the timestamp with the input.
        (WebCore::buildInspectorObjectForSegment):
        * inspector/protocol/Replay.json: Remove optional timestamp field for ReplayInput.
        * replay/CapturingInputCursor.cpp:
        (WebCore::CapturingInputCursor::CapturingInputCursor):
        (WebCore::CapturingInputCursor::create):
        (WebCore::CapturingInputCursor::storeInput): Save event loop input timings here.
        * replay/CapturingInputCursor.h:
        * replay/EventLoopInput.h:
        (WebCore::EventLoopInputBase::EventLoopInputBase): Deleted.
        (WebCore::EventLoopInputBase::timestamp): Deleted.
        (WebCore::EventLoopInputBase::setTimestamp): Deleted.
        * replay/EventLoopInputDispatcher.cpp: Use a struct for dispatch information.
        (WebCore::EventLoopInputDispatcher::EventLoopInputDispatcher):
        (WebCore::EventLoopInputDispatcher::dispatchInputSoon):
        (WebCore::EventLoopInputDispatcher::dispatchInput):
        * replay/EventLoopInputDispatcher.h:
        * replay/FunctorInputCursor.h:
        (WebCore::FunctorInputCursor::forEachInputInQueue):
        (WebCore::FunctorInputCursor::FunctorInputCursor):
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::createSegment):
        (WebCore::ReplayController::loadSegmentAtIndex):
        (WebCore::ReplayController::unloadSegment): Deleted.
        (WebCore::ReplayController::startPlayback): Deleted.
        * replay/ReplaySessionSegment.cpp:
        (WebCore::ReplaySessionSegment::createCapturingCursor): Deleted.
        (WebCore::ReplaySessionSegment::createReplayingCursor): Deleted.
        (WebCore::ReplaySessionSegment::createFunctorCursor): Deleted.
        * replay/ReplaySessionSegment.h:
        (WebCore::ReplaySessionSegment::storage):
        (WebCore::ReplaySessionSegment::eventLoopTimings):
        * replay/ReplayingInputCursor.cpp:
        (WebCore::ReplayingInputCursor::ReplayingInputCursor):
        (WebCore::ReplayingInputCursor::create):
        (WebCore::ReplayingInputCursor::uncheckedLoadInput):
        (WebCore::ReplayingInputCursor::loadEventLoopInput): Added. This method collates
        and returns the next event loop input with its associated dispatch information.
        * replay/ReplayingInputCursor.h:

2014-08-06  Tim Horton  <timothy_horton@apple.com>

        Document-relative overlays disappear after doing page-cache navigations
        https://bugs.webkit.org/show_bug.cgi?id=135669
        <rdar://problem/17929171>

        Reviewed by Simon Fraser.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        When navigating from one page to another, the document-relative overlay
        layer is moved from the layer tree of the RenderLayerCompositor of the
        first RenderView to the layer tree of the RenderLayerCompositor of the
        new RenderView, upon layer tree construction.
        When going "back" via a page cache navigation, we don't rebuild the
        layer tree, and just assume that it is in a valid state.
        However, the document-relative overlay layer was *moved*, and as such,
        needs to be moved back. To do this, reattach the document-relative
        overlay layer whenever the root layer attachment of a RenderLayerCompositor
        changes, which will happen in the right order when going back to a cached page.

2014-08-06  Filip Pizlo  <fpizlo@apple.com>

        Merge r171389, r171495, r171508, r171510, r171605, r171606, r171611, r171614, r171763 from ftlopt.

    2014-08-06  Mark Hahnenberg  <mhahnenberg@apple.com>
    
            Refactor our current implementation of for-in
            https://bugs.webkit.org/show_bug.cgi?id=134142
    
            Reviewed by Filip Pizlo.
    
            No new tests.
    
            This patch splits for-in loops into three distinct parts:
    
            - Iterating over the indexed properties in the base object.
            - Iterating over the Structure properties in the base object.
            - Iterating over any other enumerable properties for that object and any objects in the prototype chain.
     
            It does this by emitting these explicit loops in bytecode, using a new set of bytecodes to 
            support the various operations required for each loop.
    
            * bindings/js/JSDOMWindowCustom.cpp:
            (WebCore::JSDOMWindow::getEnumerableLength):
            (WebCore::JSDOMWindow::getStructurePropertyNames):
            (WebCore::JSDOMWindow::getGenericPropertyNames):
            * bindings/scripts/CodeGeneratorJS.pm:
            (GenerateHeader):
            * bridge/runtime_array.cpp:
            (JSC::RuntimeArray::getOwnPropertyNames):
    
2014-08-06  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (WebKit2): iOS Safari default encoding doesn't follow system language
        https://bugs.webkit.org/show_bug.cgi?id=135667
        <rdar://problem/17862892>

        Reviewed by Anders Carlsson.

        Moved a function that computes default encoding from WebKit to WebCore, so that
        it could be shared with WebKit2.

        * WebCore.exp.in:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::defaultTextEncodingNameForSystemLanguage):
        * platform/text/TextEncodingRegistry.h:

2014-08-06  Andreas Kling  <akling@apple.com>

        Remove unused RenderBox::reflectionBox().
        <https://webkit.org/b/135661>

        Reviewed by Antti Koivisto.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reflectionBox): Deleted.
        * rendering/RenderBox.h:

2014-08-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: convert ReplayManager to a promise-based API
        https://bugs.webkit.org/show_bug.cgi?id=135249

        Reviewed by Timothy Hatcher.

        Fix some assertions to match ReplayController's preconditions.

        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::replayToPosition):
        (WebCore::InspectorReplayAgent::replayToCompletion):

2014-08-05  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unable to scroll to bottom of nested scrollable areas
        https://bugs.webkit.org/show_bug.cgi?id=135637
        <rdar://problem/17910241>

        Reviewed by Zalan Bujtas.

        Test: platform/mac/fast/scrolling/scroll-latched-nested-div.html

        Avoid truncating the fractional portion of scroll ranges.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout): Round
        the LayoutUnit values for scroll width and height rather than
        truncating.

2014-08-06  Andy Estes  <aestes@apple.com>

        [iOS] QuickLook returns an invalid MIME type for some documents
        https://bugs.webkit.org/show_bug.cgi?id=135651

        Reviewed by David Kilzer.

        r172151 ensured that we ignore QuickLook delegate messages after an error, but neglected to do so for
        connectionDidFinishLoading:. Do not call ResourceLoader::didFinishLoading() if an error has occurred.

        * platform/network/ios/QuickLook.mm:
        (-[WebResourceLoaderQuickLookDelegate connectionDidFinishLoading:]):

2014-08-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r172155.
        https://bugs.webkit.org/show_bug.cgi?id=135659

        ChangeLog and commit message are wrong (Requested by estes on
        #webkit).

        Reverted changeset:

        "Unreviewed, rolling out r172145."
        https://bugs.webkit.org/show_bug.cgi?id=135657
        http://trac.webkit.org/changeset/172155

2014-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix

        * rendering/TextPainter.cpp: Used incorrect variable name
 
2014-08-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r172145.
        https://bugs.webkit.org/show_bug.cgi?id=135657

        caused 1 API test to fail (Requested by zalan on #webkit).

        Reverted changeset:

        "Cleanup InlineTextBox::paintSelection and
        ::localSelectionRect."
        https://bugs.webkit.org/show_bug.cgi?id=135631
        http://trac.webkit.org/changeset/172145

2014-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Text-shadow with (0, 0) offset and radius = 0 is ugly
        https://bugs.webkit.org/show_bug.cgi?id=135357

        Reviewed by Darin Adler.

        Instead, check for this kind of shadow and don't draw it.

        Test: fast/text/empty-shadow.html

        * rendering/TextPainter.cpp:
        (WebCore::isEmptyShadow): Does a shadow match these criteria?
        (WebCore::paintTextWithShadows): If so, don't draw it.

2014-08-06  Andy Estes  <aestes@apple.com>

        [iOS] QuickLook returns an invalid MIME type for some documents
        https://bugs.webkit.org/show_bug.cgi?id=135651

        Reviewed by David Kilzer.

        In some cases QuickLook indicates a failure by returning a nil MIME type in -[QLPreviewConverter previewResponse]
        rather than calling connection:didFailWithError:. Calling ResourceLoader::didReceiveResponse() with a response
        containing a nil MIME type leads to a crash.

        Stop loading the resource and display an error page if QuickLook cannot provide a MIME type for the converted response.

        No new tests. QuickLook is not testable from WebKit.

        * platform/network/ios/QuickLook.mm:
        (-[WebResourceLoaderQuickLookDelegate _sendDidReceiveResponseIfNecessary]): Called ResourceLoader::didFail() if
        MIME type was nil. Called ResourceLoader::didReceiveResponse() otherwise.
        (-[WebResourceLoaderQuickLookDelegate connection:didReceiveDataArray:]): Called -_sendDidReceiveResponseIfNecessary.
        (-[WebResourceLoaderQuickLookDelegate connection:didReceiveData:lengthReceived:]): Ditto.
        (-[WebResourceLoaderQuickLookDelegate connection:didFailWithError:]): Ditto.

2014-08-06  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r163382): Overflow hidden for inner elements breaks blurring
        https://bugs.webkit.org/show_bug.cgi?id=135318

        Reviewed by Zalan Bujtas.

        For elements with border radius, clipping must be applied using clipRoundedRect.
        This regressed in r163382, when normal clipping started being applied also
        for elements having border radius.

        Test: fast/filter-image/clipped-filter.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::restoreClip):

2014-08-06  Zalan Bujtas  <zalan@apple.com>

        Cleanup InlineTextBox::paintSelection and ::localSelectionRect.
        https://bugs.webkit.org/show_bug.cgi?id=135631

        Reviewed by Darin Adler.

        Covered by existing tests.

        * rendering/InlineTextBox.cpp: Ideally these 2 functions should share some more code.
        (WebCore::InlineTextBox::localSelectionRect): Local coordinates should not be snapped/enclosed.
        This change could potentially break some selections. Should that be the case, they need to be addressed
        separately.
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection): Minor cleanup.
        * rendering/InlineTextBox.h:

2014-08-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Be able to disable gtk2 dependency
        https://bugs.webkit.org/show_bug.cgi?id=135505

        Reviewed by Gustavo Noronha Silva.

        Do not build WebCorePlatformGTK2 when ENABLE_PLUGIN_PROCESS_GTK2
        is OFF.

        * PlatformGTK.cmake:

2014-08-06  Mark Lam  <mark.lam@apple.com>

        Gardening: fix bindings test breakage for for r170564 merged in r172129.
        <https://webkit.org/b/134333>

        Not reviewed.

        No new tests.

        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::create):

2014-08-06  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed typo correction.

        * bindings/scripts/CodeGeneratorJS.pm: removed unnecessary space.
        (GenerateImplementation):

2014-08-05  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Add label string once AccessibilityObject::computedLabel() is available
        https://bugs.webkit.org/show_bug.cgi?id=129940

        Reviewed by Chris Fleizach.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode-expected.txt

        * accessibility/AccessibilityObject.cpp: Fixed crash.
        (WebCore::AccessibilityObject::accessibilityComputedLabel): 
        * accessibility/AccessibilityObject.h: Method name update.
        * inspector/InspectorDOMAgent.cpp: New support for getting Node label from AccessibilityObject.
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2014-07-29  Filip Pizlo  <fpizlo@apple.com>

        Merge r170564, r170571, r170604, r170628, r170672, r170680, r170724, r170728, r170729, r170819, r170821, r170836, r170855, r170860, r170890, r170907, r170929, r171052, r171106, r171152, r171153, r171214 from ftlopt.

    2014-07-01  Mark Lam  <mark.lam@apple.com>
    
            [ftlopt] DebuggerCallFrame::scope() should return a DebuggerScope.
            <https://webkit.org/b/134420>
    
            Reviewed by Geoffrey Garen.
    
            No new tests.
    
            * ForwardingHeaders/debugger/DebuggerCallFrame.h: Removed.
            - This is not in use.  Hence, we can remove it.
            * bindings/js/ScriptController.cpp:
            (WebCore::ScriptController::attachDebugger):
            - We should acquire the JSLock before modifying a JS global object.
    
    2014-06-25  Filip Pizlo  <fpizlo@apple.com>
    
            [ftlopt] If a CodeBlock is jettisoned due to a watchpoint then it should be possible to figure out something about that watchpoint
            https://bugs.webkit.org/show_bug.cgi?id=134333
    
            Reviewed by Geoffrey Garen.
    
            No new tests because no change in behavior.
    
            * bindings/scripts/CodeGeneratorJS.pm:
            (GenerateHeader):
    
2014-08-05  Ryuan Choi  <ryuan.choi@samsung.com>

        Build break since r172093
        https://bugs.webkit.org/show_bug.cgi?id=135636

        Reviewed by Gyuyoung Kim.

        Since r172093, AbstractView.idl is added in CMake Build but CodeGeneratorJS.pm does not take care of it.

        No new tests required, no new functionality.

        * bindings/scripts/CodeGeneratorJS.pm:
        (ShouldGenerateToJSDeclaration):
        (ShouldGenerateToJSImplementation):
        (GetImplClassName): Added to rename implClassName to DOMWindow if interface name is AbstractView.
        (GenerateHeader):
        (GenerateImplementation):

2014-08-05  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        [CG] strokeRect does not honor lineJoin
        https://bugs.webkit.org/show_bug.cgi?id=132948

        Reviewed by Darin Adler.

        Replaced use of CGContextStrokeRectWithWidth convenience function with explicit 
        call to CGContextAddRect and CGContextStrokePath.  The convenience functions
        CGContextStrokeRect and CGContextStrokeRectWithWidth fail to apply some attributes
        (e.g. stroke join) of the graphics state in certain cases.

        Test: fast/canvas/canvas-strokeRect-lineJoin.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::strokeRect):

2014-08-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build attempts to use ANGLE when not building WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=135630
        <rdar://problem/135630>

        Unreviewed build fix.

        * platform/graphics/win/GraphicsContext3DWin.cpp: Move #include of GraphicsContext3D.h
        inside USE(3D_GRAPHICS) guard.

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

        [iOS WK2] Crash going back on a specific tumblr blog (under ScrollingStateTree::removeNodeAndAllDescendants)
        https://bugs.webkit.org/show_bug.cgi?id=135629
        <rdar://problem/17802174>

        Reviewed by Tim Horton.
        
        In r170198 I added an "orphan scrolling nodes" code path that sets aside subtrees
        of scrolling nodes into an m_orphanedSubframeNodes map, which keeps them alive until
        they get reparented or destroyed. The nodes in that subtree remain in m_stateNodeMap,
        which holds raw pointers to them.
        
        However, ScrollingStateTree::commit() can clear m_orphanedSubframeNodes, which is
        sometimes non-empty at this point. When that happened, we would destroy nodes which
        were still referenced by m_stateNodeMap, with the result that a later query for the
        same nodeID would hand back a pointer to a deleted object.
        
        Fix by calling recursiveNodeWillBeRemoved() on nodes in the m_orphanedSubframeNodes
        before clearing it, which removes them and all their descendants from the state node map.

        Test: platform/mac-wk2/tiled-drawing/scrolling/frames/orphaned-subtree.html

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::clear):
        (WebCore::ScrollingStateTree::commit):

2014-08-05  Peyton Randolph  <prandolph@apple.com>

        Add the ability to force text to render in white, not just black
        https://bugs.webkit.org/show_bug.cgi?id=135625

        Reviewed by Beth Dakin.

        This patch introduces PaintBehaviorForceWhiteText, a complement to PaintBehaviorForceBlackText. If
        a client specifies both PaintBehaviorForceWhiteText and PaintBehaviorForceBlackText, the text will be
        painted black.

        No new tests.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint): Use the forced text color to paint the text if requested.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Disable the text shadow if a text color has been forced.
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::forceTextColor): 
        Return true iff the client has requested to force a black or white text color.
        (WebCore::PaintInfo::forceWhiteText):
        Return true iff forcing white text has been requested.
        (WebCore::PaintInfo::forcedTextColor): 
        Return the forced text color. Currently only white and black are supported.
        * rendering/PaintPhase.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents): Remove the forceBlackText-related code as it is redundant.
        (WebCore::RenderLayer::paintForegroundForFragments): 
        Remove forceBlackText parameter and infer the correct behavior from the given paint behavior.
        * rendering/RenderLayer.h:
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle): Use the forced text color if available.
        (WebCore::computeTextSelectionPaintStyle): Use the forced text color if available.

2014-08-05  Alex Christensen  <achristensen@webkit.org>

        More work on CMake.
        https://bugs.webkit.org/show_bug.cgi?id=135620

        Reviewed by Reviewed by Laszlo Gombos.

        * CMakeLists.txt:
        Added missing idls.
        * PlatformMac.cmake:
        Added additional include directories and source files.
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/makeSelectorPseudoElementsMap.py:
        The Windows distribution of gperf doesn't like single quotes for its key-positions parameters.
        * page/Chrome.h:
        Compile fix.

2014-08-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ReplayManager shouldn't assume replay status when the inspector is opened
        https://bugs.webkit.org/show_bug.cgi?id=135212

        Reviewed by Timothy Hatcher.

        The frontend should be able to introspect the session and segment state machines,
        currently loaded segment and session identifiers, and replay position.

        * inspector/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForSessionState): Added.
        (WebCore::buildInspectorObjectForSegmentState): Added.
        (WebCore::InspectorReplayAgent::currentReplayState): Added.
        * inspector/InspectorReplayAgent.h:
        * inspector/protocol/Replay.json: Add currentReplayState query command.
        * replay/ReplayController.h: Add some accessors.

2014-08-05  Dean Jackson  <dino@apple.com>

        [iOS] Media controls layout incorrectly in RTL content
        https://bugs.webkit.org/show_bug.cgi?id=135621
        <rdar://problem/17849206>

        Reviewed by Eric Carlson.

        Media controls should always layout in LTR mode, even when the
        page content is RTL. There already was a rule to do this on
        non-iOS systems, but it wasn't getting included for iOS.
        In this case I put the rule on the composited parent of the
        controls in order to maintain the padding of the control panel.
        This should still leave the captions unaffected.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-panel-composited-parent): Add direction: ltr.

2014-08-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: rename protocol methods for getting replay session/segment data
        https://bugs.webkit.org/show_bug.cgi?id=135618

        Reviewed by Timothy Hatcher.

        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::getSessionData):
        (WebCore::InspectorReplayAgent::getSegmentData):
        (WebCore::InspectorReplayAgent::getSerializedSession): Deleted.
        (WebCore::InspectorReplayAgent::getSerializedSegment): Deleted.
        * inspector/InspectorReplayAgent.h:
        * inspector/protocol/Replay.json:

2014-08-05  Antti Koivisto  <antti@apple.com>

        REGRESSION: Extremely flashy scrolling while a page is still loading (because of flush throttling)
        https://bugs.webkit.org/show_bug.cgi?id=135603
        <rdar://problem/17876385>
        
        This hit ASSERT(frame().isMainFrame()) in FrameView::updateLayerFlushThrottling
        running scrollbars/scrollbar-iframe-click-does-not-blur-content.html and a few other tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::setWasScrolledByUser): Only invoke updateLayerFlushThrottling for the main frame.

2014-08-05  Peyton Randolph  <prandolph@apple.com>

        Rename MAC_LONG_PRESS feature flag to LONG_MOUSE_PRESS.
        https://bugs.webkit.org/show_bug.cgi?id=135276

        Reviewed by Beth Dakin.

        No new tests. Just a compiler flag.

        * Configurations/FeatureDefines.xcconfig:

2014-08-05  Dean Jackson  <dino@apple.com>

        [Media iOS] Ensure there is a nice default fallback for missing wireless target names
        https://bugs.webkit.org/show_bug.cgi?id=135488
        <rdar://problem/17879156>

        Reviewed by Antoine Quint.

        Antoine found me on iMessage to tell me I'm an idiot and that I've
        forgotten how to write JavaScript. Embarrassingly, this code is what
        I originally had, but then second-guessed myself.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): No need for the local
        variable or conditional statement, since null and "" both evaluate as false.

2014-08-05  Antti Koivisto  <antti@apple.com>

        REGRESSION: Extremely flashy scrolling while a page is still loading (because of flush throttling)
        https://bugs.webkit.org/show_bug.cgi?id=135603
        <rdar://problem/17876385>

        Reviewed by Andreas Kling.

        * page/FrameView.cpp:
        (WebCore::determineLayerFlushThrottleState):
        
            Disable throttling after user has scrolled the page.
            This is consistent with the speculative tiling. It also gets enabled on first scroll.

        (WebCore::FrameView::setWasScrolledByUser):

2014-08-05  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        ASSERTION FAILED: name[0] == '@' && length >= 2 in WebCore::CSSParser::detectAtToken
        https://bugs.webkit.org/show_bug.cgi?id=134632

        At-rules must consist of at least two characters: the '@' symbol followed by
        an identifier name. The failure of this condition makes the assertion fail.

        The length of an at-rule is currently calculated by pointer arithmetic on
        the 'result' pointer, which is expected to be set to the end of the at-rule
        identifier by the WebCore::*CSSTokenizer::parseIdentifier method.
        If the at-rule token is a sequence of 8-bit-only characters then
        'result' will point correctly at the end of the identifier. However, if
        the at-rule contains a 16-bit Unicode escape then 'result' will not be
        updated correctly anymore, hence it cannot be used for length calculation.
        The patch makes the parseIdentifier bump the result pointer even in the 16-bit slow case.

        Patch by Renata Hodovan, backported from Chromium: https://codereview.chromium.org/241053002

        Reviewed by Darin Adler.

        Test: fast/css/atrule-with-escape-character-crash.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::realLex):

2014-08-04  Andy Estes  <aestes@apple.com>

        [iOS] The raw bytes of an iWork document's PDF preview are displayed rather than the PDF itself
        https://bugs.webkit.org/show_bug.cgi?id=135596

        Reviewed by David Kilzer.

        Some iWork documents contain pre-rendered PDF previews. When WebKit asks QuickLook to convert such a document,
        QuickLook will return this PDF as the converted response. However, until WebKit has sent the document's data to
        QuickLook, -[QLPreviewConverter previewResponse] will misleadingly tell WebKit that the converted resource will
        be of type 'text/html'. This leads WebKit to render the PDF preview as HTML.

        Instead of querying QLPreviewConverter for the previewResponse before we've sent it any data, postpone calling
        ResourceLoader::didReceiveResponse until we've begun to receive data via the QLPreviewConverter delegate. At
        that point -[QLPreviewConverter previewResponse] will have the correct MIME type and we can call didReceiveResponse.

        No new tests. QuickLook is not testable from WebKit.

        * platform/network/ios/QuickLook.mm:
        (-[WebResourceLoaderQuickLookDelegate connection:didReceiveDataArray:]): If didReceiveResponse has yet to be
        called, call it now with QuickLookHandle::nsResponse().
        (-[WebResourceLoaderQuickLookDelegate connection:didReceiveData:lengthReceived:]): Ditto.
        (-[WebResourceLoaderQuickLookDelegate connection:didFailWithError:]): Ditto.
        (-[WebResourceLoaderQuickLookDelegate connectionDidFinishLoading:]): Assert that didReceiveResponse has been called.
        (-[WebResourceLoaderQuickLookDelegate clearHandle]): Cleared the raw pointer to QuickLookHandle.
        (WebCore::QuickLookHandle::create): Pointed WebResourceLoaderQuickLookDelegate's quickLookHandle property to
        the newly created QuickLookHandle.

2014-08-05  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        Fixing calc() parameter parsing in cubic-bezier functions
        https://bugs.webkit.org/show_bug.cgi?id=135605

        Reviewed by Andreas Kling.

        Before this patch, calc values in cubic-bezier functions weren't being read correctly
        since they were handled as simple floats.

        This is a backport of my fix in Blink: https://codereview.chromium.org/369313002/

        Test: css3/calc/cubic-bezier-with-multiple-calcs-crash.html.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCubicBezierTimingFunctionValue):

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

        [MSE] Seeking occasionally causes many frames to be displayed in "fast forward" mode
        https://bugs.webkit.org/show_bug.cgi?id=135422

        Reviewed by Eric Carlson.

        Three related fixes:

        In reenqueueMediaForTime(), update TrackBuffer.lastEnqueuedPresentationTime when we flush
        samples, so that the next time samples are re-enqueued, the starting point for re-enqueueing
        is correct.

        In sourceBufferPrivateDidReceiveSample(), do not add samples to the decode queue
        if they are before the current media time.

        When a seek is pending, but samples for the new time is not yet present in the SourceBuffer,
        the SourceBufferPrivate may signal that it's ready for new samples through the
        sourceBufferPrivateDidBecomeReadyForMoreSamples() method. In this situation, we should not
        continue to provideMediaData(), as that will append samples from the prior-to-seeking media
        timeline. Since the timeline may have moved forward due to the seek, a decoder may decide to
        display those frames as quickly as possible (the "fast forward" behavior) in order to catch
        up to the new current time.

        If a re-enqueue is pending, don't provide media data in response to being notified that the
        SourceBufferPrivate is ready for more samples. Wait until samples for the new current time
        are appended.

        Also, don't provide media data if we are waiting for a seek to complete.

        * Modules/mediasource/MediaSource.h:
        (WebCore::MediaSource::isSeeking): Convenience method.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        (WebCore::SourceBuffer::reenqueueMediaForTime):

2014-08-05  Chris Fleizach  <cfleizach@apple.com>

        AX: Select text activity should return replaced text instead of previously selected text
        https://bugs.webkit.org/show_bug.cgi?id=135595

        Reviewed by Mario Sanchez Prada.

        When the select activity API is used to replace text, the replacement string should be returned instead of the old selected text.

        Updated existing test: platform/mac/accessibility/select-text.html

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

2014-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Select activity behavior does not work when an existing range is already selected
        https://bugs.webkit.org/show_bug.cgi?id=135579

        Reviewed by Mario Sanchez Prada.

        If you have an existing range selected, and try to apply a select and replace operation, like capitalize,
        searching for that range will fail because it skips the currently selected range.

        For these cases, it seems the best way is to start the search from the start position, rather than relying on the
        entire range.

        Updated existing test: platform/mac/accessibility/select-text.html

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

2014-08-04  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Seeking past buffered range will not resume playback when seek completes.
        https://bugs.webkit.org/show_bug.cgi?id=135591

        Reviewed by Eric Carlson.

        If a seek is delayed due to seeking into an unbuffered area, playback will not be restarted
        at that point. Instead, playback must resume when enough media data has been added, and
        the MediaSource indicates the seek should complete.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekCompleted):

2014-08-04  Jer Noble  <jer.noble@apple.com>

        [MSE] Videos will report a stall when within 1 frame-duration before the end of a movie.
        https://bugs.webkit.org/show_bug.cgi?id=135586

        Reviewed by Eric Carlson.

        Under certain circumstances, videos which are within 1/24 seconds before the end of a media stream when
        monitorSourceBuffers() is called will fail the hasFutureTime() check. This is because hasFutureTime()
        checks whether enough media is buffered to play back at least some time in the future, but when the
        current time is close to the duration, not enough data is buffered to satisfy that check.

        Add some logic which will break out early when the SourceBuffer has buffered up to and including the
        media's duration, and return that the buffer indeed hasFutureTime() available.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::hasFutureTime):

2014-08-04  Benjamin Poulain  <benjamin@webkit.org>

        Simplify the StyleInvalidation mode of rule collection
        https://bugs.webkit.org/show_bug.cgi?id=135521

        Reviewed by Antti Koivisto.

        There are two branches where StyleInvalidation code is removed:
        -Pseudo elements for shadow dom elements.
        -Pseudo elements without dom tree counterpart.

        The first can never be hit because StyleInvalidationAnalysis does a complete invalidation
        when there is any shadow dom styling involved in the stylesheets.

        Even if that branch was hit, not failing on custom pseudo elements would be equivalent
        to ignoring those pseudo elements from the Selector. By doing so, we would match elements
        that do not have shadow dom and invalidate pretty much everything.

        Unlike pseudo elements without real elements, shadow dom elements are not matched separately with a different
        context, thus we could generalize StyleInvalidationAnalysis to handle this case.


        The second case handle pseudo elements that do not have a real element. That case no longer need to be handled
        separately at the filter time, it has become a special case of SelectorChecker::match() after everything else
        has matched.

        The only condition for this to work is that the Context's pseudoId must be NOPSEUDO. This is the case
        in practice since matching specific pseudo types would be a waste of time. ElementRuleCollector::collectMatchingRules()
        has a new assertion to enforce that.

        Test: fast/css/stylesheet-change-updates-pseudo-elements.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRequestedPseudoElementEqualsToSelectorPseudoElement):

2014-08-04  Benjamin Poulain  <benjamin@webkit.org>

        Add a flag for the CSS Selectors level 4 implementation
        https://bugs.webkit.org/show_bug.cgi?id=135535

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2014-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: add AccessibilityObject::computedLabelString() for WebAXI
        https://bugs.webkit.org/show_bug.cgi?id=129939

        Reviewed by Mario Sanchez Prada.

        Provide a method that the WebKit Inspector can call in order to 
        display an accessible name for an AX node.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibilityComputedLabel):
        * accessibility/AccessibilityObject.h:

2014-08-04  Tim Horton  <timothy_horton@apple.com>

        Lots of crashes in WebKit1 after r172013.
        https://bugs.webkit.org/show_bug.cgi?id=135582
        <rdar://problem/17837636>

        Reviewed by Enrica Casucci.

        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::addRect):
        (WebCore::SelectionRectGatherer::addGapRects):
        Don't try to do local-to-absolute coordinate conversion if we don't have
        a repaint container, which happens a lot in WebKit1.

2014-08-04  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=135528

        Reviewed by Gyuyoung Kim.

        * PlatformMac.cmake: Added.

2014-08-04  Tim Horton  <timothy_horton@apple.com>

        Selection services menu dropdown is in the wrong place when selecting some text on Yelp
        https://bugs.webkit.org/show_bug.cgi?id=135582
        <rdar://problem/17837636>

        Reviewed by Simon Fraser.

        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::addRect):
        (WebCore::SelectionRectGatherer::addGapRects):
        (WebCore::SelectionRectGatherer::addRects): Deleted.
        Rename addRects to addGapRects for clarity.
        Map rects and gapRects to absolute RenderView coordinates so that
        they are in a form WebKit2 can use. Previously they were sometimes
        relative to a different repaint container, but that information was
        lost when moving through SelectionRectGatherer.

        Ideally we would keep selection rects as full quads instead of rects
        for more of their life, but that problem is much deeper than just SelectionRectGatherer.

        * editing/SelectionRectGatherer.h:
        Add a comment clarifying the coordinate space of the stored selection rects.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::applySubtreeSelection):
        Rename addRects to addGapRects for clarity.

2014-08-04  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] shape-margin not respected when it extends beyond an explicitly set margin
        https://bugs.webkit.org/show_bug.cgi?id=135308

        Reviewed by Dean Jackson.

        When a zero height line is supplied and the image shape extends into
        the margin box (only possible when a shape-margin is supplied), then
        only an empty interval was being returned. This patch makes it
        properly return the interval for the line in question.

        Test: fast/shapes/shape-outside-floats/shape-outside-image-shape-margin.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShape::getExcludedIntervals): Handle the zero height
        line case.

2014-08-04  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: InlineTextBox mistakenly rounds offset value before painting.
        https://bugs.webkit.org/show_bug.cgi?id=135470

        Reviewed by Simon Fraser.

        This patch removes the premature paint offset adjustment for inlines. Premature snapping
        could alter the final painting coordinates and push content to wrong positions.

        This patch also enforces WebCore's pixel snapping strategy (round) on text painting.
        It ensures that text positioning is in sync with other painting related operations including
        clipping, box decorations etc. Underlying graphics libraries can take different directions on
        text snapping, for example CG ceils text coordinates vertically (in horizontal context,
        with the current settings). It can lead to undesired side effects.

        Test: fast/inline/hidpi-inline-selection-leaves-gap.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects): wrong direction used at r171896.
        * rendering/SimpleLineLayoutFunctions.cpp: we don't paint vertical content here.
        (WebCore::SimpleLineLayout::paintFlow):

2014-08-04  Jer Noble  <jer.noble@apple.com>

        Unreviewed, rolling out r171992, r171995, & r172000.

        The cumulative effect of those revisions was to cause decoding errors when switching resolutions on YouTube.

        Reverted changesets:

        https://bugs.webkit.org/show_bug.cgi?id=135422 / http://trac.webkit.org/changeset/171992
        https://bugs.webkit.org/show_bug.cgi?id=135424 / http://trac.webkit.org/changeset/171995
        https://bugs.webkit.org/show_bug.cgi?id=135572 / http://trac.webkit.org/changeset/172000

2014-08-04  Joseph Pecoraro  <pecoraro@apple.com>

        Always clear ConsoleClient when Page/WindowShell is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=135569

        Reviewed by Mark Lam.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        Whenever a window shell goes away, clear the console client.
        We did this in clearWindowShell but not before destroying.

2014-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: isWordEndMatch should allow for multiple word selections
        https://bugs.webkit.org/show_bug.cgi?id=135573

        Reviewed by Mario Sanchez Prada.

        isWordEndMatch was searching from the beginning of the selected range, which meant
        that if the result was multiple words, we'd reject the result. 
        Instead, we should search from the end of the range, so that we encompass all words.

        Modified existing test: platform/mac/accessibility/select-text-should-match-whole-words.html

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::isWordEndMatch):

2014-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Secure text fields need to support Search parameterized attributes
        https://bugs.webkit.org/show_bug.cgi?id=135568

        Reviewed by Mario Sanchez Prada.
 
        Secure text fields still need to support the fast searching that WebKit exposes, even though they don't support
        other parameterized attributes.
  
        Test: platform/mac/accessibility/secure-text-field-supports-fast-search.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):

2014-08-04  Jer Noble  <jer.noble@apple.com>

        [MSE] Further fixes for "fast forward" playback after seeking in YouTube behavior.
        https://bugs.webkit.org/show_bug.cgi?id=135572

        Reviewed by Eric Carlson.

        Two related fixes:

        In reenqueueMediaForTime(), update TrackBuffer.lastEnqueuedPresentationTime when we flush samples, so that
        the next time samples are re-enqueued, the starting point for re-enqueueing is correct.

        In sourceBufferPrivateDidReceiveSample(), do not add samples to the decode queue if they are before the
        current media time.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::reenqueueMediaForTime):

2014-08-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: All-caps CSS properties are not shown in Computed pane
        https://bugs.webkit.org/show_bug.cgi?id=133700

        Reviewed by Timothy Hatcher.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties):

2014-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: SelectText functionality always selects text after current selection even if closer selection is behind it
        https://bugs.webkit.org/show_bug.cgi?id=135546

        Reviewed by Mario Sanchez Prada.

        Logic was incorrect for comparing ranges found before the current selection.
        ASSERT was incorrect for allowed ranges. We need to allow ranges that are right at the boundaries of our found ranges.

        Extended existing test: platform/mac/accessibility/select-text.html

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

2014-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: AXSelectTextWithCriteriaParameterizedAttribute incorrectly selects the beginning letters of a word
        https://bugs.webkit.org/show_bug.cgi?id=135547

        Reviewed by Mario Sanchez Prada.

        Allow text search to specify that it wants to match end of words as well as start of words.
        This allows select text criteria to match on whole words only.

        Test: platform/mac/accessibility/select-text-should-match-whole-words.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection):
        * editing/FindOptions.h:
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::isWordEndMatch):
        (WebCore::SearchBuffer::search):

2014-08-04  Jer Noble  <jer.noble@apple.com>

        [MSE] Re-enqueing due to overlapping appended samples can cause stuttering playback
        https://bugs.webkit.org/show_bug.cgi?id=135424

        Reviewed by Eric Carlson.

        If it become necessary to re-enqueue samples (due to appending overlapping samples which cause
        existing samples to be removed), the previous behavior was to flush and re-enqueue the new
        samples dependencies; i.e., everything up to and including the previous sync sample. This causes
        the decoder to visibly stall while it decodes those non-displaying samples, which could be
        a second or more worth of encoded video samples, depending on the frequency of sync samples.

        Instead, when we are asked to re-enqueue, we will look for the next occurring sync sample.
        If found, we can switch over to the replacement samples at that point in the decode queue.
        This limits the overhead of a stream switch, and should allow for a visually seamless switch,
        at the cost of having to wait for the next sync sample to occur to affect the switch.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::seekToTime): Clear the decode queue when seeking.
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Call reenqueueMediaForCurrentTime.
        (WebCore::SourceBuffer::reenqueueMediaForCurrentTime): Switch over to the new stream only
            at the next sync sample.

2014-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: The Dictation command "Replace <phrase> with <phrase>" always capitalizes the replacement string
        https://bugs.webkit.org/show_bug.cgi?id=135557

        Reviewed by Mario Sanchez Prada.

        When replacing text, we should match the capitalization of the word being replaced 
        (unless the replacement looks like an abbreviation).   
 
        Test: platform/mac/accessibility/find-and-replace-match-capitalization.html

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

2014-08-04  Pratik Solanki  <psolanki@apple.com>

        QuickLook resources are cache-replaced with their original binary data causing ASSERT(m_data->size() == newBuffer->size()) in CachedResource.cpp
        https://bugs.webkit.org/show_bug.cgi?id=135548
        <rdar://problem/17891321>

        Reviewed by David Kilzer.

        When loading QuickLook resources, the SharedBuffer in the CachedResource is actually a
        converted representation of the real QuickLook resource. Replacing this with the actual
        network resource (which is what tryReplaceEncodedData() tried to do) is wrong and triggered
        asserts in the code.

        Fix this by having CachedRawResource::mayTryReplaceEncodedData() return false if we are
        loading a QuickLook resource.

        No new tests because we don't have a way to test QuickLook documents.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::didCreateQuickLookHandle):
            Set a flag to indicate that we are loading a QuickLook document.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::isQuickLookResource):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        (WebCore::CachedRawResource::finishLoading):
            Check if we were loading a QuickLook document and if so disable encoded data
            replacement.
        * loader/cache/CachedRawResource.h:
            Add a new bool field returned by mayTryReplaceEncodedData(). Default is true but it is
            set to false in finishLoading() if we were loading QuickLook document.

2014-08-04  Jer Noble  <jer.noble@apple.com>

        [MSE] Seeking occasionally causes many frames to be displayed in "fast forward" mode
        https://bugs.webkit.org/show_bug.cgi?id=135422

        Reviewed by Eric Carlson.

        When a seek is pending, but samples for the new time is not yet present in the SourceBuffer,
        the SourceBufferPrivate may signal that it's ready for new samples through the
        sourceBufferPrivateDidBecomeReadyForMoreSamples() method. In this situation, we should not
        continue to provideMediaData(), as that will append samples from the prior-to-seeking media
        timeline. Since the timeline may have moved forward due to the seek, a decoder may decide to
        display those frames as quickly as possible (the "fast forward" behavior) in order to catch
        up to the new current time.

        If a re-enqueue is pending, don't provide media data in response to being notified that the
        SourceBufferPrivate is ready for more samples. Wait until samples for the new current time
        are appended.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        * dom/Document.cpp:
        (WebCore::Document::unregisterCollection):

2014-08-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Install all unstable webkitdom headers
        https://bugs.webkit.org/show_bug.cgi?id=135544

        Reviewed by Gustavo Noronha Silva.

        We were checking whether generated file existed before they had
        been generated.

        * PlatformGTK.cmake: Add Unstable.h header for all stable classes
        to GObjectDOMBindingsUnstable_INSTALLED_HEADERS and split the
        install command for stable and unstable headers making unstable
        headers optional.

2014-08-04  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error in OpenTypeMathData.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=135541

        Reviewed by Brent Fulgham.

        The SharedBuffer class needs to be defined.
        Also, the OpenTypeMathData constructor should be implemented when OPENTYPE_MATH is not enabled.

        * platform/graphics/opentype/OpenTypeMathData.cpp:

2014-08-03  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17782529> REGRESSION: OS marketing version in iOS Simulator user-agent string is the host OS’s
        https://bugs.webkit.org/show_bug.cgi?id=135549

        Reviewed by Mark Rowe.

        * platform/cocoa/SystemVersion.mm:
        (WebCore::createSystemMarketingVersion): On the iOS Simulator, locate the system Library
        directory relative to the Simulator root.

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

        Support both window and view based video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=135525

        Reviewed by Simon Fraser.

        Presenting in a separate window gives greater flexibility for rotation separately from the app.
        Presenting in the same window works better if the interface is rehosted in another process.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:]): Use clientRect instead of screenRect.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Add m_window and m_parentView.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: 
        (-[WebAVVideoLayer setBounds:]): Parent view might not be fullscreen; use window instead.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): Conditionally create UIWindow and UIViewController for fullscreen.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Video, not the container should have black background.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Conditionally translate finalRect.
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen): Clean up UIWindow and force status bar to correct orientation.
        (WebVideoFullscreenInterfaceAVKit::invalidate): Clean up UIWindow.
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): Hide window and exit without animation.
        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::setVideoFullscreenLayer): Apply frame, because it may have been set before the layer.

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

        Update the SearchFieldResultsButtonElement shadow Pseudo Id when HTMLInputElement's maxResults change
        https://bugs.webkit.org/show_bug.cgi?id=135491

        Reviewed by Ryosuke Niwa.

        Replace the shadowPseudoId() override + manual style invalidation by the generic pseudo ID update.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/InputType.cpp:
        (WebCore::InputType::maxResultsAttributeChanged):
        * html/InputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType):
        (WebCore::updateResultButtonPseudoType):
        (WebCore::SearchInputType::maxResultsAttributeChanged):
        (WebCore::SearchInputType::createShadowSubtree):
        (WebCore::SearchInputType::destroyShadowSubtree):
        * html/SearchInputType.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::shadowPseudoId): Deleted.
        * html/shadow/TextControlInnerElements.h:

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

        Add warnings for the buggy implementations of shadowPseudoId()
        https://bugs.webkit.org/show_bug.cgi?id=135477

        Reviewed by Ryosuke Niwa.

        Dean is going to look into fixing media element styling.
        In the meantime, add warnings to prevent this from spreading.

        * dom/Element.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::shadowPseudoId):
        (WebCore::SliderContainerElement::shadowPseudoId):

2014-08-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r171957.
        https://bugs.webkit.org/show_bug.cgi?id=135538

        Caused GTK assertions and test failures (Requested by smfr on
        #webkit).

        Reverted changeset:

        "Clean up image subsampling code, make it less iOS-specific"
        https://bugs.webkit.org/show_bug.cgi?id=134916
        http://trac.webkit.org/changeset/171957

2014-08-01  Myles C. Maxfield  <litherum@gmail.com>

        [CMake] Allow CMake to find GLib on FreeBSD
        https://bugs.webkit.org/show_bug.cgi?id=132530

        Reviewed by Gustavo Noronha Silva.

        On FreeBSD, glibconfig.h is at /usr/local/include/glib-2.0/glibconfig.h.

        * Source/cmake/FindGLIB.cmake:

2014-08-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r171942): [CMAKE] [GTK] build broken (clean build).
        https://bugs.webkit.org/show_bug.cgi?id=135522

        Reviewed by Martin Robinson.

        No new tests required, no new functionality.

        * CMakeLists.txt: Add missing include to the inspector headers
        and fix the path to InspectorJSTypeBuilders.h

2014-08-01  Simon Fraser  <simon.fraser@apple.com>

        Fix resource leak in FillLayersPropertyWrapper object member
        https://bugs.webkit.org/show_bug.cgi?id=135462

        Reviewed by Andreas Kling.

        Fix leak of m_fillLayerPropertyWrapper by using unique_ptr<>.
        Based on patch by Przemyslaw Kuczynski.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):

2014-08-01  Simon Fraser  <simon.fraser@apple.com>

        Clean up image subsampling code, make it less iOS-specific
        https://bugs.webkit.org/show_bug.cgi?id=134916

        Reviewed by Dean Jackson.

        Compile the image subsampling code on both Mac and iOS, and make it more platform
        neutral in general. Add a setting to allow it to be enabled on Mac for testing.
        
        The most significant changes are in ImageSourceCG and BitmapImageCG. CG's ImageSource
        is no longer stateful with respect to subsampling; its functions take a SubsamplingLevel
        when appropriate. CG's BitmapImage now determines which level of subsampling to use
        for a given frame, storing the subsampling level in the frame data. It can replace
        an aggressively subsampled frame with a less subsampled frame if necessary.
        
        To reduce the chances of subsampling affecting rendering, BitmapImage::size() now
        always returns the non-subsampled size; subsampling is strictly internal to BitmapImage.
        BitmapImage::draw() takes care of scaling the srcRect for subsampled images.
        
        iOS had a code path that enabled caching of frame metadata in BitmapImage without
        actually decoding the frame; make this cross-platform.

        * WebCore.exp.in: Changed signature for GraphicsContext::drawNativeImage().
        * WebCore.xcodeproj/project.pbxproj: Added ImageSource.cpp, which is not built
        for Cocoa but useful for reference.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer): Remove iOS-specific subsampling code.
        (WebCore::CachedImage::createImage): Call setAllowSubsampling() on the image if we
        can get to Settings (m_loader is null for image documents).
        (WebCore::CachedImage::currentFrameKnownToBeOpaque): This forced decode always
        caused creation of the non-subsampled image, so remove it. There's no reason to
        eagerly decode the frame here.
        * loader/cache/CachedImage.h: Fix comment.
        * page/Settings.cpp: Add defaultImageSubsamplingEnabled, true for iOS and false for Mac.
        * page/Settings.in: Added imageSubsamplingEnabled.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage): Init some more things. Default m_allowSubsampling to
        true for iOS to catch images created in code paths where we can't get to Settings.
        (WebCore::BitmapImage::haveFrameAtIndex): Handy helper.
        (WebCore::BitmapImage::cacheFrame): Now takes the subsampling level and whether to cache
        just metadata, or also the frame.
        (WebCore::BitmapImage::didDecodeProperties): No need to store originalSize.
        (WebCore::BitmapImage::updateSize): When we get the size for the first time, call
        determineMinimumSubsamplingLevel() to choose a reasonable subsampling level which takes
        platform-specific limits into account.
        (WebCore::BitmapImage::dataChanged): Comment.
        (WebCore::BitmapImage::ensureFrameIsCached): Take ImageFrameCaching into account.
        (WebCore::BitmapImage::frameAtIndex): Choose a subsampling level given the scale,
        then determine if we can use the currently cached frame, or whether we should resample.
        (WebCore::BitmapImage::frameIsCompleteAtIndex): Caching m_isComplete is now done when caching
        frame metadata.
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex): The 'true' return is the safe return value.
        (WebCore::BitmapImage::frameOrientationAtIndex): Caching m_orientation is now done when caching
        frame metadata.
        (WebCore::BitmapImage::cacheFrameInfo): Deleted.
        (WebCore::BitmapImage::originalSize): Deleted.
        (WebCore::BitmapImage::originalSizeRespectingOrientation): Deleted.
        (WebCore::BitmapImage::currentFrameSize): Deleted.
        (WebCore::BitmapImage::ensureFrameInfoIsCached): Deleted.
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/GraphicsContext.h: No need to pass a scale param now.
        * platform/graphics/ImageSource.cpp: Non-Cocoa changes.
        (WebCore::ImageSource::subsamplingLevelForScale):
        (WebCore::ImageSource::allowSubsamplingOfFrameAtIndex):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameBytesAtIndex):
        * platform/graphics/ImageSource.h: No longer stores subsampling state.
        (WebCore::ImageSource::isSubsampled): Deleted.
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::determineMinimumSubsamplingLevel):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage): Init more members.
        (WebCore::BitmapImage::determineMinimumSubsamplingLevel): Choose a minimum subsampling
        level for the platform (subsample until the image area falls under a threshold).
        (WebCore::BitmapImage::checkForSolidColor): Don't bother decoding frames if the image
        is not 1x1. Also take care not to decode a non-subsampled image.
        (WebCore::BitmapImage::draw): The actual bug fix is here; remove logic that
        computed srcRectForCurrentFrame from m_size and m_originalSize; for some callers
        srcRect was computed using the pre-subsampled size, and for others it was the subsampled size.
        Instead, scale srcRect by mapping between the non-subsampled size, and the size of the CGImageRef
        which is affected by subsampling.
        (WebCore::BitmapImage::copyUnscaledFrameAtIndex):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): Remove #ifdeffed code.
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage): No more weird scaling!
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::createImageSourceOptions): Helper that always returns a new CFDictionaryRef.
        (WebCore::imageSourceOptions): If not subsampling, return the cached CFDictionaryRef, otherwise
        make a new options dict and return it.
        (WebCore::ImageSource::subsamplingLevelForScale): Helper that returns a subsampling level
        between 0 and 3 given a scale.
        (WebCore::ImageSource::isSizeAvailable): SkipMetadata is a default value for the param now.
        (WebCore::ImageSource::allowSubsamplingOfFrameAtIndex): We turn off subsampling for progressive
        JPEGs because of a bug, so need this to know if a frame should be subsampled.
        (WebCore::ImageSource::frameSizeAtIndex): The looping to find a subsampling level is now in BitmapImageCG.
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore::ImageSource::size): Always use a subsampling level of 0 for size().
        (WebCore::ImageSource::getHotSpot):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex): The caller mapped a scale to a level.
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameBytesAtIndex):
        (WebCore::ImageSource::imageSourceOptions): Deleted.
        (WebCore::ImageSource::originalSize): Deleted.
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::invalidatePlatformData): 0 -> nullptr
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::determineMinimumSubsamplingLevel):

2014-08-01  Andreas Kling  <akling@apple.com>

        Many DOM objects have InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero for no reason.
        <https://webkit.org/b/135519>

        Don't set this structure flag unless the object actually has an override
        for getOwnPropertySlotByIndex().

        Reviewed by Geoffrey Garen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:

2014-08-01  Myles C. Maxfield  <mmaxfield@apple.com>

        SVG Font kerning can take an early out if the font has no kerning information
        https://bugs.webkit.org/show_bug.cgi?id=135524

        Reviewed by Dean Jackson.

        Rather than calling SVGFontElement::horizontalKerningForPairOfStringsAndGlyphs() again
        and again, skip the iteration entirely if every call would return 0.

        No new tests because there is no behavior change.

        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::applySVGKerning):
        * svg/SVGFontElement.h:

2014-08-01  Beth Dakin  <bdakin@apple.com>

        Inspector highlights clipped at the bottom on the page in WK1 views with 
        contentInsets
        https://bugs.webkit.org/show_bug.cgi?id=135480
        -and corresponding-
        <rdar://problem/17850323>

        Forgot to commit this one very critical part with 
        http://trac.webkit.org/changeset/171951 

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSizeIncludingObscuredArea):

2014-08-01  Beth Dakin  <bdakin@apple.com>

        Inspector highlights clipped at the bottom on the page in WK1 views with 
        contentInsets
        https://bugs.webkit.org/show_bug.cgi?id=135480
        -and corresponding-
        <rdar://problem/17850323>

        Reviewed by Simon Fraser.

        unscaledTotalVisibleContentSize() was the main function on Mac that was expected 
        to return the rect representing ALL visible content, including content that might 
        be in an inset area and obscured by UI elements. This patch re-names that function 
        to unscaledVisibleContentSizeIncludingObscuredArea(), and that patch makes that 
        function return the right thing in the platformWidget() case.

        Re-name.
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):

        Return platformVisibleContentSizeIncludingObscuredArea() for the platformWidget() 
        case and re-name.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSizeIncludingObscuredArea):

        This was just wrong. It was returning the big rectangle instead of the small one 
        for platformWidget().
        (WebCore::ScrollView::unscaledUnobscuredVisibleContentSize):

        New platform functions.
        (WebCore::ScrollView::platformVisibleContentRectIncludingObscuredArea):
        (WebCore::ScrollView::platformVisibleContentSizeIncludingObscuredArea):
        (WebCore::ScrollView::unscaledTotalVisibleContentSize): Deleted.
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::platformVisibleContentRectIncludingObscuredArea):
        (WebCore::ScrollView::platformVisibleContentSizeIncludingObscuredArea):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::platformVisibleContentSize):
        (WebCore::ScrollView::platformVisibleContentRectIncludingObscuredArea):
        (WebCore::ScrollView::platformVisibleContentSizeIncludingObscuredArea):

        Re-name.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2014-08-01  Myles C. Maxfield  <mmaxfield@apple.com>

        SVGGlyph wastes space due to padding
        https://bugs.webkit.org/show_bug.cgi?id=135520

        Reviewed by Dean Jackson.

        Rearrange members in SVGGlyph so there is no wasted padding space.

        No new tests because there is no behavior change.

        * platform/graphics/SVGGlyph.h:
        (WebCore::SVGGlyph::SVGGlyph):

2014-07-31  Dean Jackson  <dino@apple.com>

        [Media iOS] Ensure there is a nice default fallback for missing wireless target names
        https://bugs.webkit.org/show_bug.cgi?id=135488
        <rdar://problem/17879156>

        Reviewed by Eric Carlson.

        We occasionally run into cases where this.host.externalDeviceDisplayName
        is empty or null, creating a pretty ugly/confusing string in the
        wireless playback status screen.

        If this happens, we should default to using "Apple TV".

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): Check if the externalDeviceDisplayName
        is empty or null, and fall back to "Apple TV" if so.

2014-07-30  Myles C. Maxfield  <mmaxfield@apple.com>

        URLs in srcset attributes are not made absolute upon copy and paste
        https://bugs.webkit.org/show_bug.cgi?id=135448

        Reviewed by Ryosuke Niwa.

        When pasting, canonicalize URLs in srcset the same way we do with src.

        Test: editing/pasteboard/img-srcset-copy-paste-canonicalization.html

        * dom/Element.cpp:
        (WebCore::Element::completeURLsInAttributeValue): Initial implemention, moved from markup.cpp.
        * dom/Element.h:
        (WebCore::Element::attributeContainsURL): New function for completeURLs to call.
        (WebCore::Element::completeURLsInAttributeValue): Only called if attributeContainsURL returns
        true. Default implementation simply calls isURLAttribute().
        * editing/markup.cpp:
        (WebCore::completeURLs): Call attributeContainsURL() and completeURLsInAttributeValue() to
        complete the URL, so nodes can perform their own behavior.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attributeContainsURL): Return true for srcset.
        (WebCore::HTMLImageElement::completeUrlAttributeValue): Use our existing srcset parser to
        parse the srcset attribute, then use its output to canonicalize URLs, and build it back up
        into a string.
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::attributeContainsURL):
        (WebCore::HTMLImageElement::completeUrlAttributeValue):
        * html/parser/HTMLSrcsetParser.cpp: Make parseImageCandidatesFromSrcsetAttribute() public
        and change its signature to return its result.
        (WebCore::parseImageCandidatesFromSrcsetAttribute):
        * html/parser/HTMLSrcsetParser.h: Ditto.

2014-07-31  Andreas Kling  <akling@apple.com>

        Remove the JSC::OverridesVisitChildren flag.
        <https://webkit.org/b/135489>

        Tweak the bindings code generator to stop spitting out the flag.

        Reviewed by Geoffrey Garen.

        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):

2014-08-01  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Volume is not remembered between items in a YouTube playlist
        https://bugs.webkit.org/show_bug.cgi?id=135479

        Reviewed by Eric Carlson.

        When an AVSampleBufferAudioRenderer is added to the player, set its -volume and -muted
        properties with the current values from the HTMLMediaElement. 

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer):

2014-08-01  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build after r171891

        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::platformTopContentInset):
        (WebCore::ScrollView::platformSetTopContentInset):

2014-08-01  Pratik Solanki  <psolanki@apple.com>

        Remove EventNames.h include from header files
        https://bugs.webkit.org/show_bug.cgi?id=135486

        Reviewed by Alexey Proskuryakov.

        No new tests because no functional changes.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        * Modules/gamepad/GamepadEvent.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/mediastream/RTCStatsResponse.h:
        * Modules/websockets/WebSocket.h:
        * css/FontLoader.h:
        * dom/SecurityPolicyViolationEvent.h:
        * loader/appcache/DOMApplicationCache.h:
        * workers/AbstractWorker.h:
        * workers/Worker.h:
        * workers/WorkerGlobalScope.h:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEvent.h:

2014-08-01  Simon Fraser  <simon.fraser@apple.com>

        nullptr goodness in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=135512

        Reviewed by Brent Fulgham.

        Use nullptr in RenderLayer.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::destroyScrollbar):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::calculateClipRects):

2014-08-01  Tim Horton  <timothy_horton@apple.com>

        Build fix for iOS

        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        We use CGImageRef instead of NSImage here on iOS.

2014-08-01  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        ASSERTION FAILED: listNode in WebCore::RenderListItem::updateListMarkerNumbers
        https://bugs.webkit.org/show_bug.cgi?id=134970

        Reviewed by Zalan Bujtas.

        Removed an unnecessary assert, because the null return value of enclosingList() is
        handled properly after this assert.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateListMarkerNumbers):

2014-08-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Replace DEPRECATED_DEFINE_STATIC_LOCAL with NeverDestroyed<T> in NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=135494

        Reviewed by Andrei Bucur.

        Use static NeverDestroyed<T> variables instead of the DEPRECATED_DEFINE_STATIC_LOCAL macro.

        No new tests, no behavior changes.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::customHandlersStateString):
        (WebCore::NavigatorContentUtils::isProtocolHandlerRegistered):

2014-07-31  Benjamin Poulain  <bpoulain@apple.com>

        Remove shadowPseudoId() override from the shadow media controls
        https://bugs.webkit.org/show_bug.cgi?id=135474

        Reviewed by Eric Carlson.

        Small cleanup.

        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::MediaControlPanelElement):
        (WebCore::MediaControlPanelEnclosureElement::MediaControlPanelEnclosureElement):
        (WebCore::MediaControlOverlayEnclosureElement::MediaControlOverlayEnclosureElement):
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement):
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement):
        (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement):
        (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement):
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlOverlayPlayButtonElement::MediaControlOverlayPlayButtonElement):
        (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement):
        (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement):
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement):
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlClosedCaptionsContainerElement::MediaControlClosedCaptionsContainerElement):
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlPanelVolumeSliderElement::MediaControlPanelVolumeSliderElement):
        (WebCore::MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement):
        (WebCore::MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement):
        (WebCore::MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement):
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        (WebCore::MediaControlPanelElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlPanelEnclosureElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlOverlayEnclosureElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlTimelineContainerElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlVolumeSliderContainerElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlStatusDisplayElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlPanelMuteButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlPlayButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlOverlayPlayButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlRewindButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlClosedCaptionsContainerElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlClosedCaptionsTrackListElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlTimelineElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlPanelVolumeSliderElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlFullscreenVolumeSliderElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlTimeRemainingDisplayElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlCurrentTimeDisplayElement::shadowPseudoId): Deleted.
        (WebCore::MediaControlTextTrackContainerElement::textTrackContainerElementShadowPseudoId): Deleted.
        (WebCore::MediaControlTextTrackContainerElement::shadowPseudoId): Deleted.
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::MediaControls):
        (WebCore::MediaControls::shadowPseudoId): Deleted.
        * html/shadow/MediaControls.h:

2014-07-31  Timothy Horton  <timothy_horton@apple.com>

        Build fix for platforms where we should have automaticallyAdjustsContentInsets but it isn't public yet

        * platform/mac/ScrollViewMac.mm:

2014-07-31  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EFL] Add support for building with Geoclue2.
        https://bugs.webkit.org/show_bug.cgi?id=135455

        Reviewed by Gyuyoung Kim.

        No new tests required, no new functionality.

        * PlatformEfl.cmake: Generate derived sources for Geoclue2Interface
        and include gio-unix path.

2014-07-31  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Region painting needs to take subpixel accumulation into account.
        https://bugs.webkit.org/show_bug.cgi?id=135469

        Similar to non-region painting, when the context is translated, we need to propagate
        the subpixel difference so that renderers get snapped to the same position as if they
        were not part of a region.

        Reviewed by Simon Fraser.

        Covered by existing tests/not testable (webkit.org/b/135470)

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:

2014-07-31  Jer Noble  <jer.noble@apple.com>

        [iOS] Video in an <embed> has a bad aspect ratio when in fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=135481

        Reviewed by Simon Fraser.

        Do not change the gravity of our AVPlayerLayer when in full screen mode; its gravity
        is controlled by setVideoFullscreenGravity(), and should not be affected by style changes.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoLayerGravity):

2014-07-31  Beth Dakin  <bdakin@apple.com>

        Hit-testing broken in WebKit 1 views with AppKit's contentInsets
        https://bugs.webkit.org/show_bug.cgi?id=135434
        -and corresponding-
        <rdar://problem/17850323>

        Reviewed by Benjamin Poulain.

        AppKit's contentInsets are factored into scroll positions and mouse positions, but
        in WebCore, we generally want all of those things to be factored out so that, for
        example, the scroll position of a document pinned to the top is the same whether
        or not there is a contentInset. So to fix hit-testing in WebKit 1 views with
        contentInsets, this patch factors the inset out or into of all coordinate
        conversion methods just like we do for the WebKit2 contentInset.
        
        This patch also adds the ability to test WK1 platformContentInsets with
        window.internals, and it re-names convertFromRenderer to 
        convertFromRendererToContainingView and also re-names convertToRenderer to
        convertFromContainingViewToRenderer.

        ScrollView::topContentInset() takes an optional parameter indicating whether the
        caller wants the WebCore::Page contentInset or the platform content inset. It’s
        necessary to distinguish between these cases because there is a lot of code that
        only wants the WebCore::Page contentInset since that feature is actually
        implemented in WebCore as opposed to being implemented at the platform level.
        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::topContentInset):

        For layout test purposes, set the platforTopContentInset here if there is a 
        platformWidget().
        (WebCore::FrameView::topContentInsetDidChange):

        Re-named functions, also all coordinate conversion functions call 
        topContentInset(ManualOrPlatformContentInset)
        (WebCore::FrameView::convertFromContainingViewToRenderer):
        (WebCore::FrameView::convertToContainingView):
        (WebCore::FrameView::convertFromContainingView):
        (WebCore::FrameView::convertFromRenderer): Deleted.
        (WebCore::FrameView::convertToRenderer): Deleted.
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setTopContentInset):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::documentScrollOffsetRelativeToViewOrigin):
        (WebCore::ScrollView::documentScrollPositionRelativeToViewOrigin):
        (WebCore::ScrollView::contentsToRootView):
        (WebCore::ScrollView::rootViewToTotalContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::platformTopContentInset):
        (WebCore::ScrollView::platformSetTopContentInset):
        * platform/ScrollView.h:
        (WebCore::ScrollView::topContentInset):
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::platformTopContentInset):
        (WebCore::ScrollView::platformSetTopContentInset):

        Implement new platform inset-related functions using AppKit's implementation.
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformTopContentInset):
        (WebCore::ScrollView::platformSetTopContentInset):
        
        When we set the scroll position for the documentView, we have to factor the inset
        back into the WebCore scroll position.
        (WebCore::ScrollView::platformSetScrollPosition):
        
        Re-named functions.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::convertFromScrollbarToContainingView):
        (WebCore::RenderLayer::convertFromContainingViewToScrollbar):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::convertFromScrollbarToContainingView):
        (WebCore::RenderListBox::convertFromContainingViewToScrollbar):

2014-07-31  Dean Jackson  <dino@apple.com>

        Default buttons do not pulse in OS X 10.10
        https://bugs.webkit.org/show_bug.cgi?id=135447
        <rdar://problem/17875896>

        Reviewed by Dan Bernstein.

        OS X Yosemite does not have the animated pulsing default
        buttons seen in previous releases. We don't need to have
        a timer in RenderButton constantly triggering repaints.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintButton): No need to advance the animation.
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange): Ask the theme if it
        should advance the animation.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::defaultButtonHasAnimation): Virtual function
        indicating if the button needs to repaint.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::defaultButtonHasAnimation): Provide platform
        specific result on Yosemite and above.

2014-07-31  Tim Horton  <timothy_horton@apple.com>

        DOM::renderedImageForcingBlackText returns an image with the wrong logical size on 2x displays
        https://bugs.webkit.org/show_bug.cgi?id=135442
        <rdar://problem/17614632>

        Reviewed by Simon Fraser.

        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        Scale the NSImage size by the device scale factor,
        similar to what we did for drag images in r167403.
        Ideally this scaling would happen in the code that
        generates the images, but this is a much larger change
        with much more regression potential.

2014-07-31  Bear Travis  <betravis@adobe.com>

        [CSS Font Loading] Rename document.fontloader to document.fonts
        https://bugs.webkit.org/show_bug.cgi?id=135393

        Reviewed by Bem Jones-Bey.

        The most recent version of the specification has renamed
        document.fontloader to document.fonts. This change updates the
        names in WebCore and LayoutTests.

        Fixed up existing tests under LayoutTests/fast/css/fontloader-*
        and LayoutTests/http/webfont/fontloader-*

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::notifyFontLoader):
        (WebCore::CSSFontFace::notifyLoadingDone):
        * dom/Document.cpp:
        (WebCore::Document::fonts):
        (WebCore::Document::fontloader): Deleted.
        * dom/Document.h:
        * dom/Document.idl:
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):

2014-07-31  Andrei Bucur  <abucur@adobe.com>

        REGRESSION: Search highlight is broken in RTL multicolumn content
        https://bugs.webkit.org/show_bug.cgi?id=135452

        Reviewed by Simon Fraser.

        The offsets for elements inside RTL multi-column elements are incorrectly computed because
        the columns don't calculate their left position according to the writing direction.

        The patch extracts the column position computation in two helper functions (for top and left)
        so they can be used when needed in different parts of the code. In our case, the |columnLogicalLeft|
        function should be used inside |columnTranslationForOffset|.

        Test: fast/multicol/content-bounding-box-rtl.html

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnLogicalLeft): Return the logical left of a column relative to the set.
        (WebCore::RenderMultiColumnSet::columnLogicalTop): Return the logical top of a column relative to the set.
        (WebCore::RenderMultiColumnSet::columnRectAt): Split the code between columnLogicalLeft and columnLogicalTop.
        (WebCore::RenderMultiColumnSet::collectLayerFragments): Make code clearer by adding a new line.
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset): Use columnLogicalLeft instead of duplicating logic.
        * rendering/RenderMultiColumnSet.h:

2014-07-31  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        Eliminate "FractionConversion" from CSSPrimitiveValue::convertToLength
        https://bugs.webkit.org/show_bug.cgi?id=135377

        Reviewed by Darin Adler.

        The FractionConversion argument in CSSPrimitiveValue::convertToLength
        doesn't seem to actually have a purpose. It is for converting numbers
        into Length(x * 100, Percent), but this case shouldn't be reachable.
        The original patch introducing it doesn't shed any light either:
        [https://bugs.webkit.org/show_bug.cgi?id=74913

        This patch removes the now unused FractionConversion argument. Note
        that we can probably also merge the two Fixed conversions, as the
        two only differ in clamping large numbers (probably unintended).

        Patch by Timothy Loh, backported from Blink: https://codereview.chromium.org/71253002

        No new tests.

        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory):
        * css/CSSParser.cpp:
        (WebCore::parseTransformTranslateArguments):
        (WebCore::parseTranslateTransformValue):
        (WebCore::parseTransformArguments): Deleted.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClip::convertToLength):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::convertToIntLength):
        (WebCore::StyleResolver::convertToFloatLength):
        * css/TransformFunctions.cpp:
        (WebCore::convertToFloatLength):

2014-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: console.profile missing profile information
        https://bugs.webkit.org/show_bug.cgi?id=135432

        Reviewed by Timothy Hatcher.

        By switching console.profile to start/stop the timeline we would
        not have a chance to recompile JS functions with profiling information.
        This used to work because whenever the inspector was open we would
        have profiling information enabled. Go back to that behavior.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::profilerEnabled):
        Instead of checking if the timeline agent has started, check if the
        timeline agent has been created. Going back to the normal behavior
        of always having profiling information when the inspector is open.

        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        Recompile initializing the timeline agent to include profiling information.

        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        Recompile destrying the timeline agent, only if needed.

        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        Using a boolean to track nested calls would not give expected
        behavior when un-nesting. Switch to a counter to ensure that
        as we start profiling in the outermost level we then stop
        profiling at that same level and not inside an inner nesting.

2014-07-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor EventHandler to call ScrollAnimator::handleWheelEvent for overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=135195

        Reviewed by Beth Dakin.

        ScrollableArea::handleWheelEvent is not currently being used to handle wheel events for overflow scrolling; it instead directly invokes ScrollableArea::scroll.
        In order to expose wheel phases on Mac, the PlatformWheelEvent itself should propagate down to ScrollableArea, not just the scroll granularity, direction and
        multiplier required by ScrollableArea::scroll. With this patch, PlatformWheelEvent will be "shipped" along with the WheelEvent.

        No new tests, since behavior should not have changed.

        * page/EventHandler.cpp:
        (WebCore::didScrollInScrollableAreaForSingleAxis): Calls ScrollableArea::scroll directly using WheelEvent's data. Used to handle programmatic WheelEvents, e.g. from JavaScript.
        (WebCore::handleWheelEventInAppropriateEnclosingBoxForSingleAxis): Finds the correct ScrollableArea and attempts to scroll it using the information contained in the WheelEvent via ScrollableArea::handleWheelEvent
        (WebCore::EventHandler::defaultWheelEventHandler): Updated to use handleWheelEventInAppropriateEnclosingBoxForSingleAxis instead of scrollNode.
        (WebCore::scrollNode): Deleted.
        * rendering/RenderListBox.h: Made RenderListBox::scroll public so it can be invoked from EventHandler::handleWheelEventInAppropriateEnclosingBoxForSingleAxis.
        * rendering/RenderNamedFlowThread.cpp: Refactored to let EventHandler update nextScrollBlock in the case of isRenderNamedFlowThread().
        (WebCore::RenderNamedFlowThread::fragmentFromRenderBoxAsRenderBlock): 
        * rendering/RenderNamedFlowThread.h:

2014-07-31  Dan Bernstein  <mitz@apple.com>

        WebCore part of: Server trust authentication challenges aren’t sent to the navigation delegate
        https://bugs.webkit.org/show_bug.cgi?id=135327

        Reviewed by Alexey Proskuryakov.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::receivedCredential): Don’t try to change the persistence of
        credentials used for server trust, because the platform doesn’t support persistence values
        other than Session for server trust.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedCredential): Ditto.

2014-07-31  Dan Bernstein  <mitz@apple.com>

        Tried to fix building with the OS X 10.9 SDK while targeting OS X 10.8.

        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::toCredentialPersistence):

2014-07-31  Dan Bernstein  <mitz@apple.com>

        Reverted r171854, because it broke building with the OS X 10.8 SDK.

        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::toCredentialPersistence):

2014-07-31  Dan Bernstein  <mitz@apple.com>

        Tried to fix building with the OS X 10.9 SDK while targeting OS X 10.8.

        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::toCredentialPersistence):

2014-07-31  Jer Noble  <jer.noble@apple.com>

        REGRESSION(??): [iOS] Disabling MediaPlaybackRequiresUserGesture does not remove user gesture requirement for entering full screen.
        https://bugs.webkit.org/show_bug.cgi?id=135443

        Reviewed by Dean Jackson.

        Allow full screen mode to be entered without a user gesture if the gesture requirement for media playback
        has been unset.

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

2014-07-31  Andrei Bucur  <abucur@adobe.com>

        [CSS Multicolumn] Clear the lines when switching to multi-column layout
        https://bugs.webkit.org/show_bug.cgi?id=135127

        Reviewed by Alexandru Chiculita.

        When switching an element to multi-column layout it becomes a container of block
        children. When this happens the existing line boxes must be deleted in addition
        to clearing the hasInlineChildren flag.

        Tests: fast/multicol/inline-container-to-multicol.html
               fast/multicol/inline-container-to-multicol-float.html
               fast/multicol/inline-container-to-multicol-positioned.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createMultiColumnFlowThread):

2014-07-30  Andreas Kling  <akling@apple.com>

        PropertyName's internal string is always atomic.
        <https://webkit.org/b/135451>

        Use PropertyName::publicName() directly instead of taking the slow route
        through AtomicString::findStringWithHash().

        These strings are always atomic, and findStringWithHash() would trudge
        through a full hash lookup just to discover that indeed, they are!

        Reviewed by Benjamin Poulain.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::findAtomicString): Deleted.
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::canGetItemsForName):
        (WebCore::JSHTMLDocument::nameGetter):

2014-07-30  Benjamin Poulain  <benjamin@webkit.org>

        ElementRuleCollector: group the shadow tree code
        https://bugs.webkit.org/show_bug.cgi?id=135410

        Reviewed by Andreas Kling.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        Little cleanup: group the shadow tree rule collection in the same block.

2014-07-30  Benjamin Poulain  <benjamin@webkit.org>

        Cleanup DetailsMarkerControl
        https://bugs.webkit.org/show_bug.cgi?id=135429

        Reviewed by Andreas Kling.

        Remove the override of shadowPseudoId(). This is a simple type of shadowId,
        it should use the generic pseudo() path.

        Move DetailsMarkerControl::create() out-of-line. One could justify inlining the constructor,
        inlining the ::create() function has little value.

        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::create):
        (WebCore::DetailsMarkerControl::DetailsMarkerControl):
        (WebCore::DetailsMarkerControl::rendererIsNeeded):
        (WebCore::DetailsMarkerControl::shadowPseudoId): Deleted.
        (WebCore::DetailsMarkerControl::summaryElement): Deleted.
        * html/shadow/DetailsMarkerControl.h:
        (WebCore::DetailsMarkerControl::create): Deleted.

2014-07-30  Benjamin Poulain  <bpoulain@apple.com>

        Remove UploadButtonElement::shadowPseudoId()
        https://bugs.webkit.org/show_bug.cgi?id=135435

        Reviewed by Andreas Kling.

        Use the generic pseudo() path instead of a custom shadowPseudoId().

        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::create):
        (WebCore::UploadButtonElement::createForMultiple):
        (WebCore::UploadButtonElement::UploadButtonElement):
        Set the type in the common constructor instead of the call sites.
        (WebCore::UploadButtonElement::shadowPseudoId): Deleted.
        * html/FileInputType.h:

2014-07-30  Benjamin Poulain  <bpoulain@apple.com>

        Remove SpinButtonElement::shadowPseudoId
        https://bugs.webkit.org/show_bug.cgi?id=135436

        Reviewed by Andreas Kling.

        Use the generic pseudo.

        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
        (WebCore::SpinButtonElement::shadowPseudoId): Deleted.
        * html/shadow/SpinButtonElement.h:

2014-07-30  Benjamin Poulain  <bpoulain@apple.com>

        Clean up YouTubeEmbedShadowElement
        https://bugs.webkit.org/show_bug.cgi?id=135437

        Reviewed by Andreas Kling.

        * html/shadow/YouTubeEmbedShadowElement.cpp:
        (WebCore::YouTubeEmbedShadowElement::YouTubeEmbedShadowElement):
        (WebCore::YouTubeEmbedShadowElement::pluginElement): Deleted.
        This is unused in WebCore.

        (WebCore::YouTubeEmbedShadowElement::shadowPseudoId): Deleted.
        Use the generic pseudo path instead of a custom shadowPseudoId.
        * html/shadow/YouTubeEmbedShadowElement.h:

2014-07-30  Benjamin Poulain  <bpoulain@apple.com>

        Remove shadowPseudoId() from InputFieldSpeechButtonElement and SearchFieldCancelButtonElement
        https://bugs.webkit.org/show_bug.cgi?id=135438

        Reviewed by Andreas Kling.

        Use the generic path.

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::SearchFieldCancelButtonElement::shadowPseudoId): Deleted.
        (WebCore::InputFieldSpeechButtonElement::shadowPseudoId): Deleted.
        * html/shadow/TextControlInnerElements.h:

2014-07-30  Andy Estes  <aestes@apple.com>

        USE(CONTENT_FILTERING) should be ENABLE(CONTENT_FILTERING)
        https://bugs.webkit.org/show_bug.cgi?id=135439

        Reviewed by Tim Horton.

        We now support two different platform content filters, and will soon support a mock content filter (as part of
        webkit.org/b/128858). This makes content filtering a feature of WebKit, not just an adoption of a third-party
        library. ENABLE() is the correct macro to use for such a feature.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::dataReceived):
        * loader/DocumentLoader.h:
        * loader/FrameLoaderClient.h:
        * platform/ContentFilter.h:
        * platform/ios/ContentFilterIOS.mm:
        * platform/mac/ContentFilterMac.mm:

2014-07-30  Andreas Kling  <akling@apple.com>

        Static hash tables no longer need to be coupled with a VM.
        <https://webkit.org/b/135421>

        Update for JSC::ClassInfo changes.
        
        Remove the JSNoStaticTables mode for IDL code generation, which was used to
        ensure that each VM had its own unique copy of certain static tables.
        This was used for interfaces that could be used in workers, and now there's
        no need to manually annotate these things anymore.

        Also remove the DOMObjectHashTableMap class that was only used for this.

        Reviewed by Geoffrey Garen.

        * Modules/indexeddb/IDBAny.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLException.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/websockets/CloseEvent.idl:
        * Modules/websockets/WebSocket.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMObjectHashTableMap.cpp: Removed.
        * bindings/js/DOMObjectHashTableMap.h: Removed.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getHashTableForGlobalData): Deleted.
        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticValueSlotEntryWithoutCaching):
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::put):
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::putDelegate):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::putDelegate):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/WebCoreJSClientData.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateImplementation):
        (GenerateConstructorHelperMethods):
        (hashTableAccessor): Deleted.
        (prototypeHashTableAccessor): Deleted.
        (constructorHashTableAccessor): Deleted.
        * bindings/scripts/IDLAttributes.txt:
        * bridge/c/CRuntimeObject.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_method.cpp:
        * bridge/runtime_object.cpp:
        * crypto/CryptoKey.idl:
        * css/CSSFontFaceLoadEvent.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMStringList.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/MessageChannel.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/ProgressEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/File.idl:
        * fileapi/FileError.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMURL.idl:
        * page/EventSource.idl:
        * page/WorkerNavigator.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/SharedWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/WorkerLocation.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestProgressEvent.idl:
        * xml/XMLHttpRequestUpload.idl:

2014-07-30  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17199364> [Mac] Popup button arrows appear on the left, underlapping text, when the UI layout direction is right-to-left
        https://bugs.webkit.org/show_bug.cgi?id=135426

        Reviewed by Dean Jackson.

        No test, because the UI layout direction in the test harness is always left-to-right.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::popupButton): Forced the user interface layout direction of the
        NSPopUpButtonCell to left-to-right. Added a FIXME about how we could make this vary based on
        the direction of the <select>, though that would require additional changes elsewhere.

2014-07-30  Dan Bernstein  <mitz@apple.com>

        Made Credential hold onto an NSURLCredential when needed.
        Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327

        Reviewed by Alexey Proskuryakov.

        No change in functionality.

        * WebCore.exp.in: Updated.

        * platform/network/Credential.h: Removed definition of CERTIFICATE_CREDENTIALS_SUPPORTED,
        which is not used anymore.

        * platform/network/CredentialBase.h:
        (WebCore::CredentialBase::encodingRequiresPlatformData): Added a base implementation that
        returns false.

        * platform/network/cf/AuthenticationCF.cpp:
        Changed to use the Credential constructor that takes an CFURLCredential, and the new
        cfCredential member function. Made the createCF and core functions Windows-only and
        therefore removed the CERTIFICATE_CREDENTIALS_SUPPORTED code from them.
        * platform/network/cf/AuthenticationCF.h:

        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage): Changed to construct a Credential
        from a CFURLCredential.
        (WebCore::CredentialStorage::saveToPersistentStorage): Changed to use the new cfCredential
        member function.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto to both.
        (WebCore::ResourceHandle::receivedCredential): Ditto.

        * platform/network/cocoa/CredentialCocoa.h:
        Replaced the m_identity, m_certificates and m_type member variables with an m_nsCredential
        one holding onto an NSURLCredential. Declared constructors from and getters for
        NSURLCredential and CFURLCredentialRef.
        (WebCore::Credential::encodingRequiresPlatformData): Override that checks the
        NSURLCredential if necessary.

        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::toNSURLCredentialPersistence): New helper function.
        (WebCore::toCredentialPersistence): Ditto.
        (WebCore::Credential::Credential): Defined constructors to create or take an
        NSURLCredential.
        (WebCore::Credential::cfCredential): Added.
        (WebCore::Credential::nsCredential): Added. Returns nil for the empty credential.
        (WebCore::Credential::isEmpty): Changed to check m_nsCredential.
        (WebCore::Credential::platformCompare): Changed to compare m_nsCredential if needed.
        (WebCore::Credential::encodingRequiresPlatformData): Returns true if the credential is not
        a user and a password.

        * platform/network/mac/AuthenticationMac.h: Removed mac and core functions for Credential.
        * platform/network/mac/AuthenticationMac.mm:
        (-[WebCoreAuthenticationClientAsChallengeSender useCredential:forAuthenticationChallenge:]):
        Changed to use Credential constructor that takes an NSURLCredential.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Ditto. Also use the
        nsCredential getter.

        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::getFromPersistentStorage): Use new Credential constructor.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto. Also use the
        nsCredential getter.
        (WebCore::ResourceHandle::receivedCredential): Ditto.

2014-07-30  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Build depends on OpenGL ES
        https://bugs.webkit.org/show_bug.cgi?id=135289

        Reviewed by Martin Robinson.

        Guard the OpenGL ES code with USE(OPENGL_ES_2).

        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:

2014-07-30  Radu Stavila  <stavila@adobe.com>

        Member name collision in RenderView and SelectionSubtreeRoot
        https://bugs.webkit.org/show_bug.cgi?id=135233

        Reviewed by Mihnea Ovidenie.

        The selectionStart/End members in RenderView have been renamed to fix confusion caused by the fact that
        RenderView inherits SelectionSubtreeRoot, which also has the same selectionStart/End members.

        No new tests required, no new functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::getSelection):
        * rendering/RenderView.h:

2014-07-30  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Move TextureMapperLayer::textureMapper() definition into the header
        https://bugs.webkit.org/show_bug.cgi?id=135384

        Reviewed by Martin Robinson.

        Move the definitions of TextureMapperLayer::textureMapper() and TextureMapperLayer::rootLayer()
        into the TextureMapperLayer header. This makes both functions inline-able, removing unnecessary
        calling overhead in GraphicsLayerTextureMapper::flushCompositingState() and
        GraphicsLayerTextureMapper::updateBackingStoreIfNeeded().

        TextureMapperLayer::rootLayer() now also returns a reference.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::~TextureMapperLayer):
        (WebCore::TextureMapperLayer::rootLayer): Deleted.
        (WebCore::TextureMapperLayer::textureMapper): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::textureMapper):
        (WebCore::TextureMapperLayer::rootLayer):

2014-07-29  Andreas Kling  <akling@apple.com>

        Crash when using 'em' units to specify font-size inside animation keyframe.
        <https://webkit.org/b/135395>
        <rdar://problem/17851910>

        We'd forgotten to initialize the "parent style" when resolving keyframe
        styles, and this led to a crash in length conversion where the code
        assumes a parent style will be present.

        To keep this fix minimal, simply make the "parent style" a clone of the
        base element style.

        Reviewed by Simon Fraser.

        Test: fast/animation/keyframe-with-font-size-in-em-units.html

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

2014-07-29  Pratik Solanki  <psolanki@apple.com>

        [iOS] REGRESSION(r171526): PDF documents fail to load in WebKit1 with disk image caching enabled
        https://bugs.webkit.org/show_bug.cgi?id=135359
        <rdar://problem/17824645>

        Reviewed by Darin Adler.

        r171526 broke the case where we have a memory mapped file from the DiskImageCache in the
        SharedBuffer. In such a case, m_buffer is empty and createCFData() returned an
        WebCoreSharedBufferData with an empty buffer.

        Fix this by taking the easy route of bringing back the old code for the disk image cache
        file backed case. In the long run we probably want to remove the iOS specific disk image
        cache anyway.

        Review also uncovered another bug in r171526 where we were balancing an Objective-C alloc
        with a CFRelease which is incorrect when running under GC. Fix that by using adoptNS along
        with adoptCF which is what the code did before.

        No new tests because the bug only occurs on device and we can't run tests on device yet.

        * platform/mac/SharedBufferMac.mm:
        (-[WebCoreSharedBufferData initWithDiskImageSharedBuffer:]):
        (-[WebCoreSharedBufferData length]):
        (-[WebCoreSharedBufferData bytes]):
        (WebCore::SharedBuffer::createCFData):

2014-07-29  Benjamin Poulain  <bpoulain@apple.com>

        VisitedLinkState::determineLinkState should take a reference
        https://bugs.webkit.org/show_bug.cgi?id=135375

        Reviewed by Sam Weinig.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initElement):
        * dom/VisitedLinkState.h:
        (WebCore::VisitedLinkState::determineLinkState):

2014-07-29  Brady Eidson  <beidson@apple.com>

        Make WKOriginDataManager actually operate on IndexedDatabases.
        https://bugs.webkit.org/show_bug.cgi?id=135346

        Reviewed by Sam Weinig (and David Kilzer and Alex Christensen)

        * WebCore.exp.in:

2014-07-29  Dan Bernstein  <mitz@apple.com>

        Moved the Cocoa-specific parts of CredentialBase into a Cocoa-specific Credential class.
        Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327

        Reviewed by Alexey Proskuryakov.

        No change in functionality.

        * WebCore.exp.in: Updated for functions moved in the class hierarchy.

        * WebCore.xcodeproj/project.pbxproj: Added CredentialCocoa.{h,mm}.

        * platform/network/Credential.h: For Cocoa, include CredentialCocoa.h instead of the generic
        class.
        (WebCore::Credential::Credential): Removed #if CERTIFICATE_CREDENTIALS_SUPPORTED code.

        * platform/network/CredentialBase.cpp:
        (WebCore::CredentialBase::CredentialBase): Changed to use emptyString instead of "", removed
        #if CERTIFICATE_CREDENTIALS_SUPPORTED code.
        (WebCore::CredentialBase::isEmpty): Ditto.
        (WebCore::CredentialBase::compare): Renamed operator== to this, removed
        #if CERTIFICATE_CREDENTIALS_SUPPORTED code, but changed the end to call platformCompare.
        (WebCore::CredentialBase::identity): Deleted.
        (WebCore::CredentialBase::certificates): Deleted.
        (WebCore::CredentialBase::type): Deleted.
        * platform/network/CredentialBase.h: Removed #if CERTIFICATE_CREDENTIALS_SUPPORTED members.
        (WebCore::CredentialBase::platformCompare): Added a base implementation that returns true.
        (WebCore::operator==): Changed to use CredentialBase::compare.

        * platform/network/cocoa/CredentialCocoa.h: Added.
        (WebCore::Credential::Credential):
        * platform/network/cocoa/CredentialCocoa.mm: Added.
        (WebCore::Credential::Credential): Moved the constructor that takes an identity and
        certificates here.
        (WebCore::Credential::isEmpty): Moved here.
        (WebCore::Credential::identity): Ditto.
        (WebCore::Credential::certificates): Ditto.
        (WebCore::Credential::type): Ditto.
        (WebCore::Credential::platformCompare): Moved the code that compares client-certificate
        credentials here.

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac): Removed #if CERTIFICATE_CREDENTIALS_SUPPORTED guards in this Cocoa-only
        file.
        (WebCore::core): Ditto.

2014-07-29  Daniel Bates  <dabates@apple.com>

        Use WTF::move() instead of std::move() to help ensure move semantics
        https://bugs.webkit.org/show_bug.cgi?id=135351

        Reviewed by Alexey Proskuryakov.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::updateCaptionStyleSheetOveride):

2014-07-29  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Assertion failure hit testing a region-based multicolumn in a region
        https://bugs.webkit.org/show_bug.cgi?id=135385

        Reviewed by Andrei Bucur.

        When a region-based multicolumn element is displayed and hit tested in a region,
        we have to disable the named flow region information not only for painting,
        but also for hit-testing. This is a follow-up for https://bugs.webkit.org/show_bug.cgi?id=132121,
        which provided the fix for painting.

        Test: fast/regions/assert-hit-test-multicol-in-region.html

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

2014-07-29  Zalan Bujtas  <zalan@apple.com>

        Cleanup RenderSelectionInfoBase/RenderSelectionInfo/RenderBlockSelectionInfo.
        https://bugs.webkit.org/show_bug.cgi?id=135326

        Reviewed by Darin Adler.

        1. Move implementation to RenderSelectInfo.cpp
        2. RenderSelectionInfoBase/RenderSelectionInfo/RenderBlockSelectionInfo take Render* reference.
        3. Remove unused functions.
        4. Add RenderSelectionInfoBase::repaintRectangle()

        No change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderSelectionInfo.cpp: Added.
        (WebCore::RenderSelectionInfoBase::RenderSelectionInfoBase):
        (WebCore::RenderSelectionInfoBase::repaintRectangle):
        (WebCore::RenderSelectionInfo::RenderSelectionInfo):
        (WebCore::RenderSelectionInfo::repaint):
        (WebCore::RenderBlockSelectionInfo::RenderBlockSelectionInfo):
        (WebCore::RenderBlockSelectionInfo::repaint):
        * rendering/RenderSelectionInfo.h:
        (WebCore::RenderSelectionInfo::collectedSelectionRects):
        (WebCore::RenderSelectionInfoBase::RenderSelectionInfoBase): Deleted.
        (WebCore::RenderSelectionInfoBase::object): Deleted.
        (WebCore::RenderSelectionInfo::RenderSelectionInfo): Deleted.
        (WebCore::RenderSelectionInfo::repaint): Deleted.
        (WebCore::RenderSelectionInfo::rects): Deleted.
        (WebCore::RenderBlockSelectionInfo::RenderBlockSelectionInfo): Deleted.
        (WebCore::RenderBlockSelectionInfo::repaint): Deleted.
        (WebCore::RenderBlockSelectionInfo::block): Deleted.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::subtreeSelectionBounds):
        (WebCore::RenderView::repaintSubtreeSelection):
        (WebCore::RenderView::clearSubtreeSelection):
        (WebCore::RenderView::applySubtreeSelection):

2014-07-28  Pratik Solanki  <psolanki@apple.com>

        Get SharedBuffer.h out of ResourceBuffer.h (and a few other places)
        https://bugs.webkit.org/show_bug.cgi?id=131782

        Original patch by Tim Horton.
        Reviewed by Darin Adler.

        No new tests because no functional changes.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBCursorBackend.h:
        * loader/ios/DiskImageCacheIOS.h:
        Forward declare SharedBuffer in headers.

        * Modules/indexeddb/IDBRequest.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/icon/IconLoader.cpp:
        * loader/ios/DiskImageCacheIOS.mm:
        * loader/cache/MemoryCache.cpp:
        * loader/mac/ResourceBuffer.mm:
        Include SharedBuffer.h in implementation files.

        * Modules/notifications/Notification.h:
        * loader/appcache/ApplicationCacheGroup.h:
        Remove unnecessary includes.

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::adoptSharedBuffer):
        * loader/ResourceBuffer.h:
        Out-of-line adoptSharedBuffer so that the PassRefPtr doesn't require including SharedBuffer.h.

        * platform/graphics/opentype/OpenTypeMathData.cpp:
        * platform/graphics/opentype/OpenTypeMathData.h:
        Out-of-line destructor to avoid requiring SharedBuffer.h for the RefPtr.
        Forward-declare SharedBuffer in the header, include in implementation.

2014-07-29  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] GraphicsLayerTextureMapper::addAnimation() box size parameter should be FloatSize
        https://bugs.webkit.org/show_bug.cgi?id=135237

        Reviewed by Martin Robinson.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h: The boxSize parameter of the
        addAnimation() method must be of the same type as the parameter in the base class
        declaration -- a const FloatSize reference. Only then is the base virtual method
        actually overriden.

2014-07-28  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * WebCore.exp.in:

2014-07-28  Dan Bernstein  <mitz@apple.com>

        Introduced CredentialBase and made Credential derive from it
        Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327

        Reviewed by Darin Adler.

        No change in functionality.

        * CMakeLists.txt: Updated for source file rename.

        * WebCore.exp.in: Changed to export CredentialBase symbols.

        * WebCore.vcxproj/WebCore.vcxproj: Updated for source file rename and new header.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/network/Credential.cpp: Renamed to CredentialBase.cpp.

        * platform/network/Credential.h: Defined Credential to derive from CredentialBase.

        * platform/network/CredentialBase.cpp: Renamed Credential.cpp to this. Updated for the new
        name.

        * platform/network/CredentialBase.h: Copied from Credential.h, renamed the class to
        CredentialBase, and made the constructors protected.

2014-07-28  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r164133): Selection disappears after scrolling on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=135361

        Reviewed by Ryosuke Niwa.

        Ensure that when a RenderElement, part of the current selection is removed,
        we recalculate and update the selection soon after layout.

        Test: fast/dynamic/selection-gets-cleared-when-part-of-it-gets-removed.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setNeedsSelectionUpdate):
        (WebCore::FrameSelection::didLayout): didLayout name reflects its functionality better.
        (WebCore::FrameSelection::layoutDidChange): Deleted.
        * editing/FrameSelection.h: : move some functions to private.
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeChildInternal):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):

2014-07-28  Dean Jackson  <dino@apple.com>

        [Media iOS] Touching play button feels unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=135370
        <rdar://problem/17756281>

        Reviewed by Simon Fraser.

        Add an :active rule that shows a slightly darker button when touched.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-start-playback-button:active):

2014-07-28  Brady Eidson  <beidson@apple.com>

        REGRESSION(168376): Standalone images pasted to Outlook 2011 don't display
        <rdar://problem/17768371> and https://bugs.webkit.org/show_bug.cgi?id=135363

        Reviewed by Tim Horton.

        Outlook isn’t prepared to handle the resource load callbacks when sent synchronously.

        r168376 was an optimization that we no longer need, so the simplest fix is to roll it out.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readImage):

        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::ArchiveResource):
        * loader/archive/ArchiveResource.h:
        (WebCore::ArchiveResource::setShouldLoadImmediately): Deleted.
        (WebCore::ArchiveResource::shouldLoadImmediately): Deleted.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2014-07-28  Mark Hahnenberg  <mhahnenberg@apple.com>

        ASSERTION FAILED: m_heap->vm()->currentThreadIsHoldingAPILock()
        https://bugs.webkit.org/show_bug.cgi?id=135352

        Reviewed by Oliver Hunt.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected): This should be taking a 
        JSLock like its sibling methods do (e.g. installReplacement).

2014-07-28  Antti Koivisto  <antti@apple.com>

        <embed> videos flashes constantly while playing inline on iPad, making it unwatchable
        https://bugs.webkit.org/show_bug.cgi?id=135356
        <rdar://problem/16828238>

        Reviewed by Simon Fraser.
        
        The shadow tree for media controls is scheduling style recalc. The general silliness of
        HTMLPlugInImageElement::willRecalcStyle/willDetachRenderers is turning those into render
        tree reconstructions causing flicker.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willRecalcStyle):
        
            Don't do the forced renderer reconstruction if there is no style change for the element
            or its ancestors. This way recalcs scheduled by the shadow tree don't trigger the widget
            update code path.

2014-07-27  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] Paint-on closed captions get out-of-order in Safari
        https://bugs.webkit.org/show_bug.cgi?id=135332
        <rdar://problem/15317278>

        Reviewed by Jer Noble.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): If the
        number of active cues is greater than the current set of CSS boxes representing
        the cues, throw away the CSS boxes and re-layout all the cues.
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue): Add some logging.
        (WebCore::InbandGenericTextTrack::removeGenericCue): Ditto.
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::isOrderedBefore): Revise ordering rules so that we put
        newer cues earlier in the layout order so they are drawn towards the bottom
        of the screen. Only do this for Generic captions.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings): Adjust logging
        messages.
        (WebCore::InbandTextTrackPrivateAVF::removeCompletedCues): Add logging.

2014-07-28  Andreas Kling  <akling@apple.com>

        REGRESSION (r160806): CSS zoom property doesn't work on anything inside anchors.
        <https://webkit.org/b/135344>
        <rdar://problem/17759577>

        When DeprecatedStyleBuilder applies the CSS zoom property (ApplyPropertyZoom)
        it first resets the "effective zoom" by calling RenderStyle::setEffectiveZoom().

        This mechanism was not resistent to being called multiple times, due to the
        optimization in RenderStyle::setZoom() to avoid copy-on-writing the shared data
        when setting some property to the already-set value.

        The bug would happen in this sequence:

        ApplyPropertyZoom:
            - setEffectiveZoom(1);
            - setZoom(2); // this updates the effective zoom
        ApplyPropertyZoom:
            - setEffectiveZoom(1);
            - setZoom(2); // this doesn't update the effective zoom

        When we run the second setZoom(2); call, the RenderStyle's zoom value is 2
        already and we'll early return without updating the effective zoom.

        This change moves the updating of the effective zoom in setZoom() to take place
        before the early return due to overwriting with the same value.

        Note: the fact that we're apply the zoom property twice is an inefficiency that
        we should figure out a way to avoid in the future.

        Reviewed by Simon Fraser.

        Test: fast/css/zoom-inside-link.html

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setZoom):

2014-07-28  Bear Travis  <betravis@adobe.com>

        [CSS Font Loading] Update Font Loading Code
        https://bugs.webkit.org/show_bug.cgi?id=135340

        Reviewed by Antti Koivisto.

        Update the Font Loading code to build again, as trunk has evolved
        since the feature was originally written. Mostly, this requires
        updating the code to work with the new Font representation.

        The original tests were enabled only for the Chromium port.
        They will need to be updated when the feature is enabled by default.

        * WebCore.xcodeproj/project.pbxproj: Add missing files.
        * css/FontLoader.cpp: Update to new Font representation.
        (WebCore::LoadFontCallback::createFromParams):
        (WebCore::LoadFontCallback::~LoadFontCallback):
        (WebCore::FontLoader::loadFont):
        (WebCore::FontLoader::checkFont):
        (WebCore::applyPropertyToCurrentStyle):
        (WebCore::FontLoader::resolveFontStyle):

2014-07-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Let WheelEvent wrap a PlatformWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=135244

        WheelEvent now wraps a PlatformWheelEvent. m_directionInvertedFromDevice, as well as m_phase and m_momentumPhase
        have been removed, since the information is redundant in PlatformWheelEvent. Note that deltaX and deltaY have
        NOT been replaced, since we need double precision instead of float precision.

        Reviewed by Beth Dakin.

        No new tests, since behavior should not have changed.

        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        * dom/WheelEvent.h:
        (WebCore::WheelEvent::wheelEvent): Returns a non-null pointer to the PlatformWheelEvent iff WheelEvent was initialized by PlatformWheelEvent.
        (WebCore::WheelEvent::webkitDirectionInvertedFromDevice): Updated to use PlatformWheelEvent.
        (WebCore::WheelEvent::phase): Updated to use PlatformWheelEvent.
        (WebCore::WheelEvent::momentumPhase): Updated to use PlatformWheelEvent.

2014-07-28  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed 'merge' fix.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        Correct line endings to allow EWS merges again.

2014-07-28  Zoltan Horvath  <zoltan@webkit.org>

        [CSS3-Text] Adjust text-justify implementation to the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=135317

        Reviewed by Darin Adler.

        Text-justify no longer accepts the following values: Inter-ideograph, inter-
        cluster, and kashida. This patch removes them and updates the tests as well.

        [1] http://dev.w3.org/csswg/css-text-3/#propdef-text-justify

        Updated existing tests.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextJustify):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.h:

2014-07-28  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r169105): Crash in selection
        https://bugs.webkit.org/show_bug.cgi?id=134303

        Reviewed by Mihnea Ovidenie.

        When splitting the selection between different subtrees, all subtrees must have their selection cleared before
        starting to apply the new selection. Otherwise, when selecting objects in a named flow thread and going up
        its containing block chain, we can end up in the view's selection root, which has not yet been updated and so
        we get inconsistent data.

        To achieve this goal, the selection update was split into a "clear" and an "apply" method. The updateSelectionForSubtrees
        method first iterates through all subtrees and performs the "clear" method and then starts all over again
        and performs the "apply" method.

        Test: fast/regions/selection/crash-deselect.html

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderSelectionInfo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::updateSelectionForSubtrees): Added, clears and re-applies selection for all selection subtrees.
        (WebCore::RenderView::clearSubtreeSelection): Added, clears selection and returns previously selected information.
        (WebCore::RenderView::applySubtreeSelection): Added, updates the selection status of all objects inside the selection tree, compares old and new data and repaints accordingly.
        (WebCore::RenderView::setSubtreeSelection): Deleted.
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeRoot):
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::OldSelectionData::OldSelectionData):

2014-07-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS: Fix :visited behavior for SubSelectors
        https://bugs.webkit.org/show_bug.cgi?id=135324

        Reviewed by Benjamin Poulain.

        Disable :visited match for the selectors that has SubSelectors.

        Tests: fast/history/nested-visited-test-complex.html
               fast/history/sibling-visited-test-complex.html

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

2014-07-27  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove GraphicsSurfaceGLX.cpp
        https://bugs.webkit.org/show_bug.cgi?id=135279

        Reviewed by Darin Adler.

        GraphicsSurfaceGLX.cpp is not used since Qt dropped and Efl port changed at r146458

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp: Removed.

2014-07-27  Bruno de Oliveira Abinader  <bruno.d@partner.samsung.com>

        Support for :enabled selector on Anchor & Area elements
        https://bugs.webkit.org/show_bug.cgi?id=134826

        Reviewed by Darin Adler.

        Updates the PseudoClassEnabled selector checker to check for Anchor & Area
        elements with a 'href' attribute.

        Spec: http://html.spec.whatwg.org/#selector-enabled

        Test: fast/css/css-selector-enabled-links.html

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isEnabled): Added check for anchor & area elements.

2014-07-27  Daniel Bates  <dabates@apple.com>

        [WK2] Crash when accessing window.localStorage after calling window.close()
        https://bugs.webkit.org/show_bug.cgi?id=135328
        <rdar://problem/17315237>

        Reviewed by Sam Weinig.

        Fixes an issue where accessing local storage for the first time after calling window.close()
        causes a crash.

        For now, we should disallow accessing local storage after calling window.close() regardless of
        whether it's the first access to local storage as this seems like a bad idiom to support. Note,
        this represents a change in behavior from WebKit1. If such usage of window.localStorage turns
        out to be reasonable then we can visit this decision again in <https://bugs.webkit.org/show_bug.cgi?id=135330>.

        Tests: storage/domstorage/localstorage/access-storage-after-window-close.html
               storage/domstorage/localstorage/access-storage-then-set-value-in-storage-after-window-close.html
               storage/domstorage/localstorage/set-value-in-storage-after-window-close.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage): Modified to only return the cached local storage or
        create a new local storage so long as the page isn't being closed. Also, substitute nullptr
        for 0.
        (WebCore::DOMWindow::close): Call Page::setIsClosing() to mark that the page is closing.
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize m_isClosing to false.
        * page/Page.h:
        (WebCore::Page::setIsClosing): Added.
        (WebCore::Page::isClosing): Added.

2014-07-27  Filip Pizlo  <fpizlo@apple.com>

        Merge r170090, r170092, r170129, r170141, r170161, r170215, r170275, r170375, r170376, r170382, r170383, r170399, r170436, r170489, r170490, r170556 from ftlopt.
        
        This fixes the previous mismerge and adds test coverage for the thing that went wrong.
        Also, this adds some helpers for making it easier to inspect JavaScript values.

        * testing/Internals.cpp:
        (WebCore::Internals::description):
        * testing/Internals.h:
        * testing/Internals.idl:

    2014-07-25  Mark Lam  <mark.lam@apple.com>
    
            [ftlopt] Renamed DebuggerActivation to DebuggerScope.
            <https://webkit.org/b/134273>
    
            Reviewed by Michael Saboff.
    
            No new tests.
    
            * ForwardingHeaders/debugger/DebuggerActivation.h: Removed.
            - Removed because this is not used.
    
2014-07-26  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: log and enforce session/segment state machine transitions
        https://bugs.webkit.org/show_bug.cgi?id=135224

        Reviewed by Timothy Hatcher.

        For debugging purposes, log session and segment state transitions.
        Assert that segment state transitions are valid.

        No new tests. No behavior was changed.

        * replay/ReplayController.cpp:
        (WebCore::logDispatchedDOMEvent):
        (WebCore::sessionStateToString):
        (WebCore::segmentStateToString):
        (WebCore::ReplayController::setSessionState):
        (WebCore::ReplayController::setSegmentState):
        (WebCore::ReplayController::createSegment):
        (WebCore::ReplayController::completeSegment): Remove a wrong state transition.
        (WebCore::ReplayController::loadSegmentAtIndex):
        (WebCore::ReplayController::unloadSegment): Fix a now-erroneous assertion.
        (WebCore::ReplayController::startPlayback):
        (WebCore::ReplayController::pausePlayback):
        (WebCore::ReplayController::willDispatchEvent):
        (WebCore::ReplayController::cancelPlayback):
        * replay/ReplayController.h:

2014-07-26  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r171641-r171644. It broke some tests; will investigate and
        reland later.

        * ForwardingHeaders/debugger/DebuggerActivation.h: Added.

2014-07-26  Timothy Horton  <timothy_horton@apple.com>

        Crash in Web Content Process under ~PDFDocument under clearTouchEventListeners at topDocument()
        https://bugs.webkit.org/show_bug.cgi?id=135319
        <rdar://problem/17315168>

        Reviewed by Darin Adler and Antti Koivisto.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::prepareForDestruction):
        Add a flag on Document, m_hasPreparedForDestruction, which ensures
        that each Document only goes through prepareForDestruction() once.
        prepareForDestruction() can be called a number of times during teardown,
        but it's only necessary to actually execute it once.
        
        This was previously achieved by virtue of all callers of prepareForDestruction()
        first checking hasLivingRenderTree, and prepareForDestruction() tearing down
        the render tree, but that meant that prepareForDestruction() was not called
        for Documents who never had a render tree in the first place.

        The only part of prepareForDestruction() that is now predicated on hasLivingRenderTree()
        is the call to destroyRenderTree(); the rest of the function has the potential to be relevant
        for non-rendered placeholder documents and can safely deal with them in other ways.

        It is important to call prepareForDestruction() on non-rendered placeholder documents
        because some of the cleanup (like disconnectFromFrame()) is critical to safe destruction.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        Call prepareForDestruction() even if we don't have a living render tree.
        For the sake of minimizing change, removeFocusedNodeOfSubtree still
        depends on having a living render tree before calling prepareForDestruction().

        * page/Frame.cpp:
        (WebCore::Frame::setView):
        (WebCore::Frame::setDocument):
        Call prepareForDestruction() even if we don't have a living render tree.

2014-07-25  Filip Pizlo  <fpizlo@apple.com>

        Merge r170090, r170092, r170129, r170141, r170161, r170215, r170275, r170375, r170376, r170382, r170383, r170399, r170436, r170489, r170490, r170556 from ftlopt.

    2014-07-25  Mark Lam  <mark.lam@apple.com>
    
            [ftlopt] Renamed DebuggerActivation to DebuggerScope.
            <https://webkit.org/b/134273>
    
            Reviewed by Michael Saboff.
    
            No new tests.
    
            * ForwardingHeaders/debugger/DebuggerActivation.h: Removed.
            - Removed because this is not used.
    
2014-07-25  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Rounded rect gets non-renderable at certain subpixel size.
        https://bugs.webkit.org/show_bug.cgi?id=135314
        <rdar://problem/17812921>

        Reviewed by Tim Horton.

        While calculating the rounded rect for painting, the radius is adjusted to compensate
        for the pixel snapped size. However while scaling the radius, certain values overflow
        (float) mantissa and it produces a non-renderable rounded rect where the radius becomes bigger
        than the rectangle dimensions. In such cases, we need to shrink the radius to make it
        renderable again.

        Test: transitions/rounded-rect-becomes-non-renderable-while-transitioning.html

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting): shrink the radius by
        one device pixel. It is as good as any other small value.

2014-07-25  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] CDM error messages not piped through to MediaKeySession correctly; clients don't receive error events
        https://bugs.webkit.org/show_bug.cgi?id=135312
        <rdar://problem/17817223>

        Reviewed by Brent Fulgham.

        Set (and clear) the client interface so that errors can be piped from the CDMSession up to the MediaKeySession.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::close):

2014-07-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Playback stalls & readyState drops to HAVE_CURRENT_DATA at end of stream with unbalanced buffered SourceBuffers
        https://bugs.webkit.org/show_bug.cgi?id=135291
        <rdar://problem/17715503>

        Reviewed by Sam Weinig.

        Test: media/media-source/media-source-end-of-stream-buffered.html

        When determining the correct ReadyState for the MediaSource in monitorSourceBuffers(), use the same
        definition of "buffered" as is used in the calculation of HTMLMediaElement.buffered and in the
        Stream Ended algorithm. Namely, when the stream has ended, treat each SourceBuffer as if its last
        buffered range extends to the duration of the stream. This allows playback to continue through to
        the duration without stalling due to monitorSourceBuffers().

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::bufferedAccountingForEndOfStream): Added; extends the last range in buffered
            to MediaSource::duration() if the MediaSource is ended.
        (WebCore::SourceBuffer::hasCurrentTime): Uses bufferedAccountingForEndOfStream().
        (WebCore::SourceBuffer::hasFutureTime): Ditto.
        (WebCore::SourceBuffer::canPlayThrough): Ditto.
        * Modules/mediasource/SourceBuffer.h:

        Add a convenience method for determining whether the MediaSource has ended:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isEnded):
        * Modules/mediasource/MediaSource.h:

        Add start() and end() methods that don't take a (usually ignored) isValid inout parameter. Add duration()
        and maximumBufferedTime() convenience methods:
        * platform/graphics/PlatformTimeRanges.cpp:
        (WebCore::PlatformTimeRanges::start):
        (WebCore::PlatformTimeRanges::end):
        (WebCore::PlatformTimeRanges::duration):
        (WebCore::PlatformTimeRanges::maximumBufferedTime):
        * platform/graphics/PlatformTimeRanges.h:

2014-07-25  Pratik Solanki  <psolanki@apple.com>

        [iOS] REGRESSION(r171526): Images fail to load sometimes
        https://bugs.webkit.org/show_bug.cgi?id=135304
        <rdar://problem/17811922>

        Reviewed by Alexey Proskuryakov.

        SharedBuffer::createCFData() calls data() as a way to coalesce the data array elements and
        segments into m_buffer. However, data() has an optimization where if we had a single element
        in the data array, it would just return that and not do coalescing. So when we passed
        m_buffer to WebCoreSharedData, we passed a buffer with no data in it.

        Fix this by bringing the optimization to createCFData() and return the CFDataRef from the
        data array if we just have a single element.

        No new tests. Should be covered by existing tests.

        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):

2014-07-25  Jer Noble  <jer.noble@apple.com>

        [MSE] High CPU usage in SampleMap::findSamplesWithinPresentationRange() with a large number of buffered samples.
        https://bugs.webkit.org/show_bug.cgi?id=135247

        Reviewed by Geoffrey Garen.

        Anchor our search for overlapping frames to the end of the search range when the overlap range is sufficiently
        close to the end of the search range. The common case for this search is when a sample is about to be appended
        to the end of the sample queue, so this should turn most searches into no-ops.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::PresentationOrderSampleMap::findSamplesWithinPresentationRangeFromEnd):
        * Modules/mediasource/SampleMap.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2014-07-25  Gavin Barraclough  <baraclough@apple.com>

        Yosemite version number is 101000
        https://bugs.webkit.org/show_bug.cgi?id=135301

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * platform/ContentFilter.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformVisibleContentRect):
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::paintToggleButton):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::resourcePrioritiesEnabled):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::search):

2014-07-25  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] RenderViews paginated as RL or LR don't handle percentage widths correctly.
        REGRESSION: Images don’t scale to fit in page in vertical text books

        https://bugs.webkit.org/show_bug.cgi?id=135204
        <rdar://problem/17043792>
        
        Reviewed by Simon Fraser.

        Added fast/multicol/pagination/RightToLeft-max-width.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight):
        Put back in the same code that used to exist for the old columns (but ported to the new
        columns).
    
2014-07-25  Dan Bernstein  <mitz@apple.com>

        [Mac] Unneeded MobileMe workaround in ResourceHandle::receivedCredential
        https://bugs.webkit.org/show_bug.cgi?id=135297

        Reviewed by Alexey Proskuryakov.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedCredential): Removed the site-specific behavior for
        gallery.me.com.

2014-07-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r171480.
        https://bugs.webkit.org/show_bug.cgi?id=135300

        it broke replaced elements in pagination (Requested by dhyatt_
        on #webkit).

        Reverted changeset:

        "Ensure we compute the min and max height of replaced elements
        to 'none' or 0 when appropriate."
        https://bugs.webkit.org/show_bug.cgi?id=135181
        http://trac.webkit.org/changeset/171480

2014-07-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r171587.
        https://bugs.webkit.org/show_bug.cgi?id=135294

        Made fast/dom/HTMLObjectElement/beforeload-set-text-
        crash.xhtml crash again (Requested by ap on #webkit).

        Reverted changeset:

        "REGRESSION (r169105): Crash in selection"
        https://bugs.webkit.org/show_bug.cgi?id=134303
        http://trac.webkit.org/changeset/171587

2014-07-25  Dan Bernstein  <mitz@apple.com>

        ResourceErrorBase::compare doesn’t call the right platformCompare override
        https://bugs.webkit.org/show_bug.cgi?id=135240

        Reviewed by Alexey Proskuryakov.

        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::compare): Changed to call ResourceError::platformCompare.
        * platform/network/cf/ResourceError.h: Made platformCompare public.
        * platform/network/soup/ResourceError.h: Ditto.

2014-07-25  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WebProtectionSpace::receivesCredentialSecurely incorrectly returns false in some cases
        https://bugs.webkit.org/show_bug.cgi?id=135241

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Export ProtectionSpace::receivesCredentialSecurely.

        * platform/network/cocoa/ProtectionSpaceCocoa.h: Declare override of receivesCredentialSecurely.
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::ProtectionSpace::receivesCredentialSecurely): Use -[NSURLProtectionSpace receivesCredentialSecurely].

2014-07-25  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: iOS video playback controls look blurry.
        https://bugs.webkit.org/show_bug.cgi?id=135245
        <rdar://problem/16878037>

        Reviewed by Simon Fraser.

        This patch introduces a compositing parent of the overlay control panel so that
        the transformed overlay panel becomes sharp. This is a workaround for webkit.org/b/135246.

        Can't find a way to test it yet.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-controls-panel-composited-parent):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.addControls):
        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-panel-composited-parent):
        * Modules/mediacontrols/mediaControlsiOS.js: This is a workaround for webkit.org/b/135248
        It pushes the overlay panel down to close the gap with the video element. Since the
        panel's size in css pixels is scale dependent, the gap needs to be scale dependent too.
        (ControllerIOS.prototype.set pageScaleFactor):

2014-07-24  Dirk Schulze  <krit@webkit.org>

        Turn x/y to presentation attributes
        https://bugs.webkit.org/show_bug.cgi?id=135215

        Reviewed by Dean Jackson.

        This follows the patch for width and height presentation attributes and
        turns x and y to presentation attributes as well:

        http://trac.webkit.org/changeset/171341

        Tests: svg/css/parse-length.html
               transitions/svg-layout-transition.html

        Added copyright where I forgot it in previous patch.

        * css/CSSComputedStyleDeclaration.cpp: Computed style of x and y.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID): Add x and y to list.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Resolve x and y.
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue): Parse x and y property.
        * css/SVGCSSPropertyNames.in: Add x and y to list of names.
        * css/StyleResolver.h:
        * page/animation/CSSPropertyAnimation.cpp: Animate x and y as Length.
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.h: Add x and y setters and getters.
        * rendering/style/SVGRenderStyle.cpp: Add x and y setters for StyleLayoutData.
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator==):
        (WebCore::SVGRenderStyle::copyNonInheritedFrom):
        (WebCore::SVGRenderStyle::diff):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setX):
        (WebCore::SVGRenderStyle::setY):
        (WebCore::SVGRenderStyle::x):
        (WebCore::SVGRenderStyle::y):
        * rendering/style/SVGRenderStyleDefs.cpp: Add StyleLayoutData for style storing.
        (WebCore::StyleLayoutData::StyleLayoutData):
        (WebCore::StyleLayoutData::copy):
        (WebCore::StyleLayoutData::operator==):
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::StyleLayoutData::create):
        (WebCore::StyleLayoutData::operator!=):
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        * rendering/svg/SVGPathData.cpp: Use RenderStyle values rather than attribute values.
        (WebCore::updatePathFromRectElement):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isTargetAttributeCSSProperty): Fix text detection.
        * svg/SVGElement.cpp: Add x and y to the relevant property lists.
        (WebCore::populateAttributeNameToCSSPropertyIDMap):
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        * svg/SVGFilterElement.cpp: Style update on change of x and y.
        (WebCore::SVGFilterElement::svgAttributeChanged):
        * svg/SVGMaskElement.cpp: Ditto.
        (WebCore::SVGMaskElement::svgAttributeChanged):
        * svg/SVGPatternElement.cpp: Ditto.
        (WebCore::SVGPatternElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp: Ditto.
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.cpp: Exclude x and y of text elements since they
            are lists instead of individual values. Solution about to be discussed
            in the WG. Keep current behavior for now.
        (WebCore::SVGTextPositioningElement::collectStyleForPresentationAttribute):
        (WebCore::SVGTextPositioningElement::isPresentationAttribute):
        * svg/SVGTextPositioningElement.h:

2014-07-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Implement Pseudo Element
        https://bugs.webkit.org/show_bug.cgi?id=134835

        Reviewed by Benjamin Poulain.

        Implement Pseudo Element handling for CSS JIT SelectorCompiler.
        At first, we start with the simple implementation. We handle limited number of pseudo element,
        before, after, first-line, first-letter.

        Tests: fast/selectors/pseudo-element-inside-any.html
               fast/selectors/querySelector-pseudo-element-inside-functional-pseudo-class-any.html
               fast/selectors/querySelector-pseudo-element-inside-functional-pseudo-class-not.html
               fast/selectors/querySelector-pseudo-element.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::loadCheckingContext):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::branchOnResolvingModeWithCheckingContext):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::branchOnResolvingMode):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::jumpIfNotResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRequestedPseudoElementEqualsToSelectorPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateMarkPseudoStyleForPseudoElement):
        * cssjit/SelectorCompiler.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2014-07-24  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r169105): Crash in selection
        https://bugs.webkit.org/show_bug.cgi?id=134303

        Patch by Radu Stavila <stavila@adobe.com> on 2014-07-24
        Reviewed by David Hyatt.

        When splitting the selection between different subtrees, all subtrees must have their selection cleared before
        starting to apply the new selection. Otherwise, when selecting objects in a named flow thread and going up
        its containing block chain, we can end up in the view's selection root, which has not yet been updated and so
        we get inconsistent data.

        To achieve this goal, the selection update was split into a "clear" and an "apply" method. The updateSelectionForSubtrees
        method first iterates through all subtrees and performs the "clear" method and then starts all over again
        and performs the "apply" method.

        Test: fast/regions/selection/crash-deselect.html

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderSelectionInfo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::updateSelectionForSubtrees): Added, clears and re-applies selection for all selection subtrees.
        (WebCore::RenderView::clearSubtreeSelection): Added, clears selection and returns previously selected information.
        (WebCore::RenderView::applySubtreeSelection): Added, updates the selection status of all objects inside the selection tree, compares old and new data and repaints accordingly.
        (WebCore::RenderView::setSubtreeSelection): Deleted.
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeRoot):
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::OldSelectionData::OldSelectionData):

2014-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r164401): Placing a caret doesn't bring up autocorrection panel
        https://bugs.webkit.org/show_bug.cgi?id=135278

        Reviewed by Tim Horton.

        The bug was caused by editorUIUpdateTimerFired calling respondToChangedSelection only if the selection was
        triggered by dictation instead of only if it was NOT triggered by dictation.

        Prior to r164401, AlternativeTextController::respondToMarkerAtEndOfWord exited early when SetSelectionOptions
        had DictationTriggered set. r164401 intended to move this check to editorUIUpdateTimerFired to avoid passing
        options around but the boolean condition was erroneously flipped.

        Fixed the bug by negating the condition in editorUIUpdateTimerFired.

        No new tests for now since autocorrection panel cannot be tested automatically. (We should really automate this!)

        * editing/Editor.cpp:
        (WebCore::Editor::editorUIUpdateTimerFired):

2014-07-24  Pratik Solanki  <psolanki@apple.com>

        REGRESSION(r171526): [GTK] Massive crashes.
        https://bugs.webkit.org/show_bug.cgi?id=135283

        Unreviewed. GTK build fix after r171526. Initialize m_buffer in SharedBuffer constructor.

        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::SharedBuffer):

2014-07-24  Tim Horton  <timothy_horton@apple.com>

        Crashes under scanSelectionForTelephoneNumbers in Range::text() on some sites
        https://bugs.webkit.org/show_bug.cgi?id=135281
        <rdar://problem/17803347>

        Reviewed by Ryosuke Niwa.

        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        toNormalizedRange is not guaranteed to return a non-null range.
        If it returns null, pass the empty markedRanges down to the client as our new set.

2014-07-24  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/17593701> Assertion failure in WebPage::reload (!m_pendingNavigationID) when reloading after a same-document back navigation
        https://bugs.webkit.org/show_bug.cgi?id=135129

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported equalIgnoringFragmentIdentifier(const URL&, const URL&).

2014-07-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK1] CSS viewport units use the wrong viewport size in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=135254
        <rdar://problem/17781423>

        Reviewed by Tim Horton.

        Test: fast/css/viewport-units-dynamic.html
        
        In WebKit1 on iOS, we want to resolve viewport units against the visible
        viewport, not the legacy WK1 notion of the "viewport" which is the entire document.
        
        Fixes rendering of medium.com articles in WK1 views on iPad.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportSizeForCSSViewportUnits):

2014-07-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash when measuring a glyphs from a fallback SVG font
        https://bugs.webkit.org/show_bug.cgi?id=135264

        Reviewed by Simon Fraser.

        We can't realize font data for all fallback fonts ahead
        of time, but we don't have all the necessary context to
        realize SVG fallback data when it's needed. For now, we
        can just bail; however, a larger, more invasive fix is
        in order.

        Test: svg/text/svg-fallback-font-crash.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms):

2014-07-24  Daniel Bates  <dabates@apple.com>
            And Alexey Proskuryakov  <ap@apple.com>

        [iOS] REGRESSION (WebKit2): Can't login to Wordpress.com, facebook.com when always allowing cookies
        https://bugs.webkit.org/show_bug.cgi?id=135273
        <rdar://problem/17598815>

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where cookies may be created in the wrong cookie store.

        Currently, when we update the CFURLRequest object associated with a ResourceRequest object
        we explicitly set a cookie storage, cookie accept policy, and SSL properties based on the
        corresponding values in the old CFURLRequest object (if we have one). This ultimately leads
        to CFNetwork associating the cookies for the request with a different cookie store when we
        handle the request in the NetworkProcess. Instead, we shouldn't set these properties
        explicitly as we already copy them implicitly earlier (via CFURLRequestCreateMutableCopy()).

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2014-07-24  Peyton Randolph  <prandolph@apple.com>

        Rename feature flag for long-press gesture on Mac.                                                                   
        https://bugs.webkit.org/show_bug.cgi?id=135259                                                                  

        Reviewed by Beth Dakin.

        * Configurations/FeatureDefines.xcconfig:
        Rename LINK_LONG_PRESS to MAC_LONG_PRESS.

2014-07-24  Dan Bernstein  <mitz@apple.com>

        Fixed Windows build fix.

        * platform/network/cf/AuthenticationCF.cpp:

2014-07-24  Dan Bernstein  <mitz@apple.com>

        Attempted Windows build fix.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):
        * platform/network/cf/ProtectionSpaceCFNet.cpp:
        (WebCore::ProtectionSpace::receivesCredentialSecurely):
        (WebCore::ProtectionSpaceBase::receivesCredentialSecurely): Deleted.

2014-07-24  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17766348> [Cocoa] WebCore::ProtectionSpace doesn’t preserve all NSURLProtectionSpace properties, such as the distinguishedNames array
        https://bugs.webkit.org/show_bug.cgi?id=135229

        Reviewed by Alexey Proskuryakov.

        * CMakeLists.txt: Updated for rename of a source file.

        * WebCore.exp.in: Updated.

        * WebCore.vcxproj/WebCore.vcxproj: Updated for rename of source files, added
        ProtectionSpaceCFNet.{cpp,h}.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

        * WebCore.xcodeproj/project.pbxproj: Updated for rename of source files, added
        ProtectionSpaceCococa.{h.mm}.

        * platform/network/ProtectionSpace.cpp: Renamed to ProtectionSpaceBase.cpp.
        * platform/network/ProtectionSpace.h: This file was renamed to ProtectionSpaceBase.h, and
        in its place added a generic ProtectionSpace class that just derives from
        ProtectionSpaceBase. For Cocoa and CFNetwork, ProtectionSpace{Cocoa,CFNet}.h is included
        instead of the generic class.

        * platform/network/ProtectionSpaceBase.cpp: Renamed ProtectionSpace.cpp to this.
        (WebCore::ProtectionSpaceBase::ProtectionSpaceBase): Updated for rename.
        (WebCore::ProtectionSpaceBase::host): Ditto.
        (WebCore::ProtectionSpaceBase::port): Ditto.
        (WebCore::ProtectionSpaceBase::serverType): Ditto.
        (WebCore::ProtectionSpaceBase::isProxy): Ditto.
        (WebCore::ProtectionSpaceBase::realm): Ditto.
        (WebCore::ProtectionSpaceBase::authenticationScheme): Ditto.
        (WebCore::ProtectionSpaceBase::receivesCredentialSecurely): Removed CFNetwork-specific part,
        which is now implemented in ProtectionSpaceCFNet.cpp.
        (WebCore::ProtectionSpaceBase::compare): Replaced operator== with this, and made it call
        ProtectionSpace::platformCompare at the end if needed.

        * platform/network/ProtectionSpaceBase.h: Renamed ProtectionSpace.h to this.
        (WebCore::ProtectionSpaceBase::encodingRequiresPlatformData): Added with a default
        implementation that returns false, for ProtectionSpace implementations to override.
        (WebCore::ProtectionSpaceBase::platformCompare): Added with a default implementation that
        returns true, for ProtectionSpace implementations to override.
        (WebCore::operator==): Changed to call compare.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Changed to use the
        ProtectionSpace constructor that takes a CFURLProtectionSpaceRef.
        (WebCore::createCF): Changed to use ProtectionSpace::cfSpace.

        * platform/network/cf/AuthenticationCF.h: Guarded a couple of functiosn that aren’t used in
        Cocoa with #if PLATFORM(WIN).

        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage): Changed to use
        ProtectionSpace::cfSpace.
        (WebCore::CredentialStorage::saveToPersistentStorage): Ditto.

        * platform/network/cf/ProtectionSpaceCFNet.cpp: Added.
        (WebCore::ProtectionSpaceBase::receivesCredentialSecurely): Override with the
        CFNetwork-specific test that was previously in ProtectionSpace.cpp.

        * platform/network/cf/ProtectionSpaceCFNet.h: Copied from Source/WebCore/platform/network/ProtectionSpace.h.
        Declare ProtectionSpace and override receivesCredentialSecurely.

        * platform/network/mac/AuthenticationMac.h: Deleted the ProtectionSpace core() and mac().
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Changed to use the
        ProtectionSpace constructor that takes an NSURLProtectionSpace.
        (WebCore::mac): Changed to use ProtectionSpace::nsSpace.

        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::getFromPersistentStorage): Ditto.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedCredential): Changed to use the ProtectionSpace
        constructor that takes an NSURLProtectionSpace.

        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        Ditto.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        Ditto.

2014-07-24  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Fixed/Sticky layers can get mispositioned when the layer tree commit change their position or size
        https://bugs.webkit.org/show_bug.cgi?id=135227
        <rdar://problem/17279500>

        Reviewed by Simon Fraser.

        Keep track of the creation/destruction of Fixed and Sticky nodes in the ScrollingTree.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasFixedOrSticky):
        (WebCore::ScrollingTree::fixedOrStickyNodeAdded):
        (WebCore::ScrollingTree::fixedOrStickyNodeRemoved):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        (WebCore::ScrollingTreeFixedNode::~ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):
        (WebCore::ScrollingTreeStickyNode::~ScrollingTreeStickyNode):

2014-07-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Let WheelEvent wrap a PlatformWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=135244

        When WheelEvent is initialized with a PlatformWheelEvent, store that PlatformWheelEvent for future use.

        Reviewed by Beth Dakin.

        No new tests because behavior should not have changed.

        * dom/WheelEvent.cpp: Added method to access the PlatformWheelEvent.
        (WebCore::WheelEvent::WheelEvent):
        * dom/WheelEvent.h: Added field to store PlatformWheelEvent, if initialized via PlatformWheelEvent.
        (WebCore::WheelEvent::wheelEvent):

2014-07-24  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: don't encode/decode primitive types that lack explicit sizes
        https://bugs.webkit.org/show_bug.cgi?id=133430

        Reviewed by Anders Carlsson.

        Remove uses of unsigned long in encode/decode methods because the type lacks an
        explicit size. Move frame index serialization away from using unsigned long.

        * replay/ReplayController.cpp:
        (WebCore::logDispatchedDOMEvent): Fix the format string.
        * replay/SerializationMethods.cpp:
        (WebCore::frameIndexFromDocument):
        (WebCore::frameIndexFromFrame):
        (WebCore::documentFromFrameIndex):
        (WebCore::frameFromFrameIndex):
        (JSC::EncodingTraits<PluginData>::encodeValue):
        (JSC::EncodingTraits<PluginData>::decodeValue):
        * replay/SerializationMethods.h:
        * replay/WebInputs.json: Remove primitive types without explicit sizes.

2014-07-24  Pratik Solanki  <psolanki@apple.com>

        Sharing SharedBuffer between WebCore and ImageIO is racy and crash prone
        https://bugs.webkit.org/show_bug.cgi?id=135069
        <rdar://problem/17470655>

        Reviewed by Simon Fraser.

        When passing image data to ImageIO for decoding, we pass an NSData subclass that is a wraper
        around SharedBuffer. This can be a problem when ImageIO tries to access the data on the CA
        thread. End result is data corruption on large image loads and potential crashes. The fix is
        to have SharedBuffer create a copy of its data if the data has been passed to ImageIO and
        might be accessed concurrently.

        Since Vector is not refcounted, we do this by having a new refcounted object in SharedBuffer
        that contains the buffer and we pass that in our NSData subclass WebCoreSharedBufferData.
        Code that would result in the Vector memory moving e.g. append(), resize(), now checks to
        see if the buffer was shared and if so, will create a new copy of the vector. This ensures
        that the main thread does not end up invalidating the vector memory that we have passed it
        to ImageIO.

        No new tests because no functional changes.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::makePurgeable):
            Remove early return - createPurgeableMemory() has the correct check now.
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::adoptVector):
        (WebCore::SharedBuffer::createPurgeableBuffer):
            Don't create purgeable buffer if we are sharing the buffer.
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::copy):
        (WebCore::SharedBuffer::duplicateDataBufferIfNecessary): Added.
            Create a new copy of the data if we have shared the buffer and if appending to it would
            exceed the capacity of the vector resulting in memmove.
        (WebCore::SharedBuffer::appendToInternalBuffer): Added.
        (WebCore::SharedBuffer::clearInternalBuffer): Added.
        (WebCore::SharedBuffer::buffer):
            Create a new copy of the buffer if we have shared it.
        (WebCore::SharedBuffer::getSomeData):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::singleDataArrayBuffer):
        (WebCore::SharedBuffer::maybeAppendDataArray):
        * platform/mac/SharedBufferMac.mm:
            Pass the InternalBuffer object to WebCoreSharedBufferData
        (-[WebCoreSharedBufferData dealloc]):
        (-[WebCoreSharedBufferData initWithSharedBufferInternalBuffer:]):
        (-[WebCoreSharedBufferData length]):
        (-[WebCoreSharedBufferData bytes]):
        (WebCore::SharedBuffer::createNSData):
            Call createCFData() instead of duplicating code.
        (WebCore::SharedBuffer::createCFData):
            If the data is in purgeable memory, make a copy of it since m_buffer was cleared when
            creating the purgeable buffer.
        (-[WebCoreSharedBufferData initWithSharedBuffer:]): Deleted.

2014-07-24  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Enable file logging.
        https://bugs.webkit.org/show_bug.cgi?id=135202

        Reviewed by Alex Christensen.

        The Curl api offers the possibility to write log messages to file. Enable this for debugging purposes.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/ResourceHandleManager.h:

2014-07-24  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Sort WebCore.exp.in after r171252
        https://bugs.webkit.org/show_bug.cgi?id=135239

        Reviewed by Csaba Osztrogonác.

        * WebCore.exp.in:

2014-07-24  Mihnea Ovidenie  <mihnea@adobe.com>

        [New Multicolumn] Assertion failure when an input element has multicolumn style
        https://bugs.webkit.org/show_bug.cgi?id=135234

        Reviewed by Andrei Bucur.

        Restrict the assertion in RenderBlock::canComputeRegionRangeForBox
        only to RenderNamedFlowThread objects since for RenderMultiColumnFlowThread
        objects we can compute a range of regions during their parent block layout.   

        Test: fast/multicol/newmulticol/input-as-multicol.html

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

2014-07-23  Jeremy Jones  <jeremyj@apple.com>

        Transparent fullscreen background when video is not present.
        https://bugs.webkit.org/show_bug.cgi?id=135226

        Reviewed by Simon Fraser.

        Set background to black just before beginning the animation to fullscreen.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): set background color black.

2014-07-23  Joseph Pecoraro  <pecoraro@apple.com>

        ScriptController::updateDocument ASSERT mutating map while iterating map
        https://bugs.webkit.org/show_bug.cgi?id=135211

        Reviewed by Oliver Hunt.

        Avoid iterating over m_windowShells in more places. This prevents
        the possibility of a collection during JSC allocation which might
        cause a mutation to m_windowShells (HTMLMediaElement destruction).

        Have ScriptController defriend ScriptCachedFrameData by providing
        a getter for the list of window shells.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::windowShells):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::updateDocument):
        * bindings/js/ScriptController.h:

2014-07-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r171498.
        https://bugs.webkit.org/show_bug.cgi?id=135223

        It will regress some scroll position restoration on navigation
        (r167916). (Requested by smfr on #webkit).

        Reverted changeset:

        "[iOS WK2] Header bar on nytimes articles lands in the wrong
        place after rubberbanding"
        https://bugs.webkit.org/show_bug.cgi?id=135221
        http://trac.webkit.org/changeset/171498

2014-07-23  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r171376): Sometimes we detect less than the whole phone number
        https://bugs.webkit.org/show_bug.cgi?id=135220
        <rdar://problem/17783423>

        Reviewed by Brady Eidson.

        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        Use the visible selection's start and end instead of base and extent, because they'll
        always be in the right order in the case of a directional selection (base can be *after* extent
        if you select from right to left). This fixes the code that expands the selection.

        Pass the *entire* expanded selection to DataDetectors, instead of using TextIterator.
        This way, we will find each number only once, and will never get part of a phone number once
        and then the whole phone number later.

2014-07-23  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Header bar on nytimes articles lands in the wrong place after rubberbanding
        https://bugs.webkit.org/show_bug.cgi?id=135221

        Reviewed by Tim Horton.

        Add a function on GraphicsLayer to force a flush of the layer position
        to the underlying graphics system, so that when layers cease being
        scroll-coordinated, we can ensure that their layers are repositioned
        in the correct location.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::forcePositionUpdate):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::forcePositionUpdate):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):

2014-07-23  Pratik Solanki  <psolanki@apple.com>

        Get rid of SharedBuffer::NSDataRetainPtrWithoutImplicitConversionOperator
        https://bugs.webkit.org/show_bug.cgi?id=135219

        Reviewed by Anders Carlsson.

        No new tests because no functional changes.

        * loader/ResourceBuffer.h:
        * loader/mac/ResourceBuffer.mm:
        (WebCore::ResourceBuffer::createNSData):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::NSDataRetainPtrWithoutImplicitConversionOperator::NSDataRetainPtrWithoutImplicitConversionOperator): Deleted.
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createNSData):

2014-07-23  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Cleanup RenderLayerCompositor::deviceScaleFactor()
        https://bugs.webkit.org/show_bug.cgi?id=135208

        Reviewed by Simon Fraser.

        Use m_renderView.document() to retrieve device scale factor value. m_renderView.document()
        is always available while this->page() is not.

        No change in behavior.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateTransform):
        (WebCore::RenderLayerBacking::computeTransformOriginForPainting):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::deviceScaleFactor):

2014-07-23  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Gstreamer rendering is not working.
        https://bugs.webkit.org/show_bug.cgi?id=135201

        Reviewed by Alex Christensen.

        WinCairo does not support accelerated rendering yet.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsAcceleratedRendering):

2014-07-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r171455.
        https://bugs.webkit.org/show_bug.cgi?id=135209

        completely broke selection highlight invalidation (Requested
        by thorton on #webkit).

        Reverted changeset:

        "REGRESSION (r169105): Crash in selection"
        https://bugs.webkit.org/show_bug.cgi?id=134303
        http://trac.webkit.org/changeset/171455

2014-07-23  Alex Christensen  <achristensen@webkit.org>

        Compile window-inactive and fullscreen pseudoclasses in css selectors.
        https://bugs.webkit.org/show_bug.cgi?id=135200

        Reviewed by Benjamin Poulain.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        Removed the check of context.hasSelectionPseudo for a window-inactive pseudoclass.
        Moved logic to SelectorCheckerTestFunctions.h to share with the selector compiler.
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isWindowInactive):
        (WebCore::matchesFullScreenAnimatingFullScreenTransitionPseudoClass):
        (WebCore::matchesFullScreenAncestorPseudoClass):
        (WebCore::matchesFullScreenDocumentPseudoClass):
        Added from SelectorChecker.cpp.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        Added unoptimized pseudoclass cases for window-inactive and fullscreen pseudoclasses.
        Explicitly listed uncompiled pseudoclasses for future work instead of using a default.

2014-07-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use NO_RETURN_DUE_TO_CRASH on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=13519

        Reviewed by Mark Lam.

        * svg/SVGZoomAndPan.h: Add NO_RETURN_DUE_TO_CRASH to
        header so function declarations match implementation.

2014-07-23  Joseph Pecoraro  <pecoraro@apple.com>

        JSDOMWindowShell leaks on pages with media elements
        https://bugs.webkit.org/show_bug.cgi?id=135178

        Reviewed by Oliver Hunt.

        The DOMWindowWorld for HTMLMediaElements with MEDIA_CONTROLS_SCRIPT
        was not getting cleared and removed.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        Iterate over a copy of the values. A sweep / garbage collection caused by
        any JSC allocation during iteration could trigger a mutation of the m_windowShells
        table that was being iterating. So instead iterate a list that won't mutate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        If we had an isolated world, release as much memory as possible.

2014-07-23  Bem Jones-Bey  <bjonesbe@adobe.com>

        Ensure we compute the min and max height of replaced elements to 'none' or 0 when appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=135181

        Reviewed by David Hyatt.

        If a replaced element has a percentage min or max height specified then that height value should
        compute to 'none' for max-height and 0 for min-height when its containing block
        does not have a height 'specified explicitly'.

        This is based on a Blink patch by Robert Hogan.

        Tests: css2.1/20110323/max-height-percentage-003.html
               fast/replaced/max-height-percentage-quirks.html
               fast/replaced/min-height-percentage-quirks.html
               fast/replaced/min-height-percentage.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::logicalHeightComputesAsNone):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        * rendering/RenderBox.h:

2014-07-23  Bem Jones-Bey  <bjonesbe@adobe.com>

        Remove CSS_EXCLUSIONS compile flag and leftover code
        https://bugs.webkit.org/show_bug.cgi?id=135175

        Reviewed by Zoltan Horvath.

        At this point, the CSS_EXCLUSIONS flag guards nothing but some useless
        stubs. This removes the flag and the useless code.

        No new tests, just removing code.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSExclusionsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::cssExclusionsEnabled): Deleted.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setCSSExclusionsEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2014-07-23  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Support abort() in SourceBufferPrivateAVFObjC.
        https://bugs.webkit.org/show_bug.cgi?id=135163

        Reviewed by Brent Fulgham.

        Recreate the parser when asked to abort().

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::abort):

2014-07-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate accessibility/ to using nullptr instead of 0
        https://bugs.webkit.org/show_bug.cgi?id=135185

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::rootObject):
        (WebCore::AXObjectCache::rootObjectForFrame):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::rootObject):
        (WebCore::AXObjectCache::rootObjectForFrame):
        (WebCore::AXObjectCache::rootAXEditableElement):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::AccessibilityImageMapLink):
        (WebCore::AccessibilityImageMapLink::parentObject):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject):
        (WebCore::AccessibilityListBox::elementAccessibilityHitTest):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::AccessibilityListBoxOption):
        (WebCore::AccessibilityListBoxOption::parentObject):
        (WebCore::AccessibilityListBoxOption::listBoxOptionParentNode):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityMockObject.cpp:
        (WebCore::AccessibilityMockObject::AccessibilityMockObject):
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::detach):
        (WebCore::AccessibilityNodeObject::firstChild):
        (WebCore::AccessibilityNodeObject::lastChild):
        (WebCore::AccessibilityNodeObject::previousSibling):
        (WebCore::AccessibilityNodeObject::nextSibling):
        (WebCore::AccessibilityNodeObject::parentObject):
        (WebCore::AccessibilityNodeObject::document):
        (WebCore::AccessibilityNodeObject::anchorElement):
        (WebCore::nativeActionElement):
        (WebCore::AccessibilityNodeObject::actionElement):
        (WebCore::AccessibilityNodeObject::mouseButtonListener):
        (WebCore::AccessibilityNodeObject::labelForElement):
        (WebCore::AccessibilityNodeObject::menuItemElementForMenu):
        (WebCore::AccessibilityNodeObject::menuButtonForMenu):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::detach):
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        (WebCore::AccessibilityObject::findMatchingObjects):
        (WebCore::renderListItemContainerForNode):
        (WebCore::AccessibilityObject::accessibilityObjectForPosition):
        (WebCore::AccessibilityObject::document):
        (WebCore::AccessibilityObject::page):
        (WebCore::AccessibilityObject::documentFrameView):
        (WebCore::AccessibilityObject::anchorElementForNode):
        (WebCore::AccessibilityObject::headingElementForNode):
        (WebCore::AccessibilityObject::firstAnonymousBlockChild):
        (WebCore::AccessibilityObject::element):
        (WebCore::AccessibilityObject::focusedUIElement):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::node):
        (WebCore::AccessibilityObject::renderer):
        (WebCore::AccessibilityObject::selectedRadioButton):
        (WebCore::AccessibilityObject::selectedTabItem):
        (WebCore::AccessibilityObject::accessibilityHitTest):
        (WebCore::AccessibilityObject::firstChild):
        (WebCore::AccessibilityObject::lastChild):
        (WebCore::AccessibilityObject::previousSibling):
        (WebCore::AccessibilityObject::nextSibling):
        (WebCore::AccessibilityObject::parentObjectIfExists):
        (WebCore::AccessibilityObject::observableObject):
        (WebCore::AccessibilityObject::titleUIElement):
        (WebCore::AccessibilityObject::correspondingLabelForControlElement):
        (WebCore::AccessibilityObject::correspondingControlForLabelElement):
        (WebCore::AccessibilityObject::scrollBar):
        (WebCore::AccessibilityObject::anchorElement):
        (WebCore::AccessibilityObject::actionElement):
        (WebCore::AccessibilityObject::widget):
        (WebCore::AccessibilityObject::widgetForAttachmentView):
        (WebCore::AccessibilityObject::activeDescendant):
        (WebCore::AccessibilityObject::mathRadicandObject):
        (WebCore::AccessibilityObject::mathRootIndexObject):
        (WebCore::AccessibilityObject::mathUnderObject):
        (WebCore::AccessibilityObject::mathOverObject):
        (WebCore::AccessibilityObject::mathNumeratorObject):
        (WebCore::AccessibilityObject::mathDenominatorObject):
        (WebCore::AccessibilityObject::mathBaseObject):
        (WebCore::AccessibilityObject::mathSubscriptObject):
        (WebCore::AccessibilityObject::mathSuperscriptObject):
        (WebCore::AccessibilityObject::getScrollableAreaIfScrollable):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::progressElement):
        (WebCore::AccessibilityProgressIndicator::meterElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::renderBoxModelObject):
        (WebCore::AccessibilityRenderObject::firstChild):
        (WebCore::AccessibilityRenderObject::lastChild):
        (WebCore::startOfContinuations):
        (WebCore::childBeforeConsideringContinuations):
        (WebCore::AccessibilityRenderObject::previousSibling):
        (WebCore::AccessibilityRenderObject::nextSibling):
        (WebCore::nextContinuation):
        (WebCore::AccessibilityRenderObject::renderParentObject):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::node):
        (WebCore::AccessibilityRenderObject::labelElementContainer):
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::topRenderer):
        (WebCore::AccessibilityRenderObject::document):
        (WebCore::AccessibilityRenderObject::widget):
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        (WebCore::AccessibilityRenderObject::documentFrameView):
        (WebCore::AccessibilityRenderObject::widgetForAttachmentView):
        (WebCore::AccessibilityRenderObject::rootEditableElementForPosition):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::remoteSVGElementHitTest):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement):
        (WebCore::AccessibilityRenderObject::correspondingLabelForControlElement):
        (WebCore::AccessibilityRenderObject::observableObject):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        (WebCore::AccessibilityRenderObject::detachRemoteSVGRoot):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::setAccessibleName):
        (WebCore::AccessibilityRenderObject::getScrollableAreaIfScrollable):
        (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/AccessibilitySVGRoot.cpp:
        (WebCore::AccessibilitySVGRoot::AccessibilitySVGRoot):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::detach):
        (WebCore::AccessibilityScrollView::scrollBar):
        (WebCore::AccessibilityScrollView::updateScrollbars):
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        (WebCore::AccessibilityScrollView::clearChildren):
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::accessibilityHitTest):
        (WebCore::AccessibilityScrollView::documentFrameView):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::document):
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::AccessibilitySpinButton):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::AccessibilityTable):
        (WebCore::AccessibilityTable::clearChildren):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        (WebCore::AccessibilityTableColumn::headerObjectForSection):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper detach]):
        (-[WebAccessibilityObjectWrapper tableCellParent]):
        (-[WebAccessibilityObjectWrapper tableParent]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]):
        (rendererForView):
        (-[WebAccessibilityObjectWrapper _convertToDOMRange:]):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::detachFromParent):
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase detach]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (CreateCGColorIfDifferent):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (rendererForView):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * accessibility/win/AccessibilityObjectWrapperWin.h:
        (WebCore::AccessibilityObjectWrapper::AccessibilityObjectWrapper):

2014-07-23  Mihnea Ovidenie  <mihnea@adobe.com>

        ASSERTION FAILED: generatingElement() in WebCore::RenderNamedFlowFragment::regionOversetState
        https://bugs.webkit.org/show_bug.cgi?id=135153

        Reviewed by David Hyatt.

        Even though the CSSRegions spec defines the behaviour of a multicolumn region,
        we currently do not support this functionality. This patch ensures that a multicolumn
        element does not become a region. In the future, when we will implement the multicolumn
        as region functionality, http://dev.w3.org/csswg/css-regions/#multi-column-regions, we
        will remove this restriction.

        Test: fast/regions/multicol-as-region-prevented.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded):

2014-07-23  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Avoid building WebCore with ANGLE's OpenGL/EGL headers
        https://bugs.webkit.org/show_bug.cgi?id=135167

        Reviewed by Martin Robinson.

        * CMakeLists.txt: Don't add ANGLE/include to the WebCore_INCLUDE_DIRECTORIES list
        as this results in ANGLE's OpenGL and EGL headers being included, instead of the
        headers that are provided by the system. Only the ANGLESupport library should be built
        with that specific header inclusion path.

2014-07-10  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r169105): Crash in selection
        https://bugs.webkit.org/show_bug.cgi?id=134303

        Reviewed by David Hyatt.

        When splitting the selection between different subtrees, all subtrees must have their selection cleared before
        starting to apply the new selection. Otherwise, when selecting objects in a named flow thread and going up
        its containing block chain, we can end up in the view's selection root, which has not yet been updated and so
        we get inconsistent data.

        To achieve this goal, the selection update was split into a "clear" and an "apply" method. The updateSelectionForSubtrees
        method first iterates through all subtrees and performs the "clear" method and then starts all over again
        and performs the "apply" method.

        Also, the selectionStart/End members in RenderView have been renamed to fix problems caused by the fact that
        RenderView inherits SelectionSubtreeRoot, which also has the same selectionStart/End members.

        Test: fast/regions/selection/crash-deselect.html

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        * rendering/RenderSelectionInfo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::setSelection): Renamed m_selectionStart/End to m_unsplitSelectionStart/End
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::updateSelectionForSubtrees): Added, clears and re-applies selection for all selection subtrees.
        (WebCore::RenderView::clearSubtreeSelection): Added, clears selection and returns previously selected information.
        (WebCore::RenderView::applySubtreeSelection): Added, updates the selection status of all objects inside the selection tree, compares old and new data and repaints accordingly.
        (WebCore::RenderView::getSelection): Renamed m_selectionStart/End to m_unsplitSelectionStart/End
        (WebCore::RenderView::setSubtreeSelection): Deleted.
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeRoot):
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::OldSelectionData::OldSelectionData):

2014-07-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix for bot.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::createLegibleOutputSubtypes): Declare 'wvtt' locally, rather
        than relying on potentially unavailable declaration.

2014-07-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix for Windows bots

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp: Provide missing
        structure definition when needed by bot.

2014-07-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix for EWS bots.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp: Forward declare
        structure definition.

2014-07-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix Crash when handling Legible Output callbacks
        https://bugs.webkit.org/show_bug.cgi?id=134946

        Reviewed by Dean Jackson.

        Relanding after adding fixes to support build bots.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): Remove
        Windows-specific 'ASSERT_NOT_REACHED' code path.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::createLegibleOutputSubtypes): Added.
        (WebCore::AVFWrapper::createPlayerItem): Updated to request native
        samples from AVFoundationCF.

2014-07-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Copying and pasting trivial H2 content causes a crash in firstPositionInNode
        https://bugs.webkit.org/show_bug.cgi?id=134897

        Reviewed by Ryosuke Niwa.

        ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder() attempts
        to move pasted headings out of existed headings, with out regard to if the existing
        heading is the contenteditable root.

        Test: editing/pasteboard/heading-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):

2014-07-22  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove dead APIs from TiledBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=135158

        Reviewed by Gyuyoung Kim.

        setContentsFrozen and related code of TiledBackingStore are not used since Qt port is removed.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::setContentsScale):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::startBackingStoreUpdateTimer):
        (WebCore::TiledBackingStore::commitScaleChange): Deleted.
        (WebCore::TiledBackingStore::isBackingStoreUpdatesSuspended): Deleted.
        (WebCore::TiledBackingStore::isTileBufferUpdatesSuspended): Deleted.
        (WebCore::TiledBackingStore::setContentsFrozen): Deleted.
        * platform/graphics/TiledBackingStore.h:
        (WebCore::TiledBackingStore::contentsFrozen): Deleted.

2014-07-22  Alex Christensen  <achristensen@webkit.org>

        Fix window-inactive css selectors when using querySelector.
        https://bugs.webkit.org/show_bug.cgi?id=135149

        Reviewed by Tim Horton.

        Test: fast/selectors/querySelector-window-inactive.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        Removed default and implemented case PseudoClassWindowInactive.

2014-07-22  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r171016): Reproducible infinite spin selecting phone number
        https://bugs.webkit.org/show_bug.cgi?id=135183
        <rdar://problem/17727342>

        Reviewed by Ryosuke Niwa.

        * editing/Editor.cpp:
        (WebCore::Editor::scanRangeForTelephoneNumbers):
        Make use of TextIterator::subrange, which knows how to make a subrange from character positions,
        instead of assuming that our character positions translate directly to positions in the incoming range.
        Make use of DocumentMarkerController::addMarker, which takes a range and applies the marker to
        all text nodes inside the range as appropriate.
        Fix naming of the shadowed 'length' local.
        Fix a typo in the comment.

2014-07-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] [OSX] Don't transcode WOFF on platforms that support it natively
        https://bugs.webkit.org/show_bug.cgi?id=134904

        Reviewed by Andreas Kling.

        No new tests because there is no behavior change.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):

2014-07-22  peavo@outlook.com  <peavo@outlook.com>

        [Win] Crash after plugin is unloaded.
        https://bugs.webkit.org/show_bug.cgi?id=119044

        Reviewed by Darin Adler.

        We need to invalidate all runtime objects when a plugin view is destroyed, in case the plugin is unloaded,
        and one of these runtime objects accesses the plugin function table upon destruction afterwards, which will cause a crash.
        If we use the weak pointer to the runtime object when invalidating, it will be null if it's in the WeakImpl::Dead state.
        This means the runtime object will not be invalidated, possibly causing a crash if the plugin is unloaded.
        It should be safe to use the raw pointer to the runtime object when invalidating, since finalized runtime objects
        will be removed from the set of runtime objects in the method RootObject::finalize().

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate): Make sure all runtime objects are invalidated by getting the raw runtime object pointer from the hash key.

2014-07-22  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Selection inside accelerated overflow:scroll doesn't track scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=135180
        <rdar://problem/16721055>

        Reviewed by Simon Fraser.

        AsyncScrollingCoordinator will force a selection update on iOS
        when scrolling terminates in an overflow scroll.

        * loader/EmptyClients.h:
        * page/EditorClient.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeWillStartScroll):
        (WebCore::ScrollingTree::scrollingTreeNodeDidEndScroll):

2014-07-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Cocoa throws exception when the return type of NSAccessibilityLinkedUIElementsAttribute is not an array
        https://bugs.webkit.org/show_bug.cgi?id=135165

        Reviewed by Simon Fraser.

        Return an empty array instead of nil.

        Updated tests.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2014-07-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r171357.
        https://bugs.webkit.org/show_bug.cgi?id=135173

        broke Windows build. (Requested by bfulgham on #webkit).

        Reverted changeset:

        "[Win] Fix Crash when handling Legible Output callbacks"
        https://bugs.webkit.org/show_bug.cgi?id=134946
        http://trac.webkit.org/changeset/171357

2014-07-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix Crash when handling Legible Output callbacks
        https://bugs.webkit.org/show_bug.cgi?id=134946

        Reviewed by Dean Jackson.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): Remove
        Windows-specific 'ASSERT_NOT_REACHED' code path.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::createLegibleOutputSubtypes): Added.
        (WebCore::AVFWrapper::createPlayerItem): Updated to request native
        samples from AVFoundationCF.

2014-07-21  Sam Weinig  <sam@webkit.org>

        [Cocoa] WKScriptMessageHandlers don't seem to function properly after navigating
        https://bugs.webkit.org/show_bug.cgi?id=135148

        Reviewed by Geoffrey Garen.

        The "webkit" property on the window was not getting installed for subsequent
        loads due to intricate dance playing setting the JSDOMWindow where the DOMWindow
        object is not yet in a Frame when the JSDOMWindow is created. Since we were
        adding the "webkit" property on construction, the property was returning null
        thinking it had no Frame and was in a bad state. We can fix this by making the
        "webkit" property behave like all the other window properties moving its getting
        to JSDOMWindow::getOwnPropertySlot.

        Added API test (WebKit2Cocoa/UserContentController).

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowWebKit):
        (WebCore::JSDOMWindow::getOwnPropertySlot):

2014-07-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix Leak in WebCore::createGlobalImageFileDescriptor 
        https://bugs.webkit.org/show_bug.cgi?id=134423
        <rdar://problem/17492758>

        Reviewed by Geoffrey Garen.

        * platform/win/PasteboardWin.cpp:
        (WebCore::createGlobalImageFileDescriptor): Unlock and release the
        HGLOBAL when exiting early.

2014-07-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Clicking on links while accessibility is enabled sometimes crashes
        https://bugs.webkit.org/show_bug.cgi?id=135074

        Reviewed by Chris Fleizach.

        When an accessibility request comes in from the system, we call updateBackingStore() on the
        relevant AccessibilityObject, which triggers a relayout of the entire document. This relayout
        might delete that accessibility node and its parent, which would cause the node to be deleted.
        After the stack unwinds, we then call a member function on the node without checking for this
        condition.

        Test: accessibility/parent-delete.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore): Retain the node for the duration of the
        function.

2014-07-22  Jeremy Jones  <jeremyj@apple.com>

        Don't create new UIWindow for video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=135038

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenControllerAVKit.h: use UIView instead of UIScreen.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:]): provide parent UIView.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: remove UIWindow.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: 
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): ditto 
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::invalidate): ditto
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto

2014-07-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Rollout r170529 due to ~10% performance regression on the
        perf test Animation/balls.
        https://bugs.webkit.org/show_bug.cgi?id=134972

        Reviewed by Martin Robinson.

        Reverted changeset:
        "Increase priority on SharedTimer source."
        https://trac.webkit.org/r170529

2014-07-18  Dirk Schulze  <krit@webkit.org>

        Turn width/height to presentation attributes
        https://bugs.webkit.org/show_bug.cgi?id=135046

        Reviewed by Dean Jackson.

        The elements <svg>, <image>, <pattern>, <mask> and <foreignObject> have the
        'width' and 'height' attributes. So far they can just be set by SVG DOM or
        setAttribute. Furthermore, animations just work with SVG Animation - No support
        for CSS Animations and CSS Transitions. We started to turn the width and height
        attributes on SVG roots to presentation attributes already. A presentation
        attribute is a CSS property that can also be set by DOM (or now by SVG DOM).

        This patch turns all width and height attributes to presentation attributes. It
        basically allows authors to style width and height with CSS as well. Width and
        height can now be set with CSS style sheets and can be animated with CSS.

        To some degree it made it possible to remove code duplication. However, since
        SVG DOM requires us to use SVGLength types and since we did not turn all
        SVG attributes to the CSS length values (and our internal Length struct) yet,
        we still need a hybrid - a bridge between SVGLength (for SVG DOM) and Length (for
        RenderStyle). Once we move all attributes to use the Length struct, we can make SVGLength
        a wrapper for Length and can move more code to the render tree.

        The current challenge is to synchronize SVG DOM, normal DOM and RenderStyle.
        With this patch we handle most part in RenderStyle. SVG DOM changes are
        synchronized to DOM and RenderStyle will call needsStyleRecalc. Furthermore,
        SVG Animations will continue to animate the SVG DOM (and synchronize the changes
        back to RenderStyle) if the element has a JS property for the currently animated
        attribute.

        Short example:

            <rect>
                <animate attributeName="width">
            </rect>

        The <rect> element has the SVG DOM property 'width'. Therefore, we animate the SVG DOM
        property and synchronize RenderStyle.

            <ellipse>
                <animate attributeName="width">
            </ellipse>

        The <ellipse> element does NOT have the SVG DOM property 'width'. Therefore, we
        animate the CSS property directly. With synchronizing RenderStyle in all cases, we
        make sure that the CSS cascade works even on animating on multiple SVG hierarchy
        levels (animation of 'width' on <g> and inheriting the property value on a child
        <rect>).

        With using presentation attributes, we also inherit the CSS property parsing for
        SVG attributes. <rect width="  100px  "> is possible now. (Note the trailing whitespaces.)
        This follows a recent resolution of the SVG WG.

        Since we turned width and height to presentation attributes, the layout optimization
        selfHasRelativeLengths() in the DOM can't be used anymore. selfHasRelativeLengths() was
        intended to solve a problem where we did not layout relatively position/sized elements
        when the parent changes its size. However, as a side effect it did not call layout
        for absolutely positioned/sized elements since the layout does not change. I run
        all performance tests that we have and even wrote a test with hundreds of elements
        that would be affected by this optimization. The differences were inside the sigma
        of a normal test run. (Means I couldn't measure a performance difference.)
        Therefore, it is not worth it to keep the "optimization" around and I will probably
        remove it entirely for all basic shapes but <path> and <polygon> in future patches.

        Tests: svg/css/parse-height.html
               svg/css/parse-width.html
               svg/css/width-height-presentation-attribute-expected.svg
               svg/css/width-height-presentation-attribute.svg

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): We never calculated the computed
            value of width/height for SVG elements and returned auto instead. This is based
            on a rule of CSS 2 and needs to be fixed in CSS3.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLength::applyValue): Length always incorporates the zoom level.
            In SVG we still apply the zoom after all operations by scaling the context. We need
            to take this in account for Length and don't apply zoom on SVG inline elements.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::useSVGZoomRulesForLength):
            See above.
        * css/StyleResolver.h:
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement): Do not call width() and height() on
            SVG DOM but use the values of RenderStyle instead.
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement): Ditto.
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::resetAnimatedType): We need to differ between CSS properties
            with and without SVG DOM on the current element. In the later case we animate the 
            SVG DOM and need to synch RenderStyle.
        (WebCore::SVGAnimateElement::clearAnimatedType): Ditto.
        (WebCore::SVGAnimateElement::applyResultsToTarget): Ditto.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isTargetAttributeCSSProperty): This checks if the CSS property
            has to be synched with SVG DOM.
        (WebCore::SVGAnimationElement::shouldApplyAnimation): Ditto.
        * svg/SVGAnimationElement.h:
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap): Add width and heigth to the CSS property
            list for presentation attributes.
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): CSS properties with
            SVG DOM synchronization need to be treated differently. Collect them in a separate map.
        (WebCore::cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Caller for the map.
        (WebCore::SVGElement::animatedPropertyTypeForAttribute): We need to check both maps here:
            CSS properties and CSS properties with SVG DOM synch.
        (WebCore::SVGElement::isAnimatableCSSProperty): Ditto.
        (WebCore::SVGElement::isPresentationAttributeWithSVGDOM): Just return true if the property name
            is in the map of properties with SVG DOM for the current element.
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGPresentationAttributeStyle): Call needsStyleRecalc.
        * svg/SVGFilterElement.cpp: Make width/height presentation attribute.
        (WebCore::SVGFilterElement::svgAttributeChanged):
        (WebCore::SVGFilterElement::selfHasRelativeLengths): Deleted.
        * svg/SVGFilterElement.h: Ditto.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        (WebCore::SVGForeignObjectElement::selfHasRelativeLengths): Deleted.
        * svg/SVGForeignObjectElement.h:
        * svg/SVGImageElement.cpp: Ditto.
        (WebCore::SVGImageElement::svgAttributeChanged):
        (WebCore::SVGImageElement::isPresentationAttribute): Deleted.
        (WebCore::SVGImageElement::collectStyleForPresentationAttribute): Deleted.
        (WebCore::SVGImageElement::selfHasRelativeLengths): Deleted.
        * svg/SVGImageElement.h:
        * svg/SVGLength.h: Transform an Length value to an absolute value by taking the SVG viewport
            into account. (An SVG viewport is not the same as the CSS viewport.)
        * svg/SVGLengthContext.cpp: Ditto.
        (WebCore::SVGLengthContext::valueForLength):
        * svg/SVGLengthContext.h:
        * svg/SVGMaskElement.cpp: Make width/height presentation attribute.
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::selfHasRelativeLengths): Deleted.
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp: Ditto.
        (WebCore::SVGPatternElement::svgAttributeChanged):
        (WebCore::SVGPatternElement::selfHasRelativeLengths): Deleted.
        * svg/SVGPatternElement.h:
        * svg/SVGRectElement.cpp: Ditto.
        (WebCore::SVGRectElement::svgAttributeChanged):
        (WebCore::SVGRectElement::selfHasRelativeLengths): Deleted.
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp: Ditto.
        (WebCore::SVGSVGElement::svgAttributeChanged): Clean up redundant layout calls.
        (WebCore::SVGSVGElement::isPresentationAttribute): Deleted.
        (WebCore::SVGSVGElement::collectStyleForPresentationAttribute): Deleted.
        * svg/SVGSVGElement.h:
        * svg/properties/SVGAnimatedProperty.cpp: Synchronize SVG DOM with DOM.
        (WebCore::SVGAnimatedProperty::commitChange):

2014-07-22  Adrian Perez de Castro  <aperez@igalia.com>

        [GStreamer] [GTK] WebKit does not build with GStreamer 1.4
        https://bugs.webkit.org/show_bug.cgi?id=135114

        Reviewed by Philippe Normand.

        Fix build with GStreamer 1.4

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        Change GstMpegTs-prefixed types to use the GstMpegts prefix.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Ditto.

2014-07-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Improve event throttling for Scroll Events
        https://bugs.webkit.org/show_bug.cgi?id=135082
        <rdar://problem/17445266>

        Reviewed by Simon Fraser.

        This patch is composed of two parts. The first part in the WebKit layer
        track an approximate measurement of the main thread responsiveness.
        The second part in WebCore use that information to avoid sending events
        if a page is unresponsive.

        In WebCore, this patch only consider scroll events so far. Hopefully the concept
        should be easy to generalize.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        Chrome client provides us with one information: how long an incoming event should be delayed.
        Every port is free to implement whatever logic is suitable for them.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::delayedScrollEventTimerFired):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::sendScrollEvent):
        * page/FrameView.h:
        Scroll events do not have any associated information so they can be coalesced by just skipping
        all input hapenning during the throttling delay.

        The implementation is done by using a timer to delay the events.

2014-07-21  Tim Horton  <timothy_horton@apple.com>

        Avoid putting empty-sized surfaces into IOSurfacePool
        https://bugs.webkit.org/show_bug.cgi?id=135136

        Reviewed by Simon Fraser.

        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::addSurface):
        Avoid adding 0x0 surfaces to the pool, because they will wreak havoc
        when their size is used as the key in the CachedSurfaceMap.
        Additionally, avoid any empty sizes, because they're just pointless.

2014-07-21  Beth Dakin  <bdakin@apple.com>

        WK1 should always setAcceleratedCompositingForFixedPositionEnabled(true) on 
        Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=135135

        Reviewed by Darin Adler.

        This patch gets rid of the ChromeClient function that was introduced with 
        http://trac.webkit.org/changeset/171308 We’ll just enable the Setting instead.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::fixedPositionCreatesStackingContext): Deleted.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requiresAcceleratedCompositingForViewportConstrainedPosition): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2014-07-21  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn off position:fixed behavior when the keyboard is up
        https://bugs.webkit.org/show_bug.cgi?id=132537

        Reviewed by Benjamin Poulain.

        Export RenderObject::localToContainerPoint().

        * WebCore.exp.in:

2014-07-21  Jer Noble  <jer.noble@apple.com>

        [MSE] YouTube video decode error when variant-switching
        https://bugs.webkit.org/show_bug.cgi?id=135128

        Reviewed by Brent Fulgham.

        Test: media/media-source/media-source-overlapping-decodetime.html

        When variant-switching, the situation can arise where an existing sample with a presentation
        timestamp of N and a decode timestamp of M, and a new sample with a presentation timestamp > N
        and the same decode timestamp of M, will keep the new sample from being added to the SampleMap.
        This can result in a decode error when samples depending on that new, missing sample are enqueued.

        The MSE spec is silent on the issue of overlapping decode timestamps. However, it guarantees that
        presentation timestamps are non-overlapping. So instead of using just the decode timestamp as a key
        for storing the samples in decode order, use both the decode timestamp and the presentation timestamp.
        That ensures that samples with different presentation times but equal decode times are both inserted
        into the decode queue, and in the correct order.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::SampleIsRandomAccess::operator()): Update the parameter type to match the new KeyType.
        (WebCore::SampleMap::addSample): Pass both decodeTime and presentationTime as the key to decodeOrder.
        (WebCore::SampleMap::removeSample): Ditto.
        (WebCore::DecodeOrderSampleMap::findSampleWithDecodeKey): Renamed from findSampleWithDecodeTime.
        (WebCore::DecodeOrderSampleMap::reverseFindSampleWithDecodeKey): renamed from reverseFindSampleWithDecodeTime.
        (WebCore::DecodeOrderSampleMap::findSyncSamplePriorToPresentationTime): Use renamed version of above.
        (WebCore::DecodeOrderSampleMap::findSyncSampleAfterPresentationTime): Ditto.
        (WebCore::DecodeOrderSampleMap::findDependentSamples): Ditto.
        (WebCore::DecodeOrderSampleMap::findSampleWithDecodeTime): Deleted.
        (WebCore::DecodeOrderSampleMap::reverseFindSampleWithDecodeTime): Deleted.
        * Modules/mediasource/SampleMap.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        (WebCore::SourceBuffer::reenqueueMediaForTime): Ditto.

2014-07-21  Andy Estes  <aestes@apple.com>

        [iOS] Handle QuickLook ResourceLoaders in the web process
        https://bugs.webkit.org/show_bug.cgi?id=135113

        Reviewed by David Kilzer.

        No new tests. QuickLook is not testable from WebKit.

        * WebCore.exp.in:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::maybeLoadQuickLookResource): Start loading the ResourceLoader if it is for a QuickLook resource.
        * loader/ResourceLoadScheduler.h:

2014-07-21  Alexey Proskuryakov  <ap@apple.com>

        Case sensitive file system build fix.

        * page/scrolling/ScrollingStateTree.cpp:

2014-07-21  Beth Dakin  <bdakin@apple.com>

        Put position:fixed elements into layers when a WK1 view is layer-backed
        https://bugs.webkit.org/show_bug.cgi?id=135075

        Reviewed by Darin Adler.

        This patch adds a new ChromeClient function called 
        requiresAcceleratedCompositingForViewportConstrainedPosition(). Since a view can 
        go in and out of layer backing, we need a ChromeClient method that can be 
        dynamically re-evaluated rather than using the existing settings for enabling 
        accelerated fixed and fixed that creates a stacking context.

        Ensure that fixed elements create a stacking context when 
        requiresAcceleratedCompositingForViewportConstrainedPosition is true.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):

        New ChromeClient function.
        * page/ChromeClient.h:

2014-07-21  Simon Fraser  <simon.fraser@apple.com>

        Add helper functions to dump the scrolling state tree from the debugger
        https://bugs.webkit.org/show_bug.cgi?id=135101

        Reviewed by Darin Adler.

        Add debug-only showScrollingStateTree() functions that take a ScrollingStateTree* and ScrollingStateNode*
        for use while debugging.

        * page/scrolling/ScrollingStateTree.cpp:
        (showScrollingStateTree):
        * page/scrolling/ScrollingStateTree.h:

2014-07-20  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK1] Single touch div scrolling doesn't work in framesets (breaks Word previews)
        https://bugs.webkit.org/show_bug.cgi?id=135103
        <rdar://problem/11830219>

        Reviewed by Darin Adler.

        After r166117 all layer flushing starts on the root frame; we no longer flush layers
        for each frame during painting. However, flushing GraphicsLayers can set some state
        on a subframe RenderLayerCompositor that is now never processed, which breaks scroll
        layer registration.
        
        Fix by doing a walk of the Frame tree, and calling didFlushLayers() on subframe RenderLayerCompositors
        before calling didFlushLayers() on self.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::didFlushLayers):
        (WebCore::RenderLayerCompositor::notifySubframesAfterLayerFlush):
        (WebCore::RenderLayerCompositor::enclosingCompositorFlushingLayers): Drive-by nullptr.
        * rendering/RenderLayerCompositor.h:

2014-07-21  Eric Carlson  <eric.carlson@apple.com>

        [iOS] a Paused media session is not active
        https://bugs.webkit.org/show_bug.cgi?id=135108

        Reviewed by Darin Adler.

        Activating the shared AudioSession will pause audio playing in another application,
        so only report a Playing media sessions as active.

        * platform/audio/MediaSessionManager.cpp:
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::activeAudioSessionRequired): Renamed from hasActive to make
        clear what it does. Only return true for a session that is Playing.

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): hasActive renamed to activeAudioSessionRequired.

2014-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings test results after r171285.

        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        * bindings/scripts/test/GObject/WebKitDOMattribute.cpp:
        * bindings/scripts/test/GObject/WebKitDOMreadonly.cpp:

2014-07-20  Pratik Solanki  <psolanki@apple.com>

        Reduce the chances of a race condition when sharing SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=135060
        <rdar://problem/17729444>

        Reviewed by Darin Adler.

        We currently pass a SharedBuffer wrapped in WebCoreSharedBufferData to ImageIO for image
        decoding. This is not thread safe since ImageIO will access this buffer on a separate
        thread. We access SharedBuffer::buffer() on the other thread which resizes the Vector
        m_buffer if m_size is greater than the vector size. Since the code in SharedBuffer::append()
        sets m_size before appending the data to the buffer, m_size is out of sync with the m_buffer
        size for the entire duration of the Vector append which could be doing a lot of copying if
        the resource is large. While this change does not fix the race condition, we can at least
        reduce the chances of SharedBuffer::buffer() calling resize() by setting m_size after the
        cector has finished appending.

        No new tests because no functional changes.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):

2014-07-20  Jeremy Jones  <jeremyj@apple.com>

        Fix test crashes when cloning video layer since r171286
        https://bugs.webkit.org/show_bug.cgi?id=135112

        Unreviewed. Fix crashing tests by conditionalizing inline video layer change.
        compositing/video/video-reflection.html [ Crash ]
        media/video-layer-crash.html [ Crash ]

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: add conditional
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: ditto
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): ditto
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer): ditto
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformLayer): ditto

2014-07-20  Jeremy Jones  <jeremyj@apple.com>

        Disable ff/rw based on canPlayFastForward and canPlayFastRewind.
        https://bugs.webkit.org/show_bug.cgi?id=134894

        Reviewed by Darin Adler.

        * WebCore.exp.in: add symbol for canPlayFastReverse
        * html/HTMLMediaElement.cpp: Add two new accessors
        (WebCore::HTMLMediaElement::nextScanRate): possibly limit scanRate
        (WebCore::HTMLMediaElement::canPlayFastForward): added
        (WebCore::HTMLMediaElement::canPlayFastReverse): added
        * html/HTMLMediaElement.h: declare two new methods
        * platform/graphics/MediaPlayer.cpp: Plumb through two new accessors
        (WebCore::MediaPlayer::maxFastForwardRate): added
        (WebCore::MediaPlayer::minFastReverseRate): added
        * platform/graphics/MediaPlayer.h: Declare new methods
        * platform/graphics/MediaPlayerPrivate.h: Added two new methods.
        (WebCore::MediaPlayerPrivateInterface::maxFastForwardRate): added
        (WebCore::MediaPlayerPrivateInterface::minFastReverseRate): added
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: member to cache ff/rw enabled state
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): observe on item canPlayFastForward canPlayFastReverse
        (WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayFastForwardDidChange): added
        (WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayFastReverseDidChange): added
        (WebCore::itemKVOProperties): observe canPlayFastForward canPlayFastRewind
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): ditto
        * platform/ios/WebVideoFullscreenInterface.h: add new method
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: ditto
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: ditto
        (WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse): Set value on WebAVPlayerController.
        (-[WebAVPlayerController canScanBackward]): Deleted.
        (+[WebAVPlayerController keyPathsForValuesAffectingCanScanBackward]): Deleted.
        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::updateForEventName): update canPlayFastReverse.

2014-07-18  Gavin Barraclough  <baraclough@apple.com>

        HTMLMediaElement should registerWithDocument on iOS
        https://bugs.webkit.org/show_bug.cgi?id=135084
        <rdar://problem/17702531>

        Reviewed by Andreas Kling.

        Otherwise it won't know when the visibility changes!

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):

2014-07-20  Jeremy Jones  <jeremyj@apple.com>

        Decrease flicker when enter and exit fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=134919

        Reviewed by Simon Fraser.

        Put AVPlayerLayer in a container layer so moving it between inline and fullscreen
        is as easy as adding and removing it from a containter layer; no need to do a layout.

        Make sure fullscreen layers are transparent before moving moving the AVPlayerLayer
        between inline and fullscreen so you don't briefly see the empty fullscreen layers.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::platformLayer): remove fullscreen special case.
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer): no need to recalc style
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: add inline container layer
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 
        add WebVideoContainerLayer to contain AVPlayerLayer and keep layout correct.
        (-[WebVideoContainerLayer setBounds:]): forward setbounds to set child frame.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): create the video container layer
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer): destroy the video container layer
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformLayer): use container layer instead of video layer
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): use transactions to prevent unwanted animation.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenFrame): ditto
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::layerTypeForPlatformLayer): WebVideoContainerLayer is a kind of AVPlayerLayer
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController didCleanupFullscreen]): remove video fullscreen layer first
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): make background transparent during transition.
           dispatch_async to allow CATransaction to complete before calling didSetupFullscreen()

2014-07-20  Ryuan Choi  <ryuan.choi@samsung.com>

        Move ExceptionCodeDescription.h into the files that actually need it
        https://bugs.webkit.org/show_bug.cgi?id=134968

        Reviewed by Darin Adler.

        No new tests because no functional changes.

        * Modules/indexeddb/IDBDatabaseException.cpp:
        * Modules/webdatabase/SQLException.cpp:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/objc/ExceptionHandlers.mm:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (Generate):
        * dom/DOMCoreException.cpp:
        * dom/EventException.cpp:
        * dom/ExceptionBase.cpp:
        * dom/ExceptionCode.h:
        * dom/RangeException.cpp:
        * fileapi/FileException.cpp:
        * inspector/DOMEditor.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * svg/SVGException.cpp:
        * xml/XMLHttpRequestException.cpp:
        * xml/XPathException.cpp:

2014-07-20  Dan Bernstein  <mitz@apple.com>

        <rdar://problems/17742611> -[_WKActivatedElementInfo image] is often empty
        https://bugs.webkit.org/show_bug.cgi?id=135107

        Reviewed by Sam Weinig.

        Test: TestWebKitAPI/Tests/mac/RenderedImageFromDOMNode.mm

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): To work around http://webkit.org/b/135106, replace the
        paint root with its nearest ancestor that isn’t an inline with culled line boxes, if needed.

2014-07-20  Darin Adler  <darin@apple.com>

        Crashes seen in wheel event handling
        https://bugs.webkit.org/show_bug.cgi?id=135102

        Reviewed by Beth Dakin.

        Speculative fix based on guesses about what could be crashing.
        The crash seems to be calling ref on an event target, and my guess is that this
        has something to do with latching.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::platformPrepareForWheelEvents): Updated argument types.
        (WebCore::EventHandler::handleWheelEvent): Refactored a little and made some local
        variables use RefPtr instead of raw pointers. Also added some comments.

        * page/EventHandler.h: Changed argument types to RefPtr.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents): Updated argument types.
        Also added a FIXME.

2014-07-20  Simon Fraser  <simon.fraser@apple.com>

        Print layerIDs in GraphicsLayer dumps
        https://bugs.webkit.org/show_bug.cgi?id=135100

        Reviewed by Darin Adler.

        When calling showGraphicsLayerTree() from the debugger, it's useful to show
        layerIDs so they can be correlated with remote layer tree transactions. So
        when dumping with debug info, dump the primary layer ID.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):

2014-07-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] ignore requests to set volume
        https://bugs.webkit.org/show_bug.cgi?id=135081

        Applied post-review comments from Darin Adler.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVolume): Don't include unreachable
            code on iOS.

2014-07-19  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/135085> Ensure that make_names.pl generates the same result when run multiple times.

        Perl 5.18 introduced hash randomization. This results in the iteration order of hashes being different
        from one run to the next. To ensure identical output we can iterate over the hash keys in sorted order.

        Reviewed by Alexey Proskuryakov.

        * bindings/scripts/StaticString.pm:
        (GenerateStrings):
        (GenerateStringAsserts):
        * dom/make_names.pl:

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

        Document::unregisterNodeListforInvalidation() and Document::unregisterCollection() have incorrect assertions
        https://bugs.webkit.org/show_bug.cgi?id=134869

        Reviewed by Darin Adler.

        Both methods should assert that the relevant HashMap is either empty if invalidation originates
        from Document::invalidateNodeListAndCollectionCaches() or acutally contains the element that is
        being invalidated. In the first case the HashMap is empty because its entries were moved out in
        the Document::invalidateNodeListAndCollectionCaches().

        This was exposed by r170995 (later rolled out in r170999) which introduced move constructor and
        move assignment operators for HashTable. The assertions in the titular methods won't be passing
        until r170995 relands.

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

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

        [iOS] ignore requests to set volume
        https://bugs.webkit.org/show_bug.cgi?id=135081

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVolume): Do nothing on iOS.

2014-07-18  Andy Estes  <aestes@apple.com>

        [iOS] Tapping "Allow Website" on a restricted page does not bring up the keypad
        https://bugs.webkit.org/show_bug.cgi?id=135072
        <rdar://problem/17528188>

        Reviewed by David Kilzer.

        No new tests. Content filtering is not testable from WebKit.

        * WebCore.exp.in: Exported necessary ContentFilter symbols.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading): Called FrameLoaderClient::contentFilterDidBlockLoad().
        (WebCore::DocumentLoader::responseReceived): Created a new ContentFilter.
        (WebCore::DocumentLoader::dataReceived): Called FrameLoaderClient::contentFilterDidBlockLoad().
        (WebCore::DocumentLoader::setContentFilterForBlockedLoad): Deleted.
        (WebCore::DocumentLoader::handleContentFilterRequest): Deleted.
        * loader/DocumentLoader.h:
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::contentFilterDidBlockLoad):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Removed the check for unblock navigations, as this is now
        handled at the WebKit layer.
        * platform/ContentFilter.h: ContentFilter no longer needs to be RefCounted, so made various changes in order to
        make it compatible with unique_ptr.
        * platform/ios/ContentFilterIOS.mm:
        (WebCore::scheme): Changed from a public member function to a static inline free function.
        (WebCore::ContentFilter::handleUnblockRequestAndDispatchIfSuccessful): Renamed from requestUnblockAndDispatchIfSuccessful.
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter): Added a default constructor for use during message decoding.
        (WebCore::ContentFilter::addData): Removed calls to ref() and deref(). These were never actually needed since
        we were dispatching the block synchronously.
        (WebCore::ContentFilter::finishedAddingData): Ditto.
        (WebCore::ContentFilter::encode): Encoded m_platformContentFilter to the NSKeyedArchiver if it conforms to NSSecureCoding.
        (WebCore::ContentFilter::decode): Decoded m_platformContentFilter from the NSKeyedUnarchiver if it conforms to NSSecureCoding.
        (WebCore::ContentFilter::create): Deleted.

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

        [iOS WK2] position:fixed in iframes with programmatic scroll could end up in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=135078
        <rdar://problem/17401823>

        Reviewed by Tim Horton.
        
        When the UI-side scrolling tree receives a requested scroll position update, it scrolls
        the node (e.g. a frame) then traverses child nodes to update them, e.g. for fixed position.
        However, we would always use a viewport rect for the main document (from the scrolling tree),
        which is not appropriate for subframes. Subframes should just use their own visible
        rect to position fixed children.

        Test: platform/mac-wk2/tiled-drawing/scrolling/frames/fixed-inside-frame.html

        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll):

2014-07-18  Beth Dakin  <bdakin@apple.com>

        Fixed position elements are misplaced when a WK1 view has contentInsets set
        https://bugs.webkit.org/show_bug.cgi?id=135031
        -and corresponding-
        <rdar://problem/17682335>

        Reviewed by Tim Horton.

        [NSScrollView documentVisibleRect] includes content that is within the inset-area 
        of a view, but WebCore is interested in the content that is fully visible, so we 
        need to factor the inset sizes out of this rect.

        Implement contract() to avoid the awkwardness of calling expand() with negative 
        values.
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::contract):

        Factor out insets
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::platformVisibleContentSize):

2014-07-18  Tim Horton  <timothy_horton@apple.com>

        Take navigation snapshots whenever the current back-forward item is going to change
        https://bugs.webkit.org/show_bug.cgi?id=135058
        <rdar://problem/17464515>

        Reviewed by Dan Bernstein.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::recursiveUpdateForCommit):
        (WebCore::HistoryController::recursiveUpdateForSameDocumentNavigation):
        (WebCore::HistoryController::createItem):
        Use setCurrentItem instead of duplicating the contents of it inside each of these functions.

        (WebCore::HistoryController::setCurrentItem):
        (WebCore::HistoryController::replaceCurrentItem):
        When setting or replacing the current item, let the FrameLoaderClient know that we're going
        to change which history item is "current".

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::willChangeCurrentHistoryItem): Added.

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

        Unreviewed, rolling out r171207.
        https://bugs.webkit.org/show_bug.cgi?id=135056

        Broke multiple tests on Yosemite (Requested by ap on #webkit).

        Reverted changeset:

        "Fixed position elements are misplaced when a WK1 view has
        contentInsets set"
        https://bugs.webkit.org/show_bug.cgi?id=135031
        http://trac.webkit.org/changeset/171207

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

        Unreviewed, rolling out r171218.
        https://bugs.webkit.org/show_bug.cgi?id=135055

        Made fast/dom/HTMLObjectElement/beforeload-set-text-
        crash.xhtml crash (Requested by ap on #webkit).

        Reverted changeset:

        "REGRESSION (r169105): Crash in selection"
        https://bugs.webkit.org/show_bug.cgi?id=134303
        http://trac.webkit.org/changeset/171218

2014-07-18  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r169105): Crash in selection
        https://bugs.webkit.org/show_bug.cgi?id=134303

        Reviewed by Ryosuke Niwa.

        When splitting the selection between different subtrees, all subtrees must have their selection cleared before
        starting to apply the new selection. Otherwise, when selecting objects in a named flow thread and going up
        its containing block chain, we can end up in the view's selection root, which has not yet been updated and so
        we get inconsistent data.

        To achieve this goal, the selection update was split into a "clear" and an "apply" method. The updateSelectionForSubtrees
        method first iterates through all subtrees and performs the "clear" method and then starts all over again
        and performs the "apply" method.

        Also, the selectionStart/End members in RenderView have been renamed to fix problems caused by the fact that
        RenderView inherits SelectionSubtreeRoot, which also has the same selectionStart/End members.

        Test: fast/regions/selection/crash-deselect.html

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        * rendering/RenderSelectionInfo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::setSelection): Renamed m_selectionStart/End to m_unsplitSelectionStart/End
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::updateSelectionForSubtrees): Added, clears and re-applies selection for all selection subtrees.
        (WebCore::RenderView::clearSubtreeSelection): Added, clears selection and returns previously selected information.
        (WebCore::RenderView::applySubtreeSelection): Added, updates the selection status of all objects inside the selection tree, compares old and new data and repaints accordingly.
        (WebCore::RenderView::getSelection): Renamed m_selectionStart/End to m_unsplitSelectionStart/End
        (WebCore::RenderView::setSubtreeSelection): Deleted.
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeRoot):
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::OldSelectionData::OldSelectionData):

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

        [MSE] Re-enqueue after a removeCodedFrames() only if the removed frames overlap what may have possibly been enqueued but undisplayed.
        https://bugs.webkit.org/show_bug.cgi?id=135039

        Reviewed by Eric Carlson.

        When a client calls removeCodedFrames(), we must re-enqueue those ranges if the removed samples overlap with
        enqueued but possibly un-displayed samples. Otherwise, replacement samples may lead to decode errors as those
        new samples dependencies are not met. But if we re-enqueue too frequently, this may cause subtle but noticible
        display timing glitches, so only re-enqueue when removeCodedFrames have a possiblity of removing enqueued, but
        not yet displayed samples.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames):

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

        SECTORDER_FLAGS should be defined in target's xcconfig file, not Base.xcconfig
        <http://webkit.org/b/135006>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Move SECTORDER_FLAGS to
        WebCore.xcconfig.
        * Configurations/DebugRelease.xcconfig: Remove empty
        SECTORDER_FLAGS definition.
        * Configurations/WebCoreTestShim.xcconfig: Ditto.
        * Configurations/WebCoreTestSupport.xcconfig: Ditto.
        * Configurations/WebCore.xcconfig: Use $(CONFIGURATION) so
        SECTORDER_FLAGS is only set on Production builds.

2014-07-17  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Embedded non-compositing rotate transform paints to wrong position.
        https://bugs.webkit.org/show_bug.cgi?id=135028

        Reviewed by Simon Fraser.

        CTM always translates to where the layer's renderer() is going to paint.
        It ensures that the pixel snapped renderer() always end up painting to (0, 0) which is
        required to be able to position properly on transformed context.

        Test: fast/layers/hidpi-transform-on-child-content-is-mispositioned.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:

2014-07-17  Beth Dakin  <bdakin@apple.com>

        Fixed position elements are misplaced when a WK1 view has contentInsets set
        https://bugs.webkit.org/show_bug.cgi?id=135031
        -and corresponding-
        <rdar://problem/17682335>

        Reviewed by Tim Horton.

        [NSScrollView documentVisibleRect] is not the rect that we are looking for when 
        this function is called. WebCore is interested in the rect that does not include 
        content that is within the inset region.

        Implement contract() to avoid the awkwardness of calling expand() with negative 
        values.
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::contract):

        Use _insetBounds instead of documentVisibleRect, and when it’s necessary to use 
        the frame’s dimensions, extract the inset from that size.
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::platformVisibleContentSize):

2014-07-17  Enrica Casucci  <enrica@apple.com>

        [REGRESSION WK2]The menu bar does not show up when tapping on the caret.
        https://bugs.webkit.org/show_bug.cgi?id=135023
        <rdar://problem/17617282>

        Reviewed by Benjamin Poulain.

        Adding some exports.
        
        * WebCore.exp.in:

2014-07-17  Timothy Hatcher  <timothy@apple.com>

        Make console.profile record to the Timeline.

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

        Reviewed by Joseph Pecoraro.

        Passes existing profiler tests in fast/profiler.

        * bindings/js/ScriptState.cpp:
        (WebCore::domWindowFromExecState):
        (WebCore::frameFromExecState):
        (WebCore::scriptExecutionContextFromExecState):
        (WebCore::mainWorldExecState):
        (WebCore::execStateFromNode):
        * bindings/js/ScriptState.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::profilerEnabled):
        (WebCore::InspectorController::setProfilerEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::startProfilingImpl):
        (WebCore::InspectorInstrumentation::stopProfilingImpl):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::startProfiling):
        (WebCore::stopProfiling):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::breakpointActionProbe):
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteRecordEntry):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::sendEvent):
        (WebCore::InspectorTimelineAgent::createRecordEntry):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::persistentInspectorTimelineAgent):
        (WebCore::InstrumentingAgents::setPersistentInspectorTimelineAgent):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createConsoleProfileData):
        * inspector/TimelineRecordFactory.h:
        * inspector/protocol/Timeline.json:
        * page/PageConsole.cpp:
        (WebCore::PageConsole::profileEnd):

2014-07-16  Sam Weinig  <sam@webkit.org>

        Don't send geolocation permission requests when the page is not visible
        <rdar://problem/17208715>
        https://bugs.webkit.org/show_bug.cgi?id=134989

        Reviewed by Darin Adler.

        Instead of eagerly requesting geolocation permission for pages that aren't visible,
        store a set of pending requests, and send them only once the page has become visible.

        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::~GeolocationController):
        (WebCore::GeolocationController::requestPermission):
        (WebCore::GeolocationController::cancelPermissionRequest):
        (WebCore::GeolocationController::viewStateDidChange):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        Store pending requests to be fired once the page is visible.

        * WebCore.xcodeproj/project.pbxproj:
        Add ViewStateChangeObserver.h

        * page/Page.cpp:
        (WebCore::Page::addViewStateChangeObserver):
        (WebCore::Page::removeViewStateChangeObserver):
        (WebCore::Page::setViewState):
        * page/Page.h:
        Add a set of registered view state observers, and notify them when the
        view state changes.

        * page/ViewStateChangeObserver.h: Added.
        (WebCore::ViewStateChangeObserver::~ViewStateChangeObserver):
        Add an observer that can register with the page for view state changes.

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

        Enable legacy fullscreen API in media controls
        https://bugs.webkit.org/show_bug.cgi?id=134985

        Reviewed by Eric Carlson.

        Allow clients who have not enabled HTML5 Fullscreen APIs to still use fullscreen mode
        with <video> elements by using the legacy, video-element-specific fullscreen APIs in
        the <video> media controls.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller):
        (Controller.prototype.handleReadyStateChange):
        (Controller.prototype.isFullScreen):
        (Controller.prototype.handlePlayButtonClicked):
        (Controller.prototype.updateFullscreenButton):
        (Controller.prototype.handleFullscreenButtonClicked):

2014-07-17  Vineet Chaudhary  <code.vineet@gmail.com>

        [GObject] StrictTypeChecking extended attribute fails for methods with sequence<T>.
        https://bugs.webkit.org/show_bug.cgi?id=121698

        Reviewed by Antonio Gomes.

        GodeGenerator was including wrong heeaders as WebKitDOMlong[] for methods with
        array parameters and StrictTypeChecking extended attribute.
        No new tests. TestObj.idl covers the tests.

        * bindings/scripts/CodeGenerator.pm:
        (GetArrayOrSequenceType):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_strict_function_with_array):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        (webkit_dom_test_typedefs_func):
        (webkit_dom_test_typedefs_nullable_array_arg):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/TestObj.idl:

2014-07-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Clean up return path
        https://bugs.webkit.org/show_bug.cgi?id=135011

        Reviewed by Benjamin Poulain.

        Clean up the existing CSS JIT return path before adding new early return path
        for pseudo elements.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::StackReference::StackReference):
        (WebCore::StackAllocator::StackReference::isValid):
        (WebCore::StackAllocator::popAndDiscard): Deleted.

2014-07-16  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Adjust cliprect with devicePixelFractionFromRenderer() before painting.
        https://bugs.webkit.org/show_bug.cgi?id=134950
        <rdar://problem/17617994>

        Reviewed by Simon Fraser.

        The cliprect coming from the graphics layer needs to be adjusted with the subpixel gap
        from renderer. This is symmetric with the offsetting we do, when the dirty rect is sent off to the GraphicsLayer.
        It puts us back to the correct coordinating system for intersecting with renderers.

        Test: compositing/hidpi-compositing-layer-with-tile-layers-on-subpixel-position.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::clipToRect):

2014-07-16  Simon Fraser  <simon.fraser@apple.com>

        Fix a typo noticed by Darin.
        
        * rendering/RenderBox.cpp:
        (WebCore::shouldApplyContainersClipAndOffset):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::shouldAppyContainersClipAndOffset): Deleted.

2014-07-16  Simon Fraser  <simon.fraser@apple.com>

        Improve showTree() logging
        https://bugs.webkit.org/show_bug.cgi?id=134997

        Reviewed by Tim Horton.

        Have the debug showTree(), which dumps the Node/Element tree, show which nodes need
        style recalc, and print element renderers.

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

2014-07-16  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Expose the points on WebEventRegion
        https://bugs.webkit.org/show_bug.cgi?id=134978

        Reviewed by Tim Horton.

        Expose WebEventRegion's points so that UIKit can get at them.

        * page/ios/WebEventRegion.h:
        * page/ios/WebEventRegion.mm:
        (-[WebEventRegion p1]):
        (-[WebEventRegion p2]):
        (-[WebEventRegion p3]):
        (-[WebEventRegion p4]):

2014-07-16  Brady Eidson  <beidson@apple.com>

        Add WebSecurityOrigin "webSecurityOriginFromDatabaseIdentifier" SPI and change _websiteDataURLForContainerWithURL: SPI
        <rdar://problem/17454712> and https://bugs.webkit.org/show_bug.cgi?id=134984

        Reviewed by Dan Bernstein.

        Change _websiteDataURLForContainerWithURL: SPI to include an optional bundle identifier argument:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _websiteDataURLForContainerWithURL:bundleIdentifierIfNotInContainer:]):
        (+[WKProcessPool _websiteDataURLForContainerWithURL:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

        Add a big shiny comment in a few key places:
        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::initializeDatabaseProcess):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::UniqueIDBDatabase):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::applyPlatformSpecificConfigurationDefaults):
        (WebKit::WebContext::ensureDatabaseProcess):

2014-07-16  Roger Fong  <roger_fong@apple.com>

        Captions container should not clip content.
        https://bugs.webkit.org/show_bug.cgi?id=134840.
        <rdar://problem/14553608>.

        Reviewed by Simon Fraser.

        Tests: media/track/track-in-band-subtitles-too-large.html
               media/track/track-long-word-container-sizing.html

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-text-track-container):
        Set word break property of WebCTT cues to normal to make it consistent with in-band cues.
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        Set -webkit-min-content on min-width/min-height property of the text track display.
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        Do the same for WebVTT cues.

2014-07-16  Eric Carlson  <eric.carlson@apple.com>

        [Mac] replace AVPlayerItem on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=134983

        Reviewed by Jer Noble.

        No new tests, this fixes a problem with a thread configuration not present in the
        test environment.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAVPlayerItem): New, when called off of 
            the main thread, dispatch to the main thread before setting AVPlayerItem.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Call setAVPlayerItem.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldBufferData): Ditto.

2014-07-16  Jer Noble  <jer.noble@apple.com>

        [MSE] http/tests/media/media-source/mediasource-buffered.html is flakey
        https://bugs.webkit.org/show_bug.cgi?id=134949

        Reviewed by Eric Carlson.

        Depending on which SourceBuffer is successfully parsed first, the order of activeSourceBuffers
        may change from run to run, breaking the http/tests/media/media-source/mediasource-buffered.html
        test. Make the order of activeSourceBuffers the same as (a subset of) sourceBuffers, by replacing
        calls to activeSourceBuffers->add() and with a new call to regenerateActiveSourceBuffers(), which
        swaps the contents of the SourceBufferList with a new, ordered Vector.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::sourceBufferDidChangeAcitveState):
        (WebCore::MediaSource::regenerateActiveSourceBuffers):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::swap):
        * Modules/mediasource/SourceBufferList.h:

2014-07-16  Mike West  <mkwst@chromium.org>

        CSP: Drop 'script-nonce' directive.
        https://bugs.webkit.org/show_bug.cgi?id=134926

        Reviewed by Darin Adler.

        This patch drops the outdated 'script-nonce' Content Security
        Policy directive. It was removed from the spec, and replaced in
        CSP2 with a new 'script-src' syntax. We should implement that
        instead.

        Until then, removing the outdated syntax will ensure that no one
        ends up relying on it in WebKit's implementation.

        This should have limited web-visible impact, as the feature is
        behind the CSP_NEXT flag, which is not enabled by default.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        (WebCore::ScriptElement::executeScript):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::allowJavaScriptURLs):
        (WebCore::CSPDirectiveList::allowInlineEventHandlers):
        (WebCore::CSPDirectiveList::addDirective):
        (WebCore::NonceDirective::NonceDirective): Deleted.
        (WebCore::NonceDirective::allows): Deleted.
        (WebCore::NonceDirective::parse): Deleted.
        (WebCore::CSPDirectiveList::checkNonce): Deleted.
        (WebCore::CSPDirectiveList::checkNonceAndReportViolation): Deleted.
        (WebCore::CSPDirectiveList::allowScriptNonce): Deleted.
        (WebCore::isAllowedByAllWithNonce): Deleted.
        (WebCore::ContentSecurityPolicy::allowScriptNonce): Deleted.
        (WebCore::ContentSecurityPolicy::reportInvalidNonce): Deleted.
        * page/ContentSecurityPolicy.h:

2014-07-16  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r171069) 75% repro crash in WebCore::AudioHardwareListenerMac::processIsRunningChanged()
        https://bugs.webkit.org/show_bug.cgi?id=134986

        Reviewed by Eric Carlson.

        Add a WeakPtrFactory to AudioHardwareListenerMac, so that if CoreAudio calls our block after
        being unregistered, we can bail early instead of calling into a deleted object.

        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
        * platform/audio/mac/AudioHardwareListenerMac.h:

2014-07-16  Jer Noble  <jer.noble@apple.com>

        [MSE] REGRESSION(r171033): ASSERT in WebCore::MediaSource::onReadyStateChange()
        https://bugs.webkit.org/show_bug.cgi?id=134941

        Reviewed by Eric Carlson.

        Only do our modified-order change of the readyState if the error parameter is empty,
        as that's the only case where a duration change will cause an inadvertant readyState
        change.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::streamEndedWithError):

2014-07-16  Alexey Proskuryakov  <ap@apple.com>

        Remove svn:executable property erroneously added in <http://trac.webkit.org/changeset/171144> somehow.

        * ChangeLog: Removed property svn:executable.
        * svg/SVGSVGElement.h: Removed property svn:executable.
        * svg/animation/SVGSMILElement.h: Removed property svn:executable.

2014-07-16  Daniel Bates  <dabates@apple.com>

        Substitute CGRectZero for NSZeroRect in -[DOMNode hrefFrame].

        Rubber-stamped by Zalan Bujtas.

        The method -[DOMNode hrefFrame] returns a CGRect. So, when we don't have a renderer
        we should return CGRectZero instead of a NSZeroRect.

        * bindings/objc/DOM.mm:
        (-[DOMNode hrefFrame]): Also, fix up some code style issues.

2014-07-16  Jeongeun Kim  <je_julie.kim@samsung.com>

        mutable pointers from const methods, timeContainer().
        https://bugs.webkit.org/show_bug.cgi?id=134757

        Reviewed by Alexey Proskuryakov.

        Avoid return mutable pointers from const methods.
        No new tests, no behavior change.

        * svg/SVGSVGElement.h:
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::timeContainer):

2014-07-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS: Generalize CSS First Letter treatment
        https://bugs.webkit.org/show_bug.cgi?id=134936

        Reviewed by Benjamin Poulain.

        first-letter pseudo element rule is handled differently from the other rules
        such as first-line. This patch removes this special handling in SelectorChecker
        and handles it in RulesFeatureSet.

        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::collectFeaturesFromSelector):
        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::clear):
        * css/RuleFeature.h:
        (WebCore::RuleFeatureSet::RuleFeatureSet):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::usesFirstLetterRules):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::combineCSSFeatureFlags):
        (WebCore::DocumentStyleSheetCollection::resetCSSFeatureFlags):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::setUsesFirstLetterRules): Deleted.

2014-07-15  Simon Fraser  <simon.fraser@apple.com>

        Fix non-iOS builds.

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

2014-07-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Fix touches inside accelerated overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=134961
        <rdar://problem/16088789>

        Reviewed by Benjamin Poulain.

        When individual elements inside an overflow:scroll with -webkit-overflow-scrolling: touch
        had touch event listeners, we would fail to take the scroll offset into account when
        building the touch event region, causing touches on those elements to fail after scrolling.
        
        Touch event region building uses RenderObject::absoluteClippedOverflowRect(), and that
        code path tries to fix up repaint rects to work correctly in composited overflow:scroll.
        However, that broke the touch region computation.
        
        Fix by only ignoring the scroll offset for calls to computeRectForRepaint() which
        have a non-null repaintContainer (which indicates that we're doing a repaint in the
        compositing layer), and for which the repaintContainer is the containing block
        which is using composited scrolling. This restores correct behavior to the event region
        code which always calls this with a null repaintContainer.

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

2014-07-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Fix issues drawing subsampled image elements and CSS images
        https://bugs.webkit.org/show_bug.cgi?id=134944
        <rdar://problem/17634095>

        Reviewed by Dean Jackson.

        After r170675 it is important for BitmapImage::draw() to be given a srcRect computed
        using the original size of the image, not the subsampled size.
        
        So fix various code paths that end up in image drawing to use the originalSize(),
        which requires giving Image a virtual function that just returns size(), and hence has
        a FloatSize return value.
        
        Tested by setting a very low subsampling threshold and browsing various sites.
        
        A better longterm fix will happen via bug 134916.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::originalSize):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        (WebCore::Image::computeIntrinsicDimensions):
        * platform/graphics/Image.h:
        (WebCore::Image::originalSize):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage): Just use m_size for initializing the other members.
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):

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

        [Win] Unreviewed build fix after r171069.

        Add missing AudioHardwareListener implementation on Windows.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

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

        REGRESSION (r155957): Invalid cast in WebCore::RenderNamedFlowThread::getRanges
        https://bugs.webkit.org/show_bug.cgi?id=134888

        Reviewed by Mihnea Ovidenie.

        Test: fast/regions/flowthread-getranges-box-cast.html

        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges): Test the type before casting.

2014-07-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Update GObject DOM bindings symbols file after r171014.
        https://bugs.webkit.org/show_bug.cgi?id=134907

        Reviewed by Philippe Normand.

        * bindings/gobject/webkitdom.symbols: Update to the current API.

2014-07-15  Manuel Rego Casasnovas  <rego@igalia.com>

        Unreviwed fix wrong indentation from r171082.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):

2014-07-14  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Zero sized compositing container's content positioned off by one device pixel.
        https://bugs.webkit.org/show_bug.cgi?id=134903

        Reviewed by Simon Fraser.

        The compositing layer boundaries are calculated using its renderer()'s and the renderer()'s
        descendants' bounds. However when the renderer() is zero sized, its bounds are omitted.
        In such cases, when the child content has offset from the renderer(), the subpixel adjustment
        of the compositing layer becomes negative (-meaning that the compositing layer is to the right/bottom
        direction from its renderer()). Remove fabs() to be able to express such direction.

        Test: compositing/hidpi-compositing-layer-with-zero-sized-container.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2014-07-14  Jeremy Jones  <jeremyj@apple.com>

        Fix crash on WebVideoFullscreenManagerProxy construction.
        https://bugs.webkit.org/show_bug.cgi?id=134909

        Unreviewed fix crash from r171089

        Remove unnecessary dispatch to main queue since it can happen during construction.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setWebVideoFullscreenModel): remove dispatch_async

2014-07-14  Jeremy Jones  <jeremyj@apple.com>

        WebVideoFullscreenInterfaceAVKit should only call the UI from main thread.
        https://bugs.webkit.org/show_bug.cgi?id=134890

        Reviewed by Eric Carlson.

        dispatch_async to the main thread before setting properties that would affect the UI.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setWebVideoFullscreenModel): wrap in call to dispatch_async
        (WebVideoFullscreenInterfaceAVKit::setDuration): ditto
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime): ditto
        (WebVideoFullscreenInterfaceAVKit::setRate): ditto
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions): ditto
        (WebVideoFullscreenInterfaceAVKit::setSeekableRanges): ditto
        (WebVideoFullscreenInterfaceAVKit::setAudioMediaSelectionOptions): ditto
        (WebVideoFullscreenInterfaceAVKit::setLegibleMediaSelectionOptions): ditto
        (WebVideoFullscreenInterfaceAVKit::setExternalPlayback): ditto

2014-07-14  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Fix the !ENABLE(FILTERS) && !ENABLE(CSS_FILTERS) build after r167497
        https://bugs.webkit.org/show_bug.cgi?id=134679

        Reviewed by Darin Adler.

        * html/ImageData.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:

2014-07-14  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Support sparse in auto-placement algorithm
        https://bugs.webkit.org/show_bug.cgi?id=134544

        Reviewed by Sergio Villar Senin.

        This patch implements sparse mode for auto-placement algorithm, which is
        the default mode in the new grid-auto-flow syntax. It keeps track of the
        auto-placement cursor in
        RenderGrid::placeAutoMajorAxisItemsOnGrid() and updates it accordingly
        when auto-positioned items are placed.
        If we're in dense mode it resets the cursor after each item (which keeps
        the old behavior that was using dense mode by default).

        GridIterator has been adapted to look for empty areas from a given
        position in both directions.

        Test: fast/css-grid-layout/grid-auto-flow-sparse.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator): Modify constructor to
        add an optional argument for the varying index. This allows to look for
        empty areas in both axis.
        (WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid): Defined the
        auto-placement cursor and rested after each item if we're in dense mode.
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid): Use auto-placement
        cursor to look for empty areas from the last auto-positioned item
        placed.
        * rendering/RenderGrid.h: Modify placeAutoMajorAxisItemOnGrid() header
        to receive the auto-placement cursor.

2014-07-14  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Some videos play as inline audio-only content
        https://bugs.webkit.org/show_bug.cgi?id=134898.
        <rdar://problem/17629379>

        Reviewed by Eric Carlson.

        Add a new 'presentationType' accessor that indicates if the media
        element is playing in 'audio' mode. This can happen if a video
        element plays an HLS stream that starts off in audio-only mode.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::presentationType): Added.
        * html/HTMLMediaElement.h:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::presentationType): Added.
        * platform/audio/MediaSession.h:
        * platform/audio/MediaSessionManager.cpp: 
        (WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback):
        Use the presentationType, rather than the mediaType to control
        inline playback behavior.
        * platform/audio/ios/AudioDestinationIOS.h:
        (WebCore::AudioDestinationMac::presentationType): Add presentationType.
        * platform/audio/mac/AudioDestinationMac.h:
        (WebCore::AudioDestinationMac::presentationType): Ditto.

2014-07-14  Bear Travis  <betravis@adobe.com>

        [Feature Queries] Enable Feature Queries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=134404

        Reviewed by Antti Koivisto.

        Enable Feature Queries on Mac and resume running the
        feature tests.

        * Configurations/FeatureDefines.xcconfig: Turn on
        ENABLE_CSS3_CONDITIONAL_RULES.

2014-07-11  David Hyatt  <hyatt@apple.com>

        <rdar://problem/17305458> Cannot interact with video controls in ePubs
        Bug 134836 - [New Multicolumn] Crawl to check for compositing between us and the enclosingPaginationLayer
        https://bugs.webkit.org/show_bug.cgi?id=134836

        Reviewed by Dean Jackson.

        The paginatedAndComposited bit being set in updateLayerPositions just didn't work, since compositing states
        can change without triggering that function. This patch just gets rid of the bit and does a crawl every time
        to check. This ensures that changes in compositing states don't necessitate any changes in pagination,
        since the lookup will always check the current compositing state.
        
        The new function that does this check is hasCompositedLayerInEnclosingPaginationChain.
        
        I have been unable to reproduce this issue, and this is therefore a purely speculative fix. I have no test
        case to provide because of this.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::hasCompositedLayerInEnclosingPaginationChain):
        (WebCore::RenderLayer::updatePagination):
        * rendering/RenderLayer.h:

2014-07-14  Zalan Bujtas  <zalan@apple.com>

        Move composite bounds calculation to RenderLayerBacking.
        https://bugs.webkit.org/show_bug.cgi?id=134864

        Reviewed by Darin Adler.

        No change in functionality.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp: it was just proxying the calculateLayerBounds()
        to the RenderLayer.
        (WebCore::RenderLayerCompositor::calculateCompositedBounds): Deleted.
        * rendering/RenderLayerCompositor.h:

2014-07-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/audio/MediaSessionManager.h:

2014-07-14  Eric Carlson  <eric.carlson@apple.com>

        [Mac] don't enable low power audio mode on external output devices
        https://bugs.webkit.org/show_bug.cgi?id=134877

        Reviewed by Sam Weinig.

        No new tests, this deals with changes to the audio hardware at runtime.

        * WebCore.xcodeproj/project.pbxproj: Remove AudioSessionListener.h.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.

        * platform/audio/AudioHardwareListener.cpp:
        (WebCore::AudioHardwareListener::AudioHardwareListener): Initialize m_outputDeviceSupportsLowPowerMode
            to true on iOS.
        * platform/audio/AudioHardwareListener.h:
        (WebCore::AudioHardwareListener::outputDeviceSupportsLowPowerMode): New accessor.
        (WebCore::AudioHardwareListener::setHardwareActivity): New setter for derived classes.
        (WebCore::AudioHardwareListener::setOutputDeviceSupportsLowPowerMode): Ditto.

        Remove AudioSessionListener interface, it wasn't being used.
        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::addListener): Deleted.
        (WebCore::AudioSession::removeListener): Deleted.
        (WebCore::AudioSession::beganAudioInterruption): Deleted.
        (WebCore::AudioSession::endedAudioInterruption): Deleted.
        * platform/audio/AudioSession.h:
        * platform/audio/AudioSessionListener.h: Removed.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::addSession): Allocate the AudioHardwareListener if necessary.
        (WebCore::MediaSessionManager::removeSession): Free the AudioHardwareListener if necessary.
        (WebCore::MediaSessionManager::audioOutputDeviceChanged): AudioHardwareListener client interface
            called when the output device changes, call updateSessionState to make sure we are using
            the correct buffer size.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionPrivate::AudioSessionPrivate): Drive-by cleanup, remove ObjC helper object
            that was used to listen for OS notifications, it is no longer used.
        (SOFT_LINK_POINTER): Deleted.
        (-[WebAudioSessionHelper initWithCallback:]): Deleted.
        (-[WebAudioSessionHelper dealloc]): Deleted.
        (-[WebAudioSessionHelper interruption:]): Deleted.

        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::currentDeviceSupportsLowPowerBufferSize): New, return true only if using build-in 
            transport device.
        (WebCore::processIsRunningPropertyDescriptor): Return reference to static AudioObjectPropertyAddress
            for kAudioHardwarePropertyProcessIsRunning instead of declaring one in every method
            that needs one.
        (WebCore::outputDevicePropertyDescriptor): Return reference to static AudioObjectPropertyAddress
            for kAudioHardwarePropertyDefaultOutputDevice.
        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac): Restructure and add audio object
            listener for default output device.
        (WebCore::AudioHardwareListenerMac::~AudioHardwareListenerMac): *Remove* listener audio object
            property listener instead of *Adding* a new one. Remove new listener.
        (WebCore::AudioHardwareListenerMac::propertyChanged): Enumerate the properties that changed,
            call appropriate method.
        (WebCore::AudioHardwareListenerMac::processIsRunningChanged): Renamed from setHardwareActive, 
            cleanup.
        (WebCore::AudioHardwareListenerMac::outputDeviceChanged): New, call client.audioHardwareOutputDeviceChanged.
        (WebCore::AudioHardwareListenerMac::setHardwareActive): Deleted, renamed processIsRunningChanged.
        * platform/audio/mac/AudioHardwareListenerMac.h:

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): Only set the output buffer size to 4K when hardware
            supports it.

2014-07-13  Benjamin Poulain  <benjamin@webkit.org>

        Remove SelectorCheckerFastPath from the style resolution algorithm
        https://bugs.webkit.org/show_bug.cgi?id=134866

        Reviewed by Antti Koivisto.

        SelectorCheckerFastPath is now pure overhead because it can almost never match
        if the CSS JIT was unable to compile.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        The "pre-filter" behind fastCheckableSelector had two parts:
        1) Filtering the pseudoID.
        2) Filtering on the rule hash.

        The first part has been generalized (RuleDatacanMatchPseudoElement())
        and moved to collectMatchingRulesForList(). 

        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/RuleSet.cpp:
        (WebCore::selectorCanMatchPseudoElement):
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
        (WebCore::RuleData::canMatchPseudoElement):
        (WebCore::RuleData::hasFastCheckableSelector): Deleted.
        * css/StyleResolver.cpp:

2014-07-13  Benjamin Poulain  <benjamin@webkit.org>

        Remove an useless check from SelectorChecker
        https://bugs.webkit.org/show_bug.cgi?id=134868

        Reviewed by Darin Adler.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        The condition of this if() branch can never be met for the mode "QueryingRules".

        The next condition in that if() is "dynamicPseudo != NOPSEUDO", which implies
        a pseudo element was matched prior to the current context/simple selector.
        This cannot happen with QueryingRules, since we never match pseudo elements for
        SelectorQuery.

2014-07-12  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        Elements with rendering disabled due to dimensions should not contribute to parent bounding box
        https://bugs.webkit.org/show_bug.cgi?id=134184

        Reviewed by Dirk Schulze.

        SVG elements that have rendering disabled should not contribute to any ancestor elements bounding box.
        Examples of elements with rendering disabled:
        - basic shape with width <= 0 or height <= 0
        - path with no path data (d attribute missing or empty)
        - polyline or polygon element with no point data (points attribute missing or empty)

        To achieve this a method (isRenderingDisabled) was added to RenderSVGShape and it's derived classes.
        This is used to determine if an element is included when creating the union of child bounding boxes
        in a container element.

        Tests: svg/custom/GetBBox-path-nodata.html
               svg/custom/GetBBox-polygon-nodata.html
               svg/custom/GetBBox-polyline-nodata.html
               svg/custom/getBBox-container-hiddenchild.html

        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::isRenderingDisabled):
        New method added. Checks bounding box to determine if rendering is disabled.
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::isRenderingDisabled):
        New method added. Checks bounding box to determine if rendering is disabled.
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::isRenderingDisabled):
        New method added. Checks bounding box to determine if rendering is disabled.
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::isRenderingDisabled):
        New method added. Always returns false so that derived classes that do not
        implement this method retain the existing behaviour.
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):
        For each element potentially being included in the unioned bounding box of
        a container, check isRenderingDisabled and skip that element if true.

        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::isRenderingDisabled):
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::isRenderingDisabled):
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::isRenderingDisabled):
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):

2014-07-12  Benjamin Poulain  <benjamin@webkit.org>

        Rename selectorListContainsUncommonAttributeSelector() to selectorListContainsAttributeSelector()
        https://bugs.webkit.org/show_bug.cgi?id=134862

        Reviewed by Sam Weinig.

        Unlike containsUncommonAttributeSelector(), selectorListContainsUncommonAttributeSelector() does not
        evaluate the attribute for "uncommon" types.

        It would be possible to change the function instead to evaluate common attributes based
        on the match type and the pseudo class type. Such change would be more risky
        and we would get very little benefit from it, I leave that for later if that ever becomes useful.

        * css/RuleSet.cpp:
        (WebCore::selectorListContainsAttributeSelector):
        (WebCore::containsUncommonAttributeSelector):
        (WebCore::selectorListContainsUncommonAttributeSelector): Deleted.

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

        Use braced-init-list to create one-item Vector object in insertPerformanceEntry
        https://bugs.webkit.org/show_bug.cgi?id=133675

        Reviewed by Darin Adler.

        * page/PerformanceUserTiming.cpp:
        (WebCore::insertPerformanceEntry): Avoid wasting three lines for creating a
        Vector object with just one item that in the end gets copied. Use the
        braced-init-list syntax instead, leveraging Vector's std::initializer_list
        constructor.

2014-07-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Memory leaks with autoLoadImages off
        https://bugs.webkit.org/show_bug.cgi?id=124411

        Reviewed by Darin Adler.

        Do not emit notifyFinished for images with deferred load,
        and allow deferred loads to be cancelled.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::checkNotify):
        (WebCore::CachedResource::cancelLoad):

2014-07-11  Jer Noble  <jer.noble@apple.com>

        [MSE] http/tests/media/media-source/mediasource-duration.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=134852

        Reviewed by Eric Carlson.

        Fixes the following tests:
        http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate.html
        http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate.html
        http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate.html
        http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html
        http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html
        http/tests/media/media-source/mediasource-duration.html
        http/tests/media/media-source/mediasource-play.html

        The primary change necessary to fix the mediasource-duration.html test was to add support
        for delaying the completion of a seek operation until the HTMLMediaElement's readyState
        rises to > HAVE_CURRENT_DATA. This is accomplished by modifying MediaSourcePrivate to have
        waitForSeekCompleted() and seekCompleted() virtual methods. These are called by MediaSource
        when a seek operation results in the current time moving outside the currently buffered time
        ranges, and when an append operation results in the readyState changing, respectively.

        A number of other drive-by fixes were necessary to get this test fully passing, as noted
        below.

        Make the MediaSource the primary owner of the media's duration, rather than the MediaSourcePrivate.
        Move the MediaSourcePrivateClient pointer to the MediaSourcePrivate from the MediaPlayerPrivate, so
        the MediaSource's duration can be retrieved.  While we're at it, do the same thing for buffered.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource): Initialize m_duration.
        (WebCore::MediaSource::duration): Simple accessor.
        (WebCore::MediaSource::setDurationInternal): Bring 'duration change algorithm' up to spec.
        (WebCore::MediaSource::setReadyState): Reset m_duration on close.
        * Modules/mediasource/MediaSource.h:
        * platform/graphics/MediaSourcePrivate.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load): Do not call setPrivateAndOpen().
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble): Pass through to MediaSourcePrivateAVFObjC.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered): Ditto.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::create): Call setPrivateAndOpen().
        (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC): Set m_client.
        (WebCore::MediaSourcePrivateAVFObjC::duration): Pass through to MediaSourcePrivateClient.
        (WebCore::MediaSourcePrivateAVFObjC::buffered): Ditto.
        (WebCore::MediaSourcePrivateAVFObjC::durationChanged): Pass through to MediaPlayerPrivateMediaSourceAVFObjC.
        (WebCore::MediaSourcePrivateAVFObjC::setDuration): Deleted.
        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::open): Pass in MediaSourcePrivateClient.
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer): Initialize m_mediaSource.
        (WebCore::MediaSourceGStreamer::durationChanged): Retrieve the duration from MediaSourcePrivateClient.
        (WebCore::MediaSourceGStreamer::markEndOfStream): Remove unnecssary ASSERT.
        (WebCore::MediaSourceGStreamer::unmarkEndOfStream): Ditto.
        (WebCore::MediaSourceGStreamer::setDuration): Deleted.
        * platform/graphics/gstreamer/MediaSourceGStreamer.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::load): Do not call setPrivateAndOpen().
        (WebCore::MockMediaPlayerMediaSource::buffered): Pass through to MockMediaSourcePrivate.
        (WebCore::MockMediaPlayerMediaSource::durationDouble): Ditto.
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime): Ditto.
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::create): Call setPrivateAndOpen().
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate): Set m_client.
        (WebCore::MockMediaSourcePrivate::duration): Pass through to MediaSourcePrivateClient.
        (WebCore::MockMediaSourcePrivate::buffered): Ditto.
        (WebCore::MockMediaSourcePrivate::durationChanged): Pass thorugh to MockMediaPlayerMediaSource.
        (WebCore::MockMediaSourcePrivate::setDuration): Deleted.

        Route seekToTime through MediaSource, rather than through MediaSourcePrivate, so that
        the time can be compared against the buffered ranges, and trigger the delay of the seek
        operation if necessary. Add a seekTimer to MediaPlayerPrivateMediaSourceAVFObjC, as this
        guarantees the order of asynchronous operations, rather than callOnMainThread, which can
        cause async operations to occur out of order.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::seekToTime): Bring up to spec.
        (WebCore::MediaSource::completeSeek): Ditto.
        (WebCore::MediaSource::monitorSourceBuffers): Call completeSeek() when appropriate.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime): Deleted.
        (WebCore::SourceBuffer::seekToTime): Renamed from sourceBufferPrivateSeekToTime().
        * platform/graphics/MediaSourcePrivate.h:
        * platform/graphics/MediaSourcePrivateClient.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC): Add seekTimer. Only
            call timeChanged() if no longer seeking, thereby triggering a 'seeked' event.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC): Clear m_seekTimer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance): Use m_seekTimer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekTimerFired): Call seekInternal.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal): Add logging.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitForSeekCompleted): Added.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekCompleted): Added; trigger 'seeked'.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState): No longer attempt to finish seek when
            readyState changes here; this has been moved up to MediaSource.cpp.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::waitForSeekCompleted): Pass through to MediaPlayerPrivateMediaSourceAVFObjC.
        (WebCore::MediaSourcePrivateAVFObjC::seekCompleted): Ditto.
        (WebCore::MediaSourcePrivateAVFObjC::seekToTime): Pass through to MediaSourcePrivateClient.
        (WebCore::MediaSourcePrivateAVFObjC::fastSeekTimeForMediaTime): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::MockMediaPlayerMediaSource): Initialize m_seekCompleted.
        (WebCore::MockMediaPlayerMediaSource::seeking): Check for an uncompleted seek operation. 
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance): Ditto.
        (WebCore::MockMediaPlayerMediaSource::waitForSeekCompleted): Added.
        (WebCore::MockMediaPlayerMediaSource::seekCompleted): Added; trigger 'seeked'.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::waitForSeekCompleted): Pass through to MockMediaPlayerMediaSource.
        (WebCore::MockMediaSourcePrivate::seekCompleted): Ditto.
        * platform/mock/mediasource/MockMediaSourcePrivate.h:

        Drive-by fixes.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::streamEndedWithError): Re-order the steps in streamEndedWithError()
            to avoid the MediaSource being closed and re-opened by the resulting duration change
            operation.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::remove): Added logging.
        (WebCore::SourceBuffer::removeCodedFrames): Ditto.
        (WebCore::SourceBuffer::hasFutureTime): Swap an ASSERT for an early-return; it's possible
            for currentTime() to be outside of a buffered area.
        * Modules/mediasource/SourceBuffer.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Do not issue an additional 'timeupdate' event
            after finishSeek() issues one of its own.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::globalDataParserQueue): Allow parsing operations to happen concurrently on
            background queues.

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

        [iOS] update control type when playback state changes
        https://bugs.webkit.org/show_bug.cgi?id=134856

        Reviewed by Dean Jackson.

        Check to make sure the correct type of media controls are showing when playback state
        changes so we don't end up with the wrong type of controls during playback.

        * Modules/mediacontrols/mediaControlsApple.js: 
        (Controller.prototype.HandledVideoEvents): Drive-by fix, call handlePlay on 'playing' instead
            of 'play' so controls don't hide too early.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.setPlaying): New, call updateControls to make sure inline
            controls are shown when appropriate.

2014-07-12  Dean Jackson  <dino@apple.com>

        [iOS Media] Start playback button should indicate when it can't play
        https://bugs.webkit.org/show_bug.cgi?id=134851

        Post-commit review with Eric Carlson on IRC.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateStatusDisplay): Remove the line that sets the
        class on the inline play button.

2014-07-11  Dean Jackson  <dino@apple.com>

        [iOS Media] Start playback button should indicate when it can't play
        https://bugs.webkit.org/show_bug.cgi?id=134851

        Reviewed by Sam Weinig.

        If a video element has errors and cannot play, then the start
        playback button should use the "broken" icon.

        * Modules/mediacontrols/mediaControlsApple.js: Add a new "failed" class.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton): We need a playback button
        even when there is an error.
        (ControllerIOS.prototype.handleWirelessPickerButtonTouchStart): Don't offer Airplay
        if we're in an error state.
        (ControllerIOS.prototype.updateStatusDisplay): Set the "failed" class on
        the playback buttons if we are in an error state.

2014-07-11  Benjamin Poulain  <benjamin@webkit.org>

        Partition the CSS rules based on the most specific filter of the rightmost fragment
        https://bugs.webkit.org/show_bug.cgi?id=134828

        Reviewed by Andreas Kling.

        Previously, RuleSet was partitioning each rule based on the rightmost filter.
        While fast, this had the side effect of putting many selectors with ID match in the class
        bucket (because the selectors are generally written starting with the ID).

        This patch replace the code of findBestRuleSetAndAdd() by a simple loop going over all
        the simple selectors in the rightmost fragment to find the best bucket.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/RuleSet.cpp:
        (WebCore::isSelectorMatchingHTMLBasedOnRuleHash):
        I unified ruleData.hasRightmostSelectorMatchingHTMLBasedOnRuleHash() and hasMultipartSelector().

        (WebCore::RuleData::RuleData):
        (WebCore::rulesCountForName):
        (WebCore::RuleSet::addRule):
        I removed the recursive part of findBestRuleSetAndAdd() (which was wrong anyway). The function
        was useless so I just moved the algorithm to addRule() directly.

        We first loop over all the CSSSelectors related by SubSelector, this correspond to the rightmost fragment.
        If a filter with high specificity is found, we add the rule immediately and end there.
        If a filter that is not very specific is found, we keep a pointer to the selector to use it later.

        (WebCore::RuleSet::findBestRuleSetAndAdd): Deleted.
        * css/RuleSet.h:
        (WebCore::RuleData::hasMultipartSelector): Deleted.

2014-07-11  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Unreviewed build fix after r170937.

        * WebCore.vcxproj/WebCoreGeneratedWinCairo.make:
        Update and apply changes applied to WebCoreGenerated.make in r170937.

2014-07-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash when using a stale InspectableNode Node
        https://bugs.webkit.org/show_bug.cgi?id=134849

        Reviewed by Timothy Hatcher.

        * inspector/PageConsoleAgent.cpp:

2014-07-11  Jer Noble  <jer.noble@apple.com>

        [MSE] Separate MediaSource logging into its own log channel
        https://bugs.webkit.org/show_bug.cgi?id=134809

        Reviewed by Eric Carlson.

        Separate out MediaSource logging (which can be quite verbose) into its own log channel,
        distinct from the Media log channel. Add some per-sample logging and further sequester that
        logging into its own MediaSourceSamples log channel.

        Add the MediaSource and MediaSourceSamples channels:
        * platform/Logging.h:

        Move LOG(Media) -> LOG(MediaSource):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::~MediaSource):
        (WebCore::MediaSource::setReadyState):
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::removeSourceBuffer):
        (WebCore::MediaSource::isTypeSupported):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        (WebCore::SourceBuffer::provideMediaData):
        (WebCore::SourceBuffer::monitorBufferingRate):
        (WebCore::SourceBuffer::textTrackAddCues):
        (WebCore::SourceBuffer::hasFutureTime):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferPrivateAVFObjC::didFailToParseStreamDataWithError):
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::layerDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::rendererDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):

2014-07-11  Brady Eidson  <beidson@apple.com>

        Phone numbers that span two lines are not detected.
        <rdar://problem/17601146> and https://bugs.webkit.org/show_bug.cgi?id=134808

        Reviewed by Tim Horton.

        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers): After scanning a range from the TextIterator,
            create an "edge range" window around the end of the TextIterator range, and scan it.
            Also make sure to not accumulate duplicate ranges that might have showed up in both the
            TextIterator range and the edge window range.

2014-07-11  Enrica Casucci  <enrica@apple.com>

        Implement textStylingAtPosition in WK2.
        https://bugs.webkit.org/show_bug.cgi?id=134843
        <rdar://problem/17614981>
        
        Reviewed by Benjamin Poulain.

        Adding some exports and making styleForSelectionStart public.

        * WebCore.exp.in:
        * editing/Editor.h:

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

        REGRESSION (r168868): eBay 'see all' links fail due to different JS bindings conversion behavior.
        https://bugs.webkit.org/show_bug.cgi?id=134841
        <rdar://problem/17577563>

        Reviewed by Simon Fraser.

        Revert back to type int for Element.scroll* APIs in order to preserve exception handling
        behavior.

        Test: cssom/non-subpixel-scroll-top-left-values.html

        * dom/Element.cpp:
        (WebCore::Element::scrollLeft):
        (WebCore::Element::scrollTop):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        * dom/Element.h:
        * dom/Element.idl:
        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom):
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        (WebCore::HTMLBodyElement::scrollHeight):
        (WebCore::HTMLBodyElement::scrollWidth):
        * html/HTMLBodyElement.h:

2014-07-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger Pause button does not work
        https://bugs.webkit.org/show_bug.cgi?id=134785

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * inspector/CommandLineAPIModuleSource.js:
        Minification strips the sourceURL command. Add it back with minification.

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

        Use the bare minimum tile coverage rect when under memory pressure.
        <https://webkit.org/b/134837>

        When the browser is under critical memory pressure, don't generate any
        more tiles than are needed to cover the exposed viewport rect.

        Reviewed by Pratik Solanki.

        * page/FrameView.cpp:
        (WebCore::FrameView::computeCoverageRect):

2014-07-11  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Implement justify-self css property
        https://bugs.webkit.org/show_bug.cgi?id=134419

        Reviewed by Dean Jackson.

        This change adds the justify-self property from CSS 3 Box Alignment
        and implements the parsing.

        From Blink r164685 by <jchaffraix@chromium.org>

        Test: fast/css/parse-justify-self.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::isItemPositionKeyword):
        (WebCore::CSSParser::parseJustifySelf):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EJustifySelf):
        (WebCore::CSSPrimitiveValue::operator EJustifySelfOverflowAlignment):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-07-11  Bear Travis  <betravis@adobe.com>

        [Feature Queries] Feature Query CSS Grammar Productions Should Return a Value
        https://bugs.webkit.org/show_bug.cgi?id=134810

        Reviewed by Antti Koivisto.

        The parsing return values are used to determine if a feature query is valid. Two
        grammar productions have been updated to correctly return a value.

        Tests exist for this feature but will not be run until the feature is turned on.
        See https://bugs.webkit.org/show_bug.cgi?id=134404.

        * css/CSSGrammar.y.in: Adding return values for two valid feature query productions.

2014-07-10  Brent Fulgham  <bfulgham@apple.com>

        Use a separate backdrop element to allow cues to have highlight and background color
        https://bugs.webkit.org/show_bug.cgi?id=134821
        <rdar://problem/15999721>

        Reviewed by Eric Carlson.

        Add a new <div> element wrapping the existing cue <span>. This allows
        us to have a highlight on the cue (in the <span> background), as well
        as an overall background color.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-text-track-display-backdrop): New markup for
        the backdrop element of the caption.
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::cueBackdropShadowPseudoId): Added to
        allow user customization of the cue backdrop.
        (WebCore::VTTCue::initialize): Rename the old "m_cueBackgroundBox" to
        "m_cueHighlightBox" and add a new "m_cueBackdropBox" member.
        (WebCore::VTTCue::updateDisplayTree): Update for m_cueHighlightBox.
        (WebCore::VTTCue::getDisplayTree): Make m_cueHighlightBox a child
        of the new m_cueBackdropBox element, and add m_cueBackdropBox to
        the display tree.
        * html/track/VTTCue.h:
        (WebCore::VTTCue::element):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges):
        Fix for missing caption style updates. Even if we are already
        listening for caption changes, we still want to update the new
        instance's style sheet to match.
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride):
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::initializeLayoutParameters): Take the new
        <div> into consideration when looking for the Cue text element.

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

        Subpixel layout: return integral results for offset*, client*, scroll* by default.
        https://bugs.webkit.org/show_bug.cgi?id=134651

        Reviewed by Simon Fraser.

        Revert to returning integral values for Element.offset* client* scroll* by default.
        Fractional values break number of sites(tight design) and JS frameworks(fail to handle fractional values).

        Since snapped dimension depends on both the original point and the width/height of the box,
        we need to call RenderBoxModelObject::pixelSnapped*() helpers, instead of round().

        Covered by existing tests
 
        * dom/Element.cpp:
        (WebCore::subpixelMetricsEnabled):
        (WebCore::convertToNonSubpixelValueIfNeeded):
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientLeft):
        (WebCore::Element::clientTop):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        * page/Settings.in:

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

        Subpixel rendering: icloud.com password arrow has clipped circle at some window sizes.
        https://bugs.webkit.org/show_bug.cgi?id=134824
        <rdar://problem/17612729>

        Reviewed by Simon Fraser.

        Transparent layer clipping needs device pixel offset adjusting.

        Test: fast/layers/wrong-clipping-semi-transparent-compositing-layer-on-subpixel-position.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        * rendering/RenderLayer.h:

2014-07-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Remove unused file.

        * html/shadow/MediaControlsGtk.h: Removed.

2014-07-11  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Update grid-auto-flow to the new syntax
        https://bugs.webkit.org/show_bug.cgi?id=134057

        Reviewed by Sergio Villar Senin.

        In last versions of the spec grid-auto-flow syntax has changed. New
        syntax is:
        [ row | column ] && dense? | stack && [ row | column ]?

        Implemented parsing for new syntax and added/modified test cases in
        current layout tests.

        For the moment, the implementation keeps working in the same way, but
        using "stack" value for grid-auto-flow property instead of "none". This
        should be fixed in a follow-up patch once "stack" is properly
        implemented.

        Also "dense" needs to be reviewed. Right now auto-placement algorithm is
        always "dense" and never "sparse".

        No new tests, update current tests to add new cases.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Adapt to new syntax.
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): Removed grid-auto-flow as it
        is not a keyword anymore.
        (WebCore::isKeywordPropertyID): Ditto.
        (WebCore::CSSParser::parseValue): Add specific method for parsing
        grid-auto-flow.
        (WebCore::CSSParser::parseGridShorthand): Adapt parsing for
        grid-auto-flow property inside the shorthand.
        (WebCore::isValidGridAutoFlowId): Helper method to check if the CSSValue
        id is a valid keyword for grid-auto-flow property.
        (WebCore::CSSParser::parseGridAutoFlow): Implement new parsing for
        grid-auto-flow.
        * css/CSSParser.h: Method header for grid-auto-flow parsing.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator GridAutoFlow): Deleted.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Deleted.
        * css/CSSValueKeywords.in: Add new keywords required by grid-auto-flow:
        "dense" and "stack".
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Remove
        default handler as grid-auto-flow is not a keyword now.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Implement particular handler
        for new grid-auto-flow syntax.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeItemsOnGrid): Keep old "none" behavior as
        "stack" behavior for the moment.
        (WebCore::RenderGrid::autoPlacementMajorAxisDirection): Use the new
        helper methods in RenderStyle.
        (WebCore::RenderGrid::autoPlacementMinorAxisDirection): Ditto.
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::resolveGridPositionsFromStyle): Again
        keep old "none" behavior for "stack".
        * rendering/style/RenderStyle.h: Add new helper methods to know the
        direction and algorithm of grid-auto-flow property.
        * rendering/style/RenderStyleConstants.h: Redefine GridAutoFlow enum
        using flags for algorithm and direction.
        * rendering/style/StyleGridData.h: Change m_gridAutoFlow type to
        unsigned.

2014-07-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Pasting rich content does not perform a two-step paste
        https://bugs.webkit.org/show_bug.cgi?id=134795

        Reviewed by Benjamin Poulain.

        UIKit requires writing something (anything!) to a particular pasteboard
        during copy in order to flag the content as rich. When a paste occurs,
        UIKit will read this flag and perform a two-step paste.

        Test: platform/ios-sim/editing/pasteboard/two-step-paste.html

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2014-07-09  Andy Estes  <aestes@apple.com>

        [iOS] Some QuickLook documents are not displayed as previews
        https://bugs.webkit.org/show_bug.cgi?id=134788
        <rdar://problem/17278194>

        Reviewed by Pratik Solanki.

        ResourceRequest::isMainResourceRequest() is not reliable (e.g. ResourceRequests reconstituted from an
        NSURLRequest have no way to set this bit properly) and should probably be removed. Instead of using
        isMainResourceRequest() to check if a QuickLookHandle should be created when the Network Process is in use,
        just check if the current ResourceLoader is the same as the DocumentLoader's ResourceLoader.

        No new tests. QuickLook is not testable from WebKit.

        * platform/network/ios/QuickLook.mm:
        (WebCore::QuickLookHandle::create):

2014-07-10  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Don't uninstall the memory pressure listener after first signal.
        <https://webkit.org/b/134814>

        The call to uninstall() should not be made on iOS since iOS doesn't use the
        hold-off mechanism in MemoryPressureHandler.

        Reviewed by Benjamin Poulain.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

2014-07-10  Jer Noble  <jer.noble@apple.com>

        [MSE] Overlapping appended ranges must cause the decoder to flush and re-enqueue.
        https://bugs.webkit.org/show_bug.cgi?id=134805

        Reviewed by Eric Carlson.

        When appending a range of media data which overlaps with an existing range, SourceBuffer
        must cause the decoder to flush and re-enqueue samples. Those samples removed by appending
        the overlapping range may have already been enqueued for display, and unless the decode
        queue is flushed, corruption or decode errors may occur as the new samples are enqueued for
        display.

        Add a boolean flag onto TrackBuffer to indicate whether the decoder needs to be flushed and
        re-enqueued the next time an append operation completes. Set this flag whenever samples are
        removed due to overlapping or an explicit call to removeCodedFrames(). Move the contents of
        sourceBufferPrivateSeekToTime() (which previously did flushing and re-enqueueing) into a new
        function, reenqueueMediaForTime(), which can be called from sourceBufferPrivateAppendComplete().

        Drive-by fix: findSyncSampleAfterDecodeIterator() would return the passed in iterator if that
        sample is a sync-sample. Fix this to correctly return the next sync sample.

        Drive-by fix: Use a SampleMap, rather than a DecodeOrderSampleMap, to track erased samples
        so that the erasedSamples are correctly accounted for in both presentation and decode orders.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::SampleMap::empty): Add convenience method.
        (WebCore::DecodeOrderSampleMap::findSyncSampleAfterDecodeIterator): Drive-by fix.
        * Modules/mediasource/SampleMap.h:
        (WebCore::SampleMap::decodeOrder): Added const accessor.
        (WebCore::SampleMap::presentationOrder): Ditto.
        (WebCore::SampleMap::addRange): Added.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer): Add needsReenqueeing flag.
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime): Move contents into reenqueueMediaForTime().
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Call reenqueMediaForTime() if necessary.
        (WebCore::SourceBuffer::removeCodedFrames): Set needsReenqueing.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        (WebCore::SourceBuffer::provideMediaData): Drive-by fix.
        (WebCore::SourceBuffer::reenqueueMediaForTime): Moved from sourceBufferPrivateSeekToTime().
        * Modules/mediasource/SourceBuffer.h:

2014-07-10  Pratik Solanki  <psolanki@apple.com>

        ASSERT in SharedBuffer::maybeAppendDataArray() on MobileSafari launch
        https://bugs.webkit.org/show_bug.cgi?id=134812
        <rdar://problem/17628434>

        Reviewed by Joseph Pecoraro.

        Fix bug in my fix in r170930. Initialize the badly named m_shouldUsePurgeableMemory field to
        false. This field indicates when it is okay to use purgeable memory and is set to true once
        the resource is finished loading. By setting it to true in the constructor we were creating
        purgeable memory while the resource was still being loaded and this triggered the assert.

        No new tests. Should be covered by existing tests.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):

2014-07-10  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Some memory pressure relief tweaks.
        <https://webkit.org/b/134811>

        Split memory pressure relief into critical and non-critical sections.
        Non-critical relief is for clearing out things that are really not
        essential, e.g unused font data, text measurement caches, etc.

        On iOS, only flip the "WebKit is under memory pressure" flag when we
        are under *critical* memroy pressure, rather than doing it early on
        and gimping ourselves because other processes are too big.

        Also added logging for when we transition in/out of system pressure.

        Reviewed by Geoffrey Garen.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseNoncriticalMemory):
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):
        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::ReliefLogger::loggingEnabled):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

2014-07-10  Beth Dakin  <bdakin@apple.com>

        Need Setting/WKPreference that allows clients to prevent scrollbars from drawing 
        on a secondary thread
        https://bugs.webkit.org/show_bug.cgi?id=134778
        -and corresponding-
        <rdar://problem/17595333>

        Reviewed by Tim Horton.

        This is a requirement for some types of performance tests. The patch adds a new 
        virtual function to ScrollableArea that forces subclasses to indicate the value of 
        the Setting. This is required because Scrollbar and ScrollableArea can’t get to 
        Settings on their own.

        * page/FrameView.cpp:
        (WebCore::FrameView::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):
        * page/FrameView.h:
        * page/Settings.in:
        * platform/ScrollableArea.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):
        * platform/win/PopupMenuWin.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):
        * rendering/RenderListBox.h:

2014-07-10  Brady Eidson  <beidson@apple.com>

        Phone number highlights should always be visible if the mouse hovers over.
        <rdar://problem/17527476> and https://bugs.webkit.org/show_bug.cgi?id=134784

        Reviewed by Tim Horton.

        * WebCore.exp.in:

2014-07-10  Timothy Horton  <timothy_horton@apple.com>

        Assertions or crashes under _takeViewSnapshot when restoring windows
        https://bugs.webkit.org/show_bug.cgi?id=134792

        Reviewed by Simon Fraser.

        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::createFromImage):

2014-07-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [XHR] overrideMimeType() should be able to change encoding in HEADERS RECEIVED state
        https://bugs.webkit.org/show_bug.cgi?id=128968

        Reviewed by Alexey Proskuryakov.

        Moved response encoding computation from didReceiveResponse to didReceiveData, just before the decoder is instantiated.
        This allows overrideMimeType to be changed within readystatechange event callback and have an impact on selected encoding.

        Test: http/tests/xmlhttprequest/overridemimetype-headers-received-state-force-shiftjis.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveResponse): Removed m_responseEncoding computation from response and mimeTypeOverride.
        (WebCore::XMLHttpRequest::didReceiveData): Added m_responseEncoding computation from response and mimeTypeOverride.

2014-07-09  Brady Eidson  <beidson@apple.com>

        Fire connected/disconnected events for Gamepads.
        https://bugs.webkit.org/show_bug.cgi?id=134386

        Reviewed by Dean Jackson.

        No new tests (No effect in a currently tested config)

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::navigatorGamepadFromDOMWindow): Handling converting a possibly-null Navigator into
            a possibly null NavigatorGamepad.
        (WebCore::GamepadManager::platformGamepadConnected): Notify blind Navigator/DOMWindows of all
            previously attached Gamepads, then notify everybody of this new gamepad.
        (WebCore::GamepadManager::platformGamepadDisconnected): Handle dispatching the disconnected
            event to all registered DOMWindows.
        (WebCore::GamepadManager::platformGamepadInputActivity): Notify blind Navigator/DOMWindows of all
            attached Gamepads.
        (WebCore::GamepadManager::makeGamepadVisible): Handles notifying setting up a new gamepads
            with all NavigatorGamepads as well as dispatching the connected even to DOMWindows.
        (WebCore::GamepadManager::registerDOMWindow):
        (WebCore::GamepadManager::unregisterDOMWindow):
        (WebCore::GamepadManager::makeGamepadsVisibileToBlindNavigators): Deleted.
        * Modules/gamepad/GamepadManager.h:

        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::gamepadAtIndex):
        * Modules/gamepad/NavigatorGamepad.h:

2014-07-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Disable text quantization while actively changing the page's scale factor
        https://bugs.webkit.org/show_bug.cgi?id=134781

        Reviewed by Tim Horton and Myles C. Maxfield.

        Query the chrome client to setup quantization on each layers.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::hasStablePageScaleFactor):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupFontSubpixelQuantization):

2014-07-09  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Cache entry invalidated too early.
        https://bugs.webkit.org/show_bug.cgi?id=134681

        Reviewed by Alex Christensen.

        When a cache entry has expired, it is invalidated when a request for the corresponding url is started.
        This is too early, since the resource is possibly not modified (even though it has expired),
        and the server might respond with a 304 (not modified) response.
        When we then receive a 304 response, the cache entry is deleted, and we have no cached response/data to provide.
        This can be solved by not invalidating the entry when a request for that url is started,
        but instead invalidate when a 200 OK response is received (which means the resource has been modified).

        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::isCached): Avoid invalidating cache entry when it has expired, wait until we know the server response.
        * platform/network/curl/CurlCacheManager.h: Added const modifier.

2014-07-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Revert r170413 and r170390
        https://bugs.webkit.org/show_bug.cgi?id=134741

        Reviewed by Benjamin Poulain.

        These patches caused a variety of failures. I'm going to break them up into
        smaller chunks and commit them separately at some point in the future.

        Requesting a review from Ben Poulain because there were some conflicts with
        r170561 in InlineTextBox.cpp and InlineTextBox.h.

        * WebCore.exp.in:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForText):
        (WebCore::computeUnderlineType):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawEmphasisMarksForSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForSimpleText):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::size):
        (WebCore::GlyphBuffer::glyphs):
        (WebCore::GlyphBuffer::advances):
        (WebCore::GlyphBuffer::fontDataAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::offsetAt):
        (WebCore::GlyphBuffer::reverse):
        (WebCore::GlyphBuffer::offsetInString):
        (WebCore::GlyphBuffer::swap):
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/Latin1TextIterator.h:
        (WebCore::Latin1TextIterator::Latin1TextIterator):
        (WebCore::Latin1TextIterator::currentCharacter):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::SurrogatePairAwareTextIterator::SurrogatePairAwareTextIterator):
        * platform/graphics/SurrogatePairAwareTextIterator.h:
        (WebCore::SurrogatePairAwareTextIterator::currentCharacter):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::length):
        (WebCore::TextRun::charactersLength):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::glyphDataForCharacter):
        (WebCore::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::adjustSelectionRectForComplexText):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setNormalizedBuffer):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::selectionState):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::positionForOffset):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::truncation):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::getStringToRender):
        * rendering/RenderCombineText.h:
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::ellipsisRectForBox):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::positionForOffset):
        (WebCore::SVGInlineTextBox::localSelectionRect):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGInlineTextBox::paintText):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::currentCharacterStartsSurrogatePair):
        (WebCore::SVGTextMetricsBuilder::advance):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::rotationOfCharacterCallback):
        (WebCore::SVGTextQuery::extentOfCharacterCallback):
        (WebCore::SVGTextQuery::characterNumberAtPositionCallback):
        * rendering/svg/SVGTextQuery.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGGlyphToPathTranslator::SVGGlyphToPathTranslator):
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontData.h:

2014-07-08  Jeffrey Pfau  <jpfau@apple.com>

        Fix flaky loading tests
        https://bugs.webkit.org/show_bug.cgi?id=133696

        Reviewed by Ryosuke Niwa.

        In some cases, the Frame may be destroyed while the loader is
        initializing. Make sure we don't delete it too early.

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

2014-07-09  Simon Fraser  <simon.fraser@apple.com>

        Make IndirectCompositingReason an enum class
        https://bugs.webkit.org/show_bug.cgi?id=134789

        Reviewed by Tim Horton.

        Make RenderLayer::IndirectCompositingReason an enum class, and change some code
        in RenderLayerCompositor::reasonsForCompositing() to use a switch.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore):
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason):

2014-07-09  Pratik Solanki  <psolanki@apple.com>

        Make SharedBuffer::append(SharedBuffer*) be smarter about CFData and data arrays
        https://bugs.webkit.org/show_bug.cgi?id=134731

        Reviewed by Antti Koivisto.

        If the target SharedBuffer has a CFDataRef or a data array then we can simply retain that
        CFDataRef or data array elements in the SharedBuffer being appended to. This avoids
        unnecessary copying.

        No new tests because no functional changes.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::maybeAppendPlatformData):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::maybeAppendPlatformData):
        (WebCore::SharedBuffer::maybeAppendDataArray):
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::maybeAppendPlatformData):

2014-07-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove uses of 'bash' in build system
        https://bugs.webkit.org/show_bug.cgi?id=134782
        <rdar://problem/17615533>

        Reviewed by Dean Jackson.

        Remove uses of 'bash' by replacing Windows-specific bash scripts
        with Perl equivalents.

        * WebCore.vcxproj/WebCoreGenerated.make:
        * WebCore.vcxproj/WebCoreGenerated.vcxproj:
        * WebCore.vcxproj/WebCoreGenerated.vcxproj.filters:
        * WebCore.vcxproj/WebCorePreBuild.cmd:
        * WebCore.vcxproj/build-generated-files.pl: Copied from Source/WebCore/WebCore.vcxproj/build-generated-files.sh.
        * WebCore.vcxproj/build-generated-files.sh: Removed.
        * WebCore.vcxproj/migrate-scripts.pl: Copied from Source/WebCore/WebCore.vcxproj/migrate-scripts.sh.
        * WebCore.vcxproj/migrate-scripts.sh: Removed.

2014-07-09  Anders Carlsson  <andersca@apple.com>

        Support transparent WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=134779
        <rdar://problem/17351058>

        Reviewed by Tim Horton.

        Schedule rebuilding the compositing layers if a FrameView's transparency changes.

        * page/FrameView.cpp:
        (WebCore::FrameView::setTransparent):

2014-07-09  Javier Fernandez  <jfernandez@igalia.com>
        CSS canvas color parsing accepts invalid color identifiers
        https://bugs.webkit.org/show_bug.cgi?id=134661

        Reviewed by Benjamin Poulain.

        Current implementation of the CSSParser::parseSystemColor assumes
        that if a valid cssValueKeywordID is got then it has to be a valid
        color. Such assumption is wrong and lead to many bugs and layout
        test failures.

        The parseSystemFunction determines now whether the parsed color is
        valid or not.

        Addtionally, a new method has been added to share the logic of
        determining whether a CSSValueID is a valid primitive values for
        colors or not. Generally, we should avoid passing invalid color
        identifiers to the theming API.

        No new tests, but added additional cases to the
        canvas-color-serialization.html, test-setting-canvas-color and
        rgb-color-parse test.

        * css/CSSParser.cpp:
        (WebCore::validPrimitiveValueColor): Added.
        (WebCore::parseColorValue):
        (WebCore::CSSParser::parseSystemColor):

2014-06-28  Jer Noble  <jer.noble@apple.com>

        [MSE] http/tests/media/media-source/mediasource-remove.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=134768

        Reviewed by Eric Carlson.

        Fix multiple bugs causing mediasource-remove.html to fail:

        Separate out setDuration() into setDurationInternal() so that steps which require
        us to run the "duration change algorithm" don't bail out if the SoureBuffer is
        inside updating().

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setDuration):
        (WebCore::MediaSource::setDurationInternal):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

        When removing coded frames, do so starting from the first sample in the range in
        decode order, so that frames dependant on removed frames are themselves removed. Add
        a convenience method in SampleMap findSampleWithPresentationTime(), and rename
        findSampleAfterPresentationTime() to findSampleOnOrAfterPresentationTime() to correctly
        reflect what the method does, and simplify its implementation by searching the map's keys
        directly.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::PresentationOrderSampleMap::findSampleWithPresentationTime):
        (WebCore::PresentationOrderSampleMap::findSampleOnOrAfterPresentationTime):
        (WebCore::DecodeOrderSampleMap::findSyncSampleAfterPresentationTime):
        (WebCore::PresentationOrderSampleMap::findSampleAfterPresentationTime): Deleted.
        * Modules/mediasource/SampleMap.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::decodeTimeComparator):
        (WebCore::SourceBuffer::removeCodedFrames):

        Throw the correct exception (INVALID_STATE_ERR) from SourceBuffer::remove().

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::remove):

2014-07-09  Pratik Solanki  <psolanki@apple.com>

        Add SharedBuffer::wrapCFDataArray() and use it
        https://bugs.webkit.org/show_bug.cgi?id=134733

        Reviewed by Antti Koivisto.

        No new tests. Should be covered by existing tests.

        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::wrapCFDataArray):
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::handleDataArray): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveDataArray):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveDataArray:]):

2014-07-09  Pratik Solanki  <psolanki@apple.com>

        Move resource buffering from SynchronousNetworkLoaderClient to NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=134732

        Reviewed by Darin Adler.

        No new tests because no functional changes.

        * WebCore.exp.in:

2014-07-09  Tim Horton  <timothy_horton@apple.com>

        Fix the !USE(IOSURFACE) build.

        * WebCore.exp.in:

2014-07-09  Tim Horton  <timothy_horton@apple.com>

        Use IOSurface ViewSnapshots everywhere on Mac, remove JPEG encoding path
        https://bugs.webkit.org/show_bug.cgi?id=134773

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::createFromImage):
        Move make-an-IOSurface-from-a-CGImageRef into WebCore::IOSurface.

2014-07-09  Enrica Casucci  <enrica@apple.com>

        Implement Editor::fontAttributesForSelectionStart() or iOS.
        https://bugs.webkit.org/show_bug.cgi?id=134771
        <rdar://problem/16167838>

        Reviewed by Ryosuke Niwa.

        Implement for iOS the equivalent function we have for OS X.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):

2014-07-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove use of 'grep' in build steps
        https://bugs.webkit.org/show_bug.cgi?id=134770
        <rdar://problem/17608783>

        Reviewed by Tim Horton.

        Replace uses of the grep command in Windows builds with the equivalent
        Perl program.

        * WebCore.vcxproj/WebCoreGenerated.make:
        * WebCore.vcxproj/WebCorePreBuild.cmd:
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::notifyFinished):

2014-07-09  Alex Christensen  <achristensen@webkit.org>

        Added css jit profiler, disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=134695

        Reviewed by Benjamin Poulain.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        Tell the RuleData when its compiled selector is used.
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        Initialize the compiled selector use count to 0.
        * css/RuleSet.h:
        (WebCore::RuleData::~RuleData):
        (WebCore::RuleData::compiledSelectorUsed):
        Count and log the number of times a compiled selector is used.
        * cssjit/SelectorCompiler.h:
        Added option for CSS_SELECTOR_JIT_PROFILING set to 0 by default.
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::execute):
        Tell the SelectorData when its compiled selector is used.
        * dom/SelectorQuery.h:
        (WebCore::SelectorDataList::SelectorData::SelectorData):
        (WebCore::SelectorDataList::SelectorData::~SelectorData):
        (WebCore::SelectorDataList::SelectorData::compiledSelectorUsed):
        Count and log the number of times a compiled selector is used.

2014-07-09  Eric Carlson  <eric.carlson@apple.com>

        [iOS] caption size is sometimes incorrect in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=134740

        Reviewed by Jer Noble.

        Captions on iOS are displayed in fullscreen with a TextTrackRepresentation object. Because
        the fullscreen video presentation is controlled by code in the UI process running on the
        UI thread, WebCore is notified of changes to fullscreen state asynchronously. This resulted
        in the TextTrackRepresentation object being created and/or destroyed too late some of the 
        time, which caused us to sometimes display captions incorrectly. Fix this by setting up and
        tearing down the TextTrackRepresentation object when WebCore's 'webkitfullscreenchange'
        event fires.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::enteredFullscreen): Notify text track container.
        (WebCore::MediaControlsHost::exitedFullscreen): Ditto.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleFullscreenChange): Notify host of fullscreen change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::requiresTextTrackRepresentation): Only return true when in
            fullscreen.
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer): Call updateTextTrackDisplay.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement): Initialize
            m_updateTextTrackRepresentationStyle to false.
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Move logic for creating
            TextTrackRepresentation to updateTextTrackRepresentation.
        (WebCore::MediaControlTextTrackContainerElement::updateActiveCuesFontSize): New, split out of updateTimerFired.
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired): Move code to force immediate
            font size change to updateActiveCuesFontSize.
        (WebCore::MediaControlTextTrackContainerElement::updateTextTrackRepresentation): New, update
            text track representation, creating first if necessary.
        (WebCore::MediaControlTextTrackContainerElement::clearTextTrackRepresentation): Add an early
            return if we don't have a text track representation.
        (WebCore::MediaControlTextTrackContainerElement::updateStyleForTextTrackRepresentation): Early
            return if there is nothing to be done.
        (WebCore::MediaControlTextTrackContainerElement::enteredFullscreen): Force a caption update
            if there are visible captions.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Set m_updateTextTrackRepresentationStyle
            to true.
        (WebCore::MediaControlTextTrackContainerElement::textTrackRepresentationBoundsChanged):  Force a 
            caption update if there are visible captions.
        * html/shadow/MediaControlElements.h:

2014-07-09  Jer Noble  <jer.noble@apple.com>

        [MSE] http/tests/media/media-source/mediasource-endofstream-invaliderror.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=134413

        Reviewed by Eric Carlson.

        Update MediaSource.endOfStream() to take an optional enum instead of an optional String.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::endOfStream):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSource.idl:

2014-07-08  Brady Eidson  <beidson@apple.com>

        DOMWindows should register themselves with the GamepadManager when they have event listeners
        https://bugs.webkit.org/show_bug.cgi?id=134669

        Reviewed by Dean Jackson.

        No new tests (No effect in a currently tested config)

        By having DOMWindows register with the GamepadManager when they have/don’t have gamepad event
        listeners, we accomplish two things:
        1 - It’s simple for GamepadManager to dispatch gamepad events directly to the DOMWindows interested.
        2 - We know when to start monitoring for gamepad connections.

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::GamepadManager):
        (WebCore::GamepadManager::registerNavigator):
        (WebCore::GamepadManager::unregisterNavigator):
        (WebCore::GamepadManager::registerDOMWindow):
        (WebCore::GamepadManager::unregisterDOMWindow):
        (WebCore::GamepadManager::maybeStartMonitoringGamepads): Start monitoring gamepads if there are any
          registered DOMWindows or NavigatorGamepads, and we aren’t already monitoring them.
        (WebCore::GamepadManager::maybeStopMonitoringGamepads): Stop monitoring gamepads if there aren’t any
          registered DOMWindows or NavigatorGameads, and we have been monitoring them before now.
        * Modules/gamepad/GamepadManager.h:

        * dom/EventNames.h:
        (WebCore::EventNames::isGamepadEventType):

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::~DOMWindow): If registered for gamepad events, unregister now.
        (WebCore::DOMWindow::incrementGamepadEventListenerCount): If this is the first gamepad event
          listener, register with the GamepadManager now.
        (WebCore::DOMWindow::decrementGamepadEventListenerCount): If this was the last gamepad event
          listener, unregister from the GamepadManager now.
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        * page/DOMWindow.h:

2014-07-08  Sun-woo Nam  <sunny.nam@samsung.com>

        [EFL] Fix the build break when ENABLE_ENCRYPTED_MEDIA_V2 is turned on.
        https://bugs.webkit.org/show_bug.cgi?id=134750

        Reviewed by Gyuyoung Kim.

        When turning ENABLE_ENCRYPTED_MEDIA_V2 on, build break occurs.
        Some source files need to be included in CMakeLists.txt file for build.
        And wrap the included header file which is built only on mac and wince.

        * CMakeLists.txt:
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp:

2014-07-08  Eric Carlson  <eric.carlson@apple.com>

        [iOS] user caption preferences not applied
        https://bugs.webkit.org/show_bug.cgi?id=134599

        Reviewed by Sam Weinig.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::updateCaptionStyleSheetOveride): All Pages in a PageGroup
        do not necessarily use the same PageUserContentController, so apply and remove caption user
        the style sheet directly to each page rather than to the page group.

2014-07-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170894.
        https://bugs.webkit.org/show_bug.cgi?id=134749

        "It broke the build on mountainlion release 32bit" (Requested
        by mmirman on #webkit).

        Reverted changeset:

        "Added css jit profiler, disabled by default."
        https://bugs.webkit.org/show_bug.cgi?id=134695
        http://trac.webkit.org/changeset/170894

2014-07-08  Jeremy Jones  <jeremyj@apple.com>

        WebVideoFullscreenInterfaceAVKit should lazily create m_playerController.
        https://bugs.webkit.org/show_bug.cgi?id=134706

        Reviewed by Simon Fraser.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setWebVideoFullscreenModel):
        Don't set the delegate if m_playerController isn't created.

2014-07-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        Ensure we compute the height of replaced elements to 'auto' when appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=134700

        Reviewed by David Hyatt.

        This fixes two issues:

        1) If a replaced element has a percentage height specified then its
        height should compute to 'auto' when its containing block does not
        have a height 'specified explicitly'. We were taking this to mean when
        its containing block's specified height value is 'auto' - in fact it
        means when the containing block's computed height is auto.

        2) Top and bottom on the containing block should only affect the
        height of the block if that block has absolute or fixed position.

        This brings us into line with IE, Firefox, and Chrome.

        This is a port of Blink patches by Rob Hogan and David Vest.

        Tests: css2.1/20110323/height-percentage-005.htm
               fast/css/replaced-element-ignore-top-bottom.html

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

2014-07-08  Alex Christensen  <achristensen@webkit.org>

        Added css jit profiler, disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=134695

        Reviewed by Benjamin Poulain.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        Tell the RuleData when its compiled selector is used.
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        Initialize the compiled selector use count to 0.
        * css/RuleSet.h:
        (WebCore::RuleData::~RuleData):
        (WebCore::RuleData::compiledSelectorUsed):
        Count and log the number of times a compiled selector is used.
        * cssjit/SelectorCompiler.h:
        Added option for CSS_SELECTOR_JIT_PROFILING set to 0 by default.
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::execute):
        Tell the SelectorData when its compiled selector is used.
        * dom/SelectorQuery.h:
        (WebCore::SelectorDataList::SelectorData::SelectorData):
        (WebCore::SelectorDataList::SelectorData::~SelectorData):
        (WebCore::SelectorDataList::SelectorData::compiledSelectorUsed):
        Count and log the number of times a compiled selector is used.

2014-07-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GObject DOM bindings API breaks test after r170700.

        Add missing WebKitDOMXPathNSResolver.symbols that I forgot to add
        in r170700.

        * bindings/gobject/WebKitDOMXPathNSResolver.symbols: Added.

2014-07-07  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. iOS build fix after r170871.

        * rendering/RenderThemeIOS.mm:
        (WebCore::adjustInputElementButtonStyle):

2014-07-07  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: icloud.com password arrow has clipped circle at some window sizes.
        https://bugs.webkit.org/show_bug.cgi?id=134710
        <rdar://problem/17545291>

        Reviewed by Simon Fraser.

        Transparent layer clipping needs device pixel snapping.

        Test: fast/layers/wrong-clipping-semi-transparent-layer-on-subpixel-position.html

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

2014-07-07  Benjamin Poulain  <benjamin@webkit.org>

        LinkBuffer should not keep a reference to the MacroAssembler
        https://bugs.webkit.org/show_bug.cgi?id=134668

        Reviewed by Geoffrey Garen.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):

2014-07-07  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Inline box decoration rounds to integral.
        https://bugs.webkit.org/show_bug.cgi?id=134523
        <rdar://problem/17530298>

        Reviewed by Darin Adler.

        This patch removes 2 integral roundings from InlineFlowBox:
        1. Border and padding sizes are implicitly integral truncated by the 'int' return type
           of borderLogicalLeft/Right()/paddingLogicalLeft/Right(). It results in losing
           fractional border/padding values.
        2. Painting rectangle is explicitly rounded which pushes border and
           other decoration elements to odd device pixel positions on retina displays.
        These values get pixel snapped right before calling in to GraphicsContext::*.

        Test: fast/inline/hidpi-inline-text-decoration-with-subpixel-value.html

        * rendering/InlineBox.h:
        (WebCore::InlineBox::frameRect):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::roundedFrameRect): Deleted.
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::borderLogicalLeft):
        (WebCore::InlineFlowBox::borderLogicalRight):
        (WebCore::InlineFlowBox::paddingLogicalLeft):
        (WebCore::InlineFlowBox::paddingLogicalRight):

2014-07-07  Zalan Bujtas  <zalan@apple.com>

        Pass RenderLayer reference instead of pointer to RenderLayer::paintingExtent().
        https://bugs.webkit.org/show_bug.cgi?id=134714

        Reviewed by Simon Fraser.

        No change in functionality. 

        * rendering/RenderLayer.cpp: * -> &
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::transparencyClipBox):
        (WebCore::paintingExtent):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::paintingExtent): Deleted.
        * rendering/RenderLayer.h:

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

        Remove misleadingly-named Font::isSVGFont()
        https://bugs.webkit.org/show_bug.cgi?id=134697

        Reviewed by Dean Jackson.

        Being a SVG font is a property of the FontData object, not
        the Font object. Providing an isSVGFont() function on the
        Font class will likely lead to incorrect code and non-obvious
        bugs.

        No new tests because there is no behavior change.

        * platform/graphics/Font.h:
        (WebCore::Font::isSVGFont): Deleted.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::primaryFontDataIsSystemFont):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/RenderBlock.cpp:
        (WebCore::constructTextRunInternal):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):
        (WebCore::SVGTextMetrics::SVGTextMetrics):

2014-07-07  Brady Eidson  <beidson@apple.com>

        Move Gamepad index down into PlatformGamepad.
        https://bugs.webkit.org/show_bug.cgi?id=134670

        Reviewed by Darin Adler.

        PlatformGamepads always have an inherent index anyways.
        This will make things easier in all upcoming work.

        * Modules/gamepad/Gamepad.cpp:
        (WebCore::Gamepad::Gamepad):
        * Modules/gamepad/Gamepad.h:

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::platformGamepadConnected):
        (WebCore::GamepadManager::platformGamepadDisconnected):
        (WebCore::GamepadManager::makeGamepadsVisibileToBlindNavigators):
        * Modules/gamepad/GamepadManager.h:

        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::gamepadsBecameVisible):
        (WebCore::NavigatorGamepad::gamepadConnected):
        (WebCore::NavigatorGamepad::gamepadDisconnected):
        * Modules/gamepad/NavigatorGamepad.h:

        * platform/GamepadProviderClient.h:

        * platform/PlatformGamepad.h:
        (WebCore::PlatformGamepad::index):
        (WebCore::PlatformGamepad::PlatformGamepad):

        * platform/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::HIDGamepad):
        * platform/mac/HIDGamepad.h:

        * platform/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::deviceAdded):
        (WebCore::HIDGamepadProvider::deviceRemoved):
        (WebCore::HIDGamepadProvider::removeGamepadForDevice):
        * platform/mac/HIDGamepadProvider.h:

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

        [UI-side compositing] Support reflections on custom layers like video
        https://bugs.webkit.org/show_bug.cgi?id=134701

        Reviewed by Tim Horton.

        Add a LayerTypeWebGLLayer layer type, and support casting to PlatformCALayerRemoteCustom.

        * WebCore.exp.in: Export PlatformCALayerMac::layerTypeForPlatformLayer(CALayer*), and sort.
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::isPlatformCALayerRemoteCustom):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::layerTypeForPlatformLayer):
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::commonInit):

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

        [UI-side compositing] Crash when starting a filter transition on a reflected layer
        https://bugs.webkit.org/show_bug.cgi?id=134694

        Reviewed by Tim Horton.

        Don't call the owner if we failed to find the animation key (which actually
        isn't used by PlatformCALayerMac anyway).

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (-[WebAnimationDelegate animationDidStart:]):

2014-07-07  Alex Christensen  <achristensen@webkit.org>

        [iOS WebGL] Fix crash with too many nested glsl functions.
        https://bugs.webkit.org/show_bug.cgi?id=134683
        <rdar://problem/17541529>

        Reviewed by Geoffrey Garen.

        This fixes the Khronos WebGL 1.0.3 test nested-functions-should-not-crash.html.

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        Add SH_LIMIT_CALL_STACK_DEPTH to extraCompileOptions.

2014-07-07  Ion Rosca  <rosca@adobe.com>

        [CSS Blending]The background images set on the root element will blend on an initial white backdrop.
        https://bugs.webkit.org/show_bug.cgi?id=134342

        Reviewed by Dean Jackson.

        Tests: css3/blending/background-blend-mode-body-image.html
               css3/blending/background-blend-mode-body-transparent-color-and-image.html
               css3/blending/background-blend-mode-body-transparent-image.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        If the background layers have blend modes, we paint the base background color first,
        before starting a new transparency layer. After creating the transparency layer,
        the base background will be skipped, and the background layers will blend on top of
        a transparent backdrop.
        (WebCore::RenderBox::paintFillLayer):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        This method is able to paint only the base background color (BaseBackgroundColorOnly), 
        skipping the background-color and background-images. This option is available only
        on bottom layer of the root renderer and only if the background color is not opaque,
        otherwise the method will return early.
        Another option is to paint the root background without using the base background color
        (BaseBackgroundColorSkip).
        * rendering/RenderBoxModelObject.h:
        Adding the BaseBackgroundColorUsage enum.

2014-07-06  Yoav Weiss  <yoav@yoav.ws>

        Turn on img@sizes compile flag
        https://bugs.webkit.org/show_bug.cgi?id=134634

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Moved compile flag to alphabetical order.

2014-07-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate isMathMLFoo() toMathMLFoo() by using NODE_TYPE_CASTS macro and generateTypeHelpers
        https://bugs.webkit.org/show_bug.cgi?id=134647

        Reviewed by Andreas Kling.

        Use type cast macro and generation tag for isFoo() and toFoo() in some MathML classes.

        No new tests, no behavior change.

        * mathml/MathMLElement.h: Place MathMLElementTypeHelpers.h to the bottom of the
        file so that functions from that file can use the Element|Node classes and other things defined in this file.
        * mathml/MathMLMencloseElement.h:
        (WebCore::toMathMLMencloseElement): Deleted.
        * mathml/mathtags.in:

2014-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Ensure resolvingMode size is 1 byte
        https://bugs.webkit.org/show_bug.cgi?id=134662

        Reviewed by Benjamin Poulain.

        Since selector compiler uses MacroAssembler::branch8 for SelectorChecker::Mode,
        we should ensure sizeof(SelectorChecker::Mode) == 1.
        Old implementation works only in little endianness environments.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchedResult):
        (WebCore::ElementRuleCollector::matchedRuleList):
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::hasAnyMatchingRules):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorChecker.h:
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::invalidateStyleRecursively):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        * css/StyleResolver.h:
        (WebCore::checkRegionSelector):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::jumpIfNotResolvingStyle):
        (WebCore::SelectorCompiler::elementIsActiveForStyleResolution):
        (WebCore::SelectorCompiler::elementIsHoveredForStyleResolution):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches):

2014-07-06  Antti Koivisto  <antti@apple.com>

        Don't throttle layer flushes when the main resource is a GIF
        https://bugs.webkit.org/show_bug.cgi?id=134650
        <rdar://problem/17490712>

        Reviewed by Simon Fraser.
        
        Avoid throttling big image animations.

        * page/FrameView.cpp:
        (WebCore::determineLayerFlushThrottleState):
        
            Disable for image documents.

        (WebCore::FrameView::disableLayerFlushThrottlingTemporarilyForInteraction):
        (WebCore::FrameView::updateLayerFlushThrottling):
        
            Refactor a bit.

        * page/LayerFlushThrottleState.h:
        
            Rename the flag.

2014-07-06  Andreas Kling  <akling@apple.com>

        Inline NodeListsNodeData helpers more aggressively.
        <https://webkit.org/b/134654>

        Get rid of call overhead costs when retrieving NodeLists and
        HTMLCollections from Document. These functions have very few clients,
        so there's no real reason to keep them out of line.

        Reviewed by Antti Koivisto.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):

2014-07-06  Andreas Kling  <akling@apple.com>

        Inline Node's rare data getters.
        <https://webkit.org/b/134652>

        There was a fair bit of overhead when calling Node::ensureRareData()
        from Document's collection getters. This patch inlines the case where
        we've already materialized the rare data.

        Reviewed by Antti Koivisto.

        * dom/Node.cpp:
        (WebCore::Node::materializeRareData):
        (WebCore::Node::rareData): Deleted.
        (WebCore::Node::ensureRareData): Deleted.
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::Node::rareData):
        (WebCore::Node::ensureRareData):

2014-07-05  Dean Jackson  <dino@apple.com>

        [iOS] MediaDocument should set a viewport
        https://bugs.webkit.org/show_bug.cgi?id=134658
        <rdar://problem/17552339>

        Reviewed by Zalan Bujtas.

        A MediaDocument should fill the viewport, so set its
        initial-scale to 1 and make it non-zoomable.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure): Create
        a <head> element and a <meta> element with a 1:1 viewport.

2014-07-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170825.
        https://bugs.webkit.org/show_bug.cgi?id=134653

        broke debug builds (Requested by kling on #webkit).

        Reverted changeset:

        "Generate isMathMLFoo() toMathMLFoo() by using NODE_TYPE_CASTS
        macro and generateTypeHelpers"
        https://bugs.webkit.org/show_bug.cgi?id=134647
        http://trac.webkit.org/changeset/170825

2014-07-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate isMathMLFoo() toMathMLFoo() by using NODE_TYPE_CASTS macro and generateTypeHelpers
        https://bugs.webkit.org/show_bug.cgi?id=134647

        Reviewed by Andreas Kling.

        Use type cast macro and generation tag for isFoo() and toFoo() in some MathML classes.

        No new tests, no behavior change.

        * mathml/MathMLElement.h: Place MathMLElementTypeHelpers.h to the bottom of the
        file so that functions from that file can use the Element|Node classes and other things defined in this file.
        (WebCore::isMathMLElement): Deleted.
        * mathml/MathMLMencloseElement.h:
        (WebCore::toMathMLMencloseElement): Deleted.
        * mathml/mathtags.in:

2014-07-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Support Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=134439

        Reviewed by Antonio Gomes.

        Add geoclue files in order to enable geolocation for EFL port.

        * PlatformEfl.cmake:

2014-07-04  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: compile :in-range and :out-of-range
        https://bugs.webkit.org/show_bug.cgi?id=134639

        Reviewed by Andreas Kling.

        The pseudo class :in-range and :out-of-range are trivial non-inlined selectors.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isInRange):
        (WebCore::isOutOfRange):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-07-04  Andreas Kling  <akling@apple.com>

        Fast path for jsStringWithCache() when asked for the same string repeatedly.
        <https://webkit.org/b/134635>

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringWithCache): Deleted.
        * bindings/js/JSDOMBinding.h:
        (WebCore::JSValueTraits<String>::arrayJSValue):
        (WebCore::jsStringWithCache): Deleted.
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertNPVariantToValue):
        * loader/cache/CachedResourceHandle.h:

2014-07-04  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: ebay.com rotating billboard on the main page has cut off buttons.
        https://bugs.webkit.org/show_bug.cgi?id=134636
        <rdar://problem/17529112>

        Reviewed by Darin Adler.

        Missing pixel snapping when clipping the transparency layer for BackgroundBleedUseTransparencyLayer.
        Clipping needs to take the same snapping strategy as the rest of the painting code.

        Test: fast/borders/border-radius-on-subpixel-position-non-hidpi.html

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

2014-05-10  Andreas Kling  <akling@apple.com>

        QualifiedName should use RefPtr<QualifiedNameImpl> internally.
        <https://webkit.org/b/132796>

        We were not inlining ~QualifiedName() and it was showing up in some
        profiles (over 1% on dom-attr.html.)

        This patch modernizes QualifiedName a bit by using RefPtr to store
        the QualifiedNameImpl instead of doing manual ref() and deref()
        in out-of-line functions.

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * dom/QualifiedName.cpp:
        (WebCore::QNameComponentsTranslator::translate):
        (WebCore::QualifiedName::QualifiedName):
        (WebCore::QualifiedName::~QualifiedName): Deleted.
        (WebCore::QualifiedName::deref): Deleted.
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedNameImpl::create):
        (WebCore::QualifiedName::QualifiedName):
        (WebCore::QualifiedName::isHashTableDeletedValue):
        (WebCore::QualifiedName::~QualifiedName):
        (WebCore::QualifiedName::operator=):
        (WebCore::QualifiedName::impl):
        (WebCore::QualifiedName::ref): Deleted.

2014-07-04  Dean Jackson  <dino@apple.com>

        [iOS] [Media] Prevent page zoom if it started in the video element
        https://bugs.webkit.org/show_bug.cgi?id=134640
        <rdar://problem/16630794>

        Reviewed by Sam Weinig.

        In r170572 I attempted to prevent the page zoom from happening
        when the user was attempting to fullscreen the video. That fix was
        not complete, because it relied on the touchstart event being
        sent before a gesture event. It turns out this doesn't always happen,
        so we need to apply the same check in the gesture event - if the
        gesture began with two fingers on the media, don't do a page zoom.
        The exception is zooming out, if you've managed to make the video
        cover the entire screen (also, the pinch-out-of-fullscreen gesture
        does not get handled by WebKit).

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handleBaseGestureChange): Add a check to
        make sure our pinch didn't start in the video element.

2014-07-04  Hunseop Jeong  <hs85.jeong@samsung.com>

        [CoordinatedGraphics] Use the C++11 syntax to clean-up for loops 
        https://bugs.webkit.org/show_bug.cgi?id=134594

        Reviewed by Darin Adler.

        Convert a couple of loops to range-based for 

        No change in functionality, no new tests.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::resizeEdgeTiles):
        (WebCore::TiledBackingStore::setKeepRect):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::~CompositingCoordinator):
        (WebCore::CompositingCoordinator::flushPendingImageBackingChanges):
        (WebCore::CompositingCoordinator::setVisibleContentsRect):
        (WebCore::CompositingCoordinator::purgeBackingStores):
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp:
        (WebCore::CoordinatedBackingStore::removeAllTiles):
        (WebCore::CoordinatedBackingStore::paintToTextureMapper):
        (WebCore::CoordinatedBackingStore::drawBorder):
        (WebCore::CoordinatedBackingStore::drawRepaintCounter):
        (WebCore::CoordinatedBackingStore::commitTileOperations):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::adjustPositionForFixedLayers):
        (WebCore::CoordinatedGraphicsScene::commitPendingBackingStoreOperations):

2014-07-04  Andreas Kling  <akling@apple.com>

        CTTE: ScriptElement always has a HTTPScriptElement or SVGScriptElement.
        <https://webkit.org/b/134637>

        Have ScriptElement store the pointer to the more specific subclass
        element as a reference. Also made the constructor protected since
        nobody should instantiate ScriptElement directly.

        Reviewed by Antti Koivisto.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::childrenChanged):
        (WebCore::ScriptElement::dispatchErrorEvent):
        (WebCore::ScriptElement::prepareScript):
        (WebCore::ScriptElement::requestScript):
        (WebCore::ScriptElement::executeScript):
        (WebCore::ScriptElement::notifyFinished):
        (WebCore::ScriptElement::ignoresLoadRequest):
        (WebCore::ScriptElement::scriptContent):
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::element):
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::queueScriptForExecution):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):

2014-07-04  Julien Quint  <pom@graougraou.com>

        input type=range element should only fire change events after committing a  value
        https://bugs.webkit.org/show_bug.cgi?id=134545

        Reviewed by Dean Jackson.

        A "change" event was fired every time the slider thumb element was dragged
        by the user. The "change" event is now fired only after the thumb
        element has stopped moving; previously, both "input" and "change" events
        where dispatched while changes were being made. This new behavior is
        consistent with the specification (cf.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#event-input-change),
        as well as other implementations such as Firefox and Chrome.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Listen to the "input" event
        rather than the "change" event for the timeline control in order to
        keep track of value changes when the user is dragging the thumb.
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::setValue): Dispatch "change" event while
        setting the new value rather than dispatching later, since setting the
        value now clears the change flag.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::setValue): Update the text value of the
        control in the case when no event is to be dispatched, so that this
        value can be checked the next time a "change" event dispatch is
        requested.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint): Removed the
        dispatch of the "change" event, and no longer track the text value of
        the element as a result of dispatching a "change" event.
        (WebCore::SliderThumbElement::stopDragging): Dispatch the "change" event
        on completing the drag.

2014-07-04  Andreas Kling  <akling@apple.com>

        CTTE: ApplicationCacheHost always has a DocumentLoader.
        <https://webkit.org/b/b/128435>

        Have ApplicationCacheHost store the backpointer to its owning
        DocumentLoader as a reference.

        Reviewed by Sam Weinig.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::ApplicationCacheHost):
        (WebCore::ApplicationCacheHost::~ApplicationCacheHost):
        (WebCore::ApplicationCacheHost::selectCacheWithoutManifest):
        (WebCore::ApplicationCacheHost::selectCacheWithManifest):
        (WebCore::ApplicationCacheHost::maybeLoadMainResource):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainResponse):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainError):
        (WebCore::ApplicationCacheHost::failedLoadingMainResource):
        (WebCore::ApplicationCacheHost::finishedLoadingMainResource):
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForError):
        (WebCore::ApplicationCacheHost::maybeLoadSynchronously):
        (WebCore::ApplicationCacheHost::notifyDOMApplicationCache):
        (WebCore::ApplicationCacheHost::stopDeferringEvents):
        (WebCore::ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache):
        (WebCore::ApplicationCacheHost::update):
        (WebCore::ApplicationCacheHost::swapCache):
        (WebCore::ApplicationCacheHost::abort):
        (WebCore::ApplicationCacheHost::isApplicationCacheEnabled):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::documentLoader): Deleted.

2014-07-04  Antti Koivisto  <antti@apple.com>

        REGRESSION(r159345): Lines are clipped between pages when printing web content from Safari
        https://bugs.webkit.org/show_bug.cgi?id=134633
        <rdar://problem/17088936>

        Reviewed by Zalan Bujtas.

        Test: printing/simple-lines-break.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Disable simple lines if global pagination is enabled.
            Printing does not currently use flow threads which we already test for.

2014-07-04  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the build after r170795.

        Mac didn't like that change as it seems to properly typedef long long to int64_t.
        That's not the case on 64-bit Linux (for some reason), so I'm changing the type of
        the two long long variables in FormDataElement to int64_t to avoid any further trouble.

        * platform/network/FormData.h:

2014-07-03  Brady Eidson  <beidson@apple.com>

        When showing the selection menu, include menu options for all selected phone numbers.
        <rdar://problem/16983434>, <rdar://problem/16874568>, and https://bugs.webkit.org/show_bug.cgi?id=134613

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings:

        * dom/Range.cpp:
        (WebCore::rangesOverlap): Fix reversed arguments that caused some types of overlaps to not be detected.

2014-07-03  Daniel Bates  <dabates@apple.com>

        Add WTF::move()
        https://bugs.webkit.org/show_bug.cgi?id=134500

        Rubber-stamped by Anders Carlsson.

        Substitute WTF::move() for std::move().

        * Modules/battery/NavigatorBattery.cpp:
        * Modules/encryptedmedia/MediaKeys.cpp:
        * Modules/gamepad/NavigatorGamepad.cpp:
        * Modules/gamepad/deprecated/NavigatorGamepad.cpp:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        * Modules/indexeddb/IDBDatabaseBackend.h:
        [...]

2014-07-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix small bugs of dynamicViewportSizeUpdate that were causing inaccuracies in the computed target
        https://bugs.webkit.org/show_bug.cgi?id=134582

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * platform/ScrollView.h:
        (WebCore::ScrollView::unobscuredContentSize):
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::unobscuredContentRect):
        (WebCore::ScrollView::setUnobscuredContentSize):

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

        [Mac] WebKit1 WebView iframe not responding to scroll gestures
        https://bugs.webkit.org/show_bug.cgi?id=134569
        <rdar://problem/17309008>

        Reviewed by Simon Fraser.

        New test: platform/mac/fast/scrolling/scroll-iframe-fragment.html

        WK1 scrollable areas are implemented on top of PlatformWidget (i.e., NSView) objects. They only
        perform a scroll operation if the EventHandler::handleWheelEvent method returns 'false', indicating
        that the Cocoa layer should do scrolling work. This is in contrast to WK2, where the scrolling is
        handled separately and we return 'true' from EventHandler::handleWheelEvent to indicate that the
        scroll event has been handled and that no other work is needed. This mismatch in the meaning of
        EventHandler::handleWheelEvent means that WK1 views do not properly handle scroll wheel events.

        To correct this, we need to see if we are acting on an Element backed by a PlatformWidget. When we
        are (the WK1 case) we want to return 'false' to instruct the Cocoa object to do the scroll operation.
        To implement proper latching behavior in WK1, we must return 'true' in the case where we are latched
        to a PlatformWidget, and that PlatformWidget did not start the scroll gesture at the edge of
        the region in the dominant scroll direction.

        Finally, additional logic was needed to determine whether the PlatformWidget is scrolled to the
        edge in the dominant scroll direction.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::platformCompleteWheelEvent): Added stub.
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): Added stub.
        (WebCore::EventHandler::handleWheelEvent): Call new platformCompletePlatformWidgetWheelEvent if the
        event was handled for a PlatformWidget.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::widgetForEventTarget): Added helper function.
        (WebCore::scrollViewForEventTarget): Added helper function.
        (WebCore::eventTargetIsPlatformWidget): Added helper function.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Check whether we are at a scrolled edge
        for the NSView (PlatformWidget) case.
        (WebCore::EventHandler::platformCompleteWheelEvent): Return 'false' when handling WK1-style scrolls.
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): Added. We generally want to
        return false so the PlatformWidget handles scrolling, except in the case where we are latched to
        a PlatformWidget, which has already performed its scroll, and we want to avoid propegating a
        scroll event to an enclosing region.

2014-07-03  Pratik Solanki  <psolanki@apple.com>

        Preserve old behavior of creating an NSURLRequest of the exact same type as passed to us
        https://bugs.webkit.org/show_bug.cgi?id=134605
        <rdar://problem/17544641>

        Reviewed by Andreas Kling.

        We have client code that passes us a subclass of NSURLRequest to load resource. Later when
        we call willSendRequest, they test to make sure they get an object of the same type. My
        optimization in r170642 broke this path when I cleared out the NSURLRequest object. We
        already had code in updateNSURLRequest() that was taking this quirk into account but I broke
        that. Fix it by reverting to old behavior for such clients.

        No new tests though we need one. I will add it later.

        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/ios/ResourceRequestIOS.mm:
        (WebCore::ResourceRequest::updateNSURLRequest):
        (WebCore::ResourceRequest::clearOrUpdateNSURLRequest):

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

        Stop using EncoderAdapter/DecoderAdapter for FormData
        https://bugs.webkit.org/show_bug.cgi?id=134571

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * platform/network/FormData.cpp:
        (WebCore::encodeElement): Deleted.
        (WebCore::decodeElement): Deleted.
        (WebCore::FormData::encode): Deleted.
        (WebCore::FormData::decode): Deleted.
        * platform/network/FormData.h:
        (WebCore::FormDataElement::encode):
        (WebCore::FormDataElement::decode):
        (WebCore::FormData::encode):
        (WebCore::FormData::decode):

2014-07-03  Brady Eidson  <beidson@apple.com>

        Selection rects sent to ServicesOverlayController are wrong.
        <rdar://problem/16727796> and https://bugs.webkit.org/show_bug.cgi?id=134568

        Reviewed by Darin Adler (and Tim Horton and Ryosuke Niwa).

        * WebCore.exp.in:

        Update the gatherer to keep GapRects separate from LayoutRects:
        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::addRects):
        (WebCore::SelectionRectGatherer::Notifier::~Notifier):
        (WebCore::SelectionRectGatherer::clearAndCreateNotifier):
        * editing/SelectionRectGatherer.h:

        * page/EditorClient.h:
        (WebCore::EditorClient::selectionRectsDidChange): Updated to take LayoutRects and GapRects separately.

        Change RenderSelectionInfo to also hang on to the individual rects that formed the final bounding rect:
        * rendering/RenderSelectionInfo.h:
        (WebCore::RenderSelectionInfo::RenderSelectionInfo): If the RenderObject is a RenderText, then call
          collectSelectionRectsForLineBoxes instead of selectionRectForRepaint.
        (WebCore::RenderSelectionInfo::rects):

        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRectsForLineBoxes): Added
        (WebCore::RenderText::selectionRectForRepaint):
        * rendering/RenderText.h:

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::collectSelectionRectsForRange): Added
        * rendering/RenderTextLineBoxes.h:

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSubtreeSelection): Add the list of rects to the gatherer instead of just 
          the bounding rect.

2014-07-03  Brady Eidson  <beidson@apple.com>

        Possible crash in IconDatabase in WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread
        <rdar://problem/17437687> and https://bugs.webkit.org/show_bug.cgi?id=134517

        Reviewed by Eric Carlson.

        Since WebCore::IconDatabase is not RefCounted there’s no obvious way to keep it alive until it is
        truly no longer needed.

        This isn’t generally a problem because they are usually a singleton that lasts the lifetime of the process.

        In the WebKit2 case, WebCore::IconDatabases can come and go as their owning WebIconDatabases come and go.

        So we can rely on WebIconDatabase to handle the lifetime appropriately. 

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::close): If the database is actually closed, notify the client.
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::isOpen): Take into account whether there’s any main thread callbacks, plus what
          is covered by isOpenBesidesMainThreadCallbacks.
        (WebCore::IconDatabase::isOpenBesidesMainThreadCallbacks): Take into account whether the sync thread
          is still running and whether or not the database file is still open.
        (WebCore::IconDatabase::checkClosedAfterMainThreadCallback): Checks to see if the database has just
          become 100% closed and - if so - notify the client.
        (WebCore::IconDatabase::dispatchDidImportIconURLForPageURLOnMainThread): Updated to increment the main thread
          callback count and to call checkClosedAfterMainThreadCallback when done.
        (WebCore::IconDatabase::dispatchDidImportIconDataForPageURLOnMainThread): Ditto.
        (WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread): Ditto.
        (WebCore::IconDatabase::dispatchDidFinishURLImportOnMainThread): Ditto.
        * loader/icon/IconDatabase.h:

        * loader/icon/IconDatabaseClient.h:
        (WebCore::IconDatabaseClient::didClose): Added. For the IconDatabase to tell its client it is 100% closed.

2014-07-03  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver does not read aria-expanded attribute on controls in Safari
        https://bugs.webkit.org/show_bug.cgi?id=134527

        Reviewed by Mario Sanchez Prada.

        Expose whether the ARIA expanded property is present or not.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilitySupportsARIAExpanded]):

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

        Removing an element with CSS -webkit-overflow-scrolling: touch breaks
        subsequent touch events

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

        This issue is caused by the order of teardown for RenderLayers.

        RenderLayer clears its m_backing in its destructor, calling the
        RenderLayerBacking destructor. The RenderLayerBacking destructor calls
        RenderLayerCompositor::willRemoveScrollingLayer(), which tries to
        access the RenderLayer's backing that has already been cleared. This
        causes us to skip the call to ChromeClient::removeScrollingLayer(),
        resulting in a stale view that can block touch events.

        Reviewed by Simon Fraser.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        When calling willRemoveScrollingLayerWithBacking(), pass both the layer
        and the RenderLayerBacking.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        Renamed. Use the passed RenderLayerBacking, as the RenderLayer's
        backing might have already been cleared.
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayer): Deleted.

        * rendering/RenderLayerCompositor.h:
        Renamed willRemoveScrollingLayer() to
        willRemoveScrollingLayerWithBacking() and added a parameter.

2014-07-01  Mark Rowe  <mrowe@apple.com>

        Ensure that the WebKit bundle version in the user agent string continues to match the current format.
        <https://webkit.org/b/134524> / <rdar://problem/17447771>

        Reviewed by Simon Fraser.

        * page/cocoa/UserAgent.h:
        * page/cocoa/UserAgent.mm:
        (WebCore::userVisibleWebKitBundleVersionFromFullVersion): Updated to take an NSString now that it's internal
        to the file.
        (WebCore::userAgentBundleVersionFromFullVersionString): Limit the bundle version included in the user agent
        string to three components.
        * page/ios/UserAgentIOS.mm:
        (WebCore::standardUserAgentWithApplicationName): Update to call userAgentBundleVersionFromFullVersionString.
        * page/mac/UserAgentMac.mm:
        (WebCore::standardUserAgentWithApplicationName): Ditto.

2014-07-01  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/134522> Remove duplication in code that prepares the user agent string on Mac and iOS

        Reviewed by Simon Fraser.

        * page/cocoa/UserAgent.h:
        * page/cocoa/UserAgent.mm:
        (WebCore::userVisibleWebKitBundleVersionFromFullVersion): Moved from WebKit2.
        * page/ios/UserAgentIOS.mm:
        (WebCore::standardUserAgentWithApplicationName): Pass the WebKit bundle version through userVisibleWebKitBundleVersionFromFullVersion
        before including it in the user agent string.
        * page/mac/UserAgentMac.mm:
        (WebCore::standardUserAgentWithApplicationName): Ditto.

2014-07-02  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/134521> iOS should use shared code to determine the system marketing version

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj: Add the new files, and sort the groups they're in.
        * page/cocoa/UserAgent.h: Copied from Source/WebCore/page/mac/UserAgent.h.
        * page/cocoa/UserAgent.mm: Renamed from Source/WebCore/page/mac/UserAgent.h.
        Move systemMarketingVersionForUserAgentString to a location where it can be shared between
        Mac and iOS.
        * page/ios/UserAgentIOS.mm:
        (WebCore::standardUserAgentWithApplicationName): Switch to systemMarketingVersionForUserAgentString.
        * page/mac/UserAgentMac.mm:
        * platform/cocoa/SystemVersion.h: Renamed from Source/WebCore/platform/mac/SystemVersionMac.h.
        * platform/cocoa/SystemVersion.mm: Renamed from Source/WebCore/platform/mac/SystemVersionMac.mm.
        Move to a location that makes it clear this is shared between Mac and iOS. Enable the modern Mac
        codepath for iOS as well.

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

        Remove keyed coding from FormData
        https://bugs.webkit.org/show_bug.cgi?id=134565

        Reviewed by Tim Horton.

        * platform/network/FormData.cpp:
        (WebCore::encodeElement): Deleted.
        (WebCore::decodeElement): Deleted.
        (WebCore::FormData::encode): Deleted.
        (WebCore::FormData::decode): Deleted.
        * platform/network/FormData.h:

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

        Get rid of the HistoryItem encoding/decoding in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=134564

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree): Deleted.
        (WebCore::encodeRect): Deleted.
        (WebCore::encodeSize): Deleted.
        (WebCore::HistoryItem::encodeBackForwardTreeNode): Deleted.
        (WebCore::DecodeRecursionStackElement::DecodeRecursionStackElement): Deleted.
        (WebCore::decodeRect): Deleted.
        (WebCore::decodeSize): Deleted.
        (WebCore::HistoryItem::decodeBackForwardTree): Deleted.
        * history/HistoryItem.h:

2014-07-02  Alex Christensen  <achristensen@webkit.org>

        [WebGL] Fix crash when glsl expressions are too complex.
        https://bugs.webkit.org/show_bug.cgi?id=134554
        <rdar://problem/17540462>

        Reviewed by Dean Jackson.
        
        This fixes the Khronos test conformance/glsl/bugs/long-expressions-should-not-crash.html.

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        Add SH_LIMIT_EXPRESSION_COMPLEXITY to the ANGLE compile options.

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

        WebCore JIT: rename registerCount to something less generic and add new types for lists of registers and lists of stack references
        https://bugs.webkit.org/show_bug.cgi?id=134552

        Reviewed by Alex Christensen.

        Little cleanup:
        -The name registerCount was a little too generic. Rename that to "maximumRegisterCount" to avoid confusion.
        -Add a new type RegisterVector for any vector holding registers. This is just to avoid repeating the inline
         size everywhere, no functional change.
        -Same idea for the stack: welcome StackReferenceVector!

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::saveAllocatedCallerSavedRegisters):
        Remove the appendVector here. It was unnecessarily cautious, StackAllocator already protect us
        from mistakes.

        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::allocatedRegisters):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        Changing from the count of "calleeSavedRegisterCount" to "maximumRegisterCount" will cause
        calleeSavedRegisterStackReferences to always overallocate.
        The code generator is never on the heap, so that should not change anything.

        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):

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

        Remove some code only needed for versions of Safari that are no longer supported
        https://bugs.webkit.org/show_bug.cgi?id=134537

        Reviewed by Anders Carlsson.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _rectOnScreen]): Deleted.
        (-[DOMHTMLInputElement _replaceCharactersInRange:withString:selectingFromIndex:]): Deleted.
        (-[DOMHTMLInputElement _selectedRange]): Deleted.
        * bindings/objc/DOMPrivate.h:
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] MediaPlayerPrivateGStreamer.cpp fails to build when VIDEO_TRACK is enabled and using GSTREAMER_MPEGTS
        https://bugs.webkit.org/show_bug.cgi?id=134548

        Reviewed by Philippe Normand.

        Include AtomicStringHash.h when ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS)
        since it's used by HashMap<AtomicString, RefPtr<InbandMetadataTextTrackPrivateGStreamer>>

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Unstable headers should include webkitdomdefines-unstable.h
        https://bugs.webkit.org/show_bug.cgi?id=134540

        Reviewed by Martin Robinson.

        Instead of the class header that can only be included from webkitdom.h.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (WriteData):

2014-07-02  Mario Sanchez Prada  <mario.prada@samsung.com>

        REGRESSION(r170008): [GTK] Layout Tests fast/forms/option-constructor-selected.html and fast/forms/select-live-pseudo-selectors.html crash.
        https://bugs.webkit.org/show_bug.cgi?id=134399

        Reviewed by Chris Fleizach.

        Check that the value of optionIndex passed as a parameter is valid
        before calling didUpdateActiveOption() over the item of the menu
        list, to prevent crashes in platforms where renderers (and therefore
        accessibility objects) might not be created for items at the time
        of calling AccessibilityMenuList::didUpdateActiveOption().

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::didUpdateActiveOption): Added check.

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not add forward declaration of class struct for interfaces
        https://bugs.webkit.org/show_bug.cgi?id=134297

        Reviewed by Martin Robinson.

        * PlatformGTK.cmake: Make files generated by
        gobject-generate-headers.pl script depend on it.
        * bindings/gobject/WebKitDOMEventTarget.h: Remove forward declaration.
        * bindings/gobject/WebKitDOMNodeFilter.h: Ditto
        * bindings/gobject/WebKitDOMXPathNSResolver.h: Ditto.
        * bindings/scripts/gobject-generate-headers.pl: Use Iface instead
        of Class suffix for interfaces.

2014-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] XPathNSResolver should be exposed as an interface instead of as a class
        https://bugs.webkit.org/show_bug.cgi?id=134028

        Reviewed by Gustavo Noronha Silva.

        Add custom implementation of WebKitDOMXPathNSResolver to expose it
        as an interface instead of a class. It also includes an internal
        default implementation of the interface to support methods that
        create a XPathNSResolver using the native implementation.

        * PlatformGTK.cmake: Add new files to compilation.
        * bindings/gobject/GObjectXPathNSResolver.cpp: Added.
        (WebCore::GObjectXPathNSResolver::~GObjectXPathNSResolver):
        (WebCore::GObjectXPathNSResolver::lookupNamespaceURI): Call
        webkit_dom_xpath_ns_resolver_lookup_namespace_uri().
        * bindings/gobject/GObjectXPathNSResolver.h: Added.
        (WebCore::GObjectXPathNSResolver::create):
        (WebCore::GObjectXPathNSResolver::GObjectXPathNSResolver): Create
        a new GObjectXPathNSResolver for the given WebKitDOMXPathNSResolver.
        * bindings/gobject/WebKitDOMXPathNSResolver.cpp: Added.
        (webkit_dom_xpath_ns_resolver_default_init):
        (webkit_dom_xpath_ns_resolver_lookup_namespace_uri):
        (webkitDOMNativeXPathNSResolverFinalize):
        (webkitDOMNativeXPathNSResolverConstructor):
        (webkit_dom_native_xpath_ns_resolver_init):
        (webkit_dom_native_xpath_ns_resolver_class_init):
        (webkitDOMNativeXPathNSResolverLookupNamespaceURI):
        (webkitDOMXPathNSResolverIfaceInit):
        (WebKit::core): Return the native XPathNSResolver when using the
        internal implementation or create a custom XPathNSResolver when
        using a user provided WebKitDOMXPathNSResolver.
        (WebKit::kit):
        * bindings/gobject/WebKitDOMXPathNSResolver.h: Added.
        * bindings/gobject/WebKitDOMXPathNSResolverPrivate.h: Added.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Add exceptions for XPathNSResolver since
        the core method returns a PassRefPtr.

2014-07-01  Frédéric Wang  <fred.wang@free.fr>

        The OpenType MATH table is not read on Mac
        https://bugs.webkit.org/show_bug.cgi?id=133569

        Reviewed by Chris Fleizach.

        An incorrect tag format is used to load the OpenType MATH table on Mac.
        This commit makes the format consistent with what is used for other tables on Mac.
        This will allow to load the MATH table and to use it for the MathML rendering.

        No new tests. platform/graphics/opentype already contains tests for the OpenType MATH support.

        * platform/graphics/opentype/OpenTypeMathData.cpp:

2014-07-01  Alex Christensen  <achristensen@webkit.org>

        [Win64] Unreviewed build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
        Exclude CA files from 32 and 64 bit WinCairo builds.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        Don't use a precompiled header in 32 or 63 bit builds of MockCDM.cpp.

2014-07-01  Alex Christensen  <achristensen@webkit.org>

        Reduce dynamic memory allocation in css jit.
        https://bugs.webkit.org/show_bug.cgi?id=134416

        Reviewed by Benjamin Poulain.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::saveAllocatedRegisters):
        * cssjit/RegisterAllocator.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):
        Use inlineCapacity template parameter to reduce malloc calls.
        I use 32 as the inline capacity for non-register related vectors because that
        is probably big enough for the selector compiler, and if it is not then a malloc
        call will not be significant because the selector is very complex.

2014-07-01  Eric Carlson  <eric.carlson@apple.com>

        WebVTT percentage value can be a float
        https://bugs.webkit.org/show_bug.cgi?id=134511

        Reviewed by Brent Fulgham.

        No new tests, existing tests modified.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::setLine): int -> double.
        (WebCore::TextTrackCueGeneric::setPosition): Ditto.
        * html/track/TextTrackCueGeneric.h:

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::setLine): Ditto.
        (WebCore::VTTCue::setPosition):  Ditto.
        (WebCore::VTTCue::setCueSettings): Support floating point values for line, position, and size.
        (WebCore::scanPercentage): Deleted.
        * html/track/VTTCue.h:

        * html/track/VTTScanner.cpp:
        (WebCore::VTTScanner::scanFloat): Support negative values.
        * html/track/VTTScanner.h:

        * html/track/WebVTTParser.cpp: Include parseFloatPercentageValue in non-WEBVTT_REGIONS builds.
        * html/track/WebVTTParser.h:

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Drive by change to take a cue
            reference rather than a pointer.
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings): Ditto.
        (WebCore::InbandTextTrackPrivateAVF::removeCompletedCues): Loop over all cues, don't LOG that
            we are asking the client to delete the cue because the client will have already deleted
            it when status when to GenericCueData::Complete.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

2014-07-01  Simon Fraser  <simon.fraser@apple.com>

        Improve behavior of position:sticky on zoomed pages
        https://bugs.webkit.org/show_bug.cgi?id=134535
        <rdar://problem/12898829>

        Reviewed by Dean Jackson.

        Despite r138036, position:sticky still had incorrect behavior in zoomed pages.
        
        Fix by removing the scaling of the rect from viewportConstrainedVisibleContentRect(),
        since all the other math happens in unscaled coordinates.

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

2014-07-01  Alex Christensen  <achristensen@webkit.org>

        [WebGL] Fix PVRTC extension.
        https://bugs.webkit.org/show_bug.cgi?id=134525

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions):
        Remove the return false which I mistakenly committed in r170128
        and make the gl error match the S3TC error and the khronos test.

2014-07-01  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS does not expose ARIA toggle buttons at all (not even as a regular button)
        https://bugs.webkit.org/show_bug.cgi?id=133875

        Reviewed by Enrica Casucci.

        Support the toggle button type in iOS.

        Test: platform/ios-sim/accessibility/toggle-button.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
        (-[WebAccessibilityObjectWrapper accessibilityTraits]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):

2014-07-01  Dean Jackson  <dino@apple.com>

        [iOS] Subsampled JPEG images do not draw correctly via the canvas APIs
        https://bugs.webkit.org/show_bug.cgi?id=134513
        <rdar://problem/12078860>
        <rdar://problem/16745393>

        Reviewed by Tim Horton.

        Subsampled images (e.g. JPEG) were not consistently using
        their original dimensions and subsampled dimensions. This caused
        things like texImage2D to pack the pixels incorrectly, or drawImage
        to squish the rendering.

        Renamed m_scale to m_subsamplingScale on FrameData.

        Tests: fast/canvas/image-potential-subsample.html
               fast/canvas/webgl/tex-image-and-sub-image-2d-with-potentially-subsampled-image.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame): Rename to m_subsamplingScale.
        (WebCore::BitmapImage::frameAtIndex): Ditto.
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData): Ditto.
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::FrameData::clear): Ditto.
        (WebCore::BitmapImage::BitmapImage): Ditto.
        (WebCore::BitmapImage::draw): Use a scaledSrcRect that reflects the subsampled size,
        rather than assuming the srcRect accurately reflects how many pixels we have
        in the Bitmap.
        (WebCore::BitmapImage::copyUnscaledFrameAtIndex):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): Similar fix, although this
        time we just ask the image decoder to take into account the subsampled size
        when it is "generating" a frame, causing it to use the bitmap data it has already
        decoded.

2014-07-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Selected DOM element highlights invisible near bottom of the viewport (topContentInset?)
        https://bugs.webkit.org/show_bug.cgi?id=133818

        Reviewed by Beth Dakin.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        Take the topContentInset into account when sizing the InspectorOverlay's FrameView.

2014-07-01  Chris Fleizach  <cfleizach@apple.com>

        AX: HTML indeterminate IDL attribute not mapped to checkbox value=2
        https://bugs.webkit.org/show_bug.cgi?id=134492

        Reviewed by Andreas Kling.

        Support the indeterminate attribute in AX code.

        Test: Update existing test: accessibility/aria-checked-mixed-value

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

2014-07-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Typing an automatic text replacement phrase after a br in contenteditable is not rendered as expected
        https://bugs.webkit.org/show_bug.cgi?id=133883

        Reviewed by Enrica Casucci.

        enclosingDeletableElement() makes sure that the element's container is editable, but not
        that it is capable of having content inside it (like how a <br> can't).

        No new tests. I don't think this is testable because it requires setting some state in System Preferences.

        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):

2014-07-01  Alex Christensen  <achristensen@webkit.org>

        [iOS] Unreviewed build fix after r170640.

        * page/EditorClient.h:
        (WebCore::EditorClient::selectedTelephoneNumberRangesChanged):
        Add ifdefs to make everything compile and link.

2014-07-01  Daniel Bates  <dabates@apple.com>

        Remove unnecessary calls to std::move()
        https://bugs.webkit.org/show_bug.cgi?id=134493

        Reviewed by Anders Carlsson.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::CDM):
        * css/CSSGrammar.y.in:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberValue):
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::MediaQuery):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect):

2014-07-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Pixel crack in breadcrumbs at devforums.apple.com.
        https://bugs.webkit.org/show_bug.cgi?id=134491

        Reviewed by Simon Fraser.

        Do not early round geometry values, while computing background image position. It changes the final
        subpixel values and that could lead to wrong snap positions.
        pixelSnapBackgroundImageGeometryForPainting() takes care of geometry snapping.

        Test: fast/backgrounds/background-image-size-double-rounding.html

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

2014-07-01  Pratik Solanki  <psolanki@apple.com>

        Create NSURLRequest lazily when USE(CFNETWORK) is enabled
        https://bugs.webkit.org/show_bug.cgi?id=134441

        Reviewed by Andreas Kling.

        No new tests. Should be covered by existing tests.

        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::encodingRequiresPlatformData):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::nsURLRequest):

2014-07-01  Brady Eidson  <beidson@apple.com>

        Combine the Telephone and Selection overlay controllers, updating UI behavior.
        https://bugs.webkit.org/show_bug.cgi?id=134461

        Reviewed by Tim Horton.

        * WebCore.exp.in:

        * dom/Range.cpp:
        (WebCore::Range::contains): Returns true if the Range completely contains the passed-in Range.
        * dom/Range.h:

2014-07-01  Antti Koivisto  <antti@apple.com>

        REGRESSION(160908): vube.com video won't play after going into and out of fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=134489

        Reviewed by Zalan Bujtas.

        Test: fullscreen/full-screen-plugin.html

        It is difficult to restore the render tree correctly in all cases after removing a full screen
        renderer from the tree. r160908 avoided dealing with this by simply always reconstructing the subtree.
        Unfortunately plugin lifetime is currently tied to its renderer so this would cause the plugin to restart.
        
        With this patch we avoid reconstruction in normal cases and only force it if the render tree is complicated.

        * dom/Document.cpp:
        (WebCore::unwrapFullScreenRenderer):
        
            Force reconstruction conditionally.

        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::wrapRenderer):
        (WebCore::RenderFullScreen::unwrapRenderer):
        
            Deal with the simple case of single child, possibly in anonymous wrapper.
            In other cases request reconstruction.
            This is covered by the existing fullscreen tests.

        * rendering/RenderFullScreen.h:

2014-07-01  Zan Dobersek  <zdobersek@igalia.com>

        Remove remaining Vector<> copies in WebCore accessibility code
        https://bugs.webkit.org/show_bug.cgi?id=133263

        Reviewed by Darin Adler.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired): Don't copy the Vector member and
        then clear it -- move it into the local variable instead.
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::ariaLabeledByText): Move the axElements Vector into
        the AccessibilityText constructor.
        (WebCore::AccessibilityNodeObject::stringValue): Create a const reference to the Vector of
        HTMLSelectElement's list items instead of copying it.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityText::AccessibilityText): Take the Vector parameter by non-const
        value and move it into the member variable.
        * accessibility/AccessibilityRenderObject.cpp: 
        (WebCore::AccessibilityRenderObject::stringValue): Create a const reference to the Vector
        of HTMLSelectElement's list items instead of copying it.
        (WebCore::AccessibilityRenderObject::ariaSelectedRows): Wrap the AccessibilityChildrenVector
        iteration in a lambda. Use it to iterate over either the newly-constructed Vector (in case
        the object has the tree role) or the reference to the vector returned by
        AccessibilityTable::rows() (in case the object is an AccessibilityTable instance).

2014-06-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170605.
        https://bugs.webkit.org/show_bug.cgi?id=134484

        The changes cause crashes on ARM64 (Requested by benjaminp on
        #webkit).

        Reverted changeset:

        "Reduce dynamic memory allocation in css jit."
        https://bugs.webkit.org/show_bug.cgi?id=134416
        http://trac.webkit.org/changeset/170605

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Change the AddBackForwardItem message to take a page state object
        https://bugs.webkit.org/show_bug.cgi?id=134475

        Reviewed by Andreas Kling.

        * WebCore.exp.in:

2014-06-30  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Do not put tap highlight on images that are not in links, and on applet/embed/object
        https://bugs.webkit.org/show_bug.cgi?id=134471
        <rdar://problem/17513542>

        Reviewed by Enrica Casucci.

        UIKit has some special code to avoid tap highlight on certain type of object. This is not very flexible
        since the page has no way of overriding that behavior.

        This patch implement the same feature by changing the default stylesheet. The tap highlight is disabled
        by default for those object, and enabled for images that are in a link.

        * css/html.css:
        (applet, embed, object, img):
        (:-webkit-any-link img):

2014-06-30  Myles C. Maxfield  <mmaxfield@apple.com>

        All Indic text is rendered as boxes on iOS
        https://bugs.webkit.org/show_bug.cgi?id=134464

        Reviewed by Simon Fraser.

        I made a typo in r170207.

        Test: fast/text/indic.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::languageSpecificFallbackFont):

2014-06-30  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] languageSpecificFallbackFont() is not consistent
        https://bugs.webkit.org/show_bug.cgi?id=134473

        Reviewed by Darin Adler.

        It can use "<" throughout the function as well as keeping the fallthrough behavior consistent.

        No tests because there is no behavior change.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::languageSpecificFallbackFont):

2014-06-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        * WebCore.vcxproj/WebCore.vcxproj: Do not compile JSFileException
        and JSFileReaderSync multiple times.

2014-06-30  Daniel Bates  <dabates@apple.com>

        Avoid copying function object in lambda function in ScrollingThread::dispatchBarrier(); actually use move semantics
        https://bugs.webkit.org/show_bug.cgi?id=134470

        Reviewed by Anders Carlsson.

        Currently we always copy construct the captured std::function object when calling callOnMainThread()
        in the lambda function created in ScrollingThread::dispatchBarrier() because captured variables are
        const in a lambda expression's body by default. That is, the std::function object is captured as const.
        Instead, we should mark this lambda expression as mutable so the captured std::function object is
        non-const and hence we can use move semantics when passing it to callOnMainThread().

        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatchBarrier):

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Adopt the legacy session decoding inside WebPage::restoreSession for now
        https://bugs.webkit.org/show_bug.cgi?id=134465

        Reviewed by Sam Weinig.

        * WebCore.exp.in:

2014-06-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170578.
        https://bugs.webkit.org/show_bug.cgi?id=134462

        causes assertions loading nytimes.com on iOS (Requested by
        smfr on #webkit).

        Reverted changeset:

        "Create NSURLRequest lazily when USE(CFNETWORK) is enabled"
        https://bugs.webkit.org/show_bug.cgi?id=134441
        http://trac.webkit.org/changeset/170578

2014-06-30  Alex Christensen  <achristensen@webkit.org>

        Reduce dynamic memory allocation in css jit.
        https://bugs.webkit.org/show_bug.cgi?id=134416

        Reviewed by Benjamin Poulain.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::saveAllocatedCallerSavedRegisters):
        * cssjit/RegisterAllocator.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        Use inlineCapacity template parameter to reduce malloc calls.
        I use 16 and 32 as the inline capacity for non-register related vectors because that
        is probably big enough for the selector compiler, and if it is not then a malloc
        call will not be significant because the selector is very complex.
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::push):
        Pass a vector of stack references to match calls to pop and to avoid a call to appendVector.

2014-06-30  Alex Christensen  <achristensen@webkit.org>

        Use non-thumb registers in armv7 css jit.
        https://bugs.webkit.org/show_bug.cgi?id=134450

        Reviewed by Geoff Garen.

        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::isValidRegister):
        (WebCore::RegisterAllocator::isCallerSavedRegister):
        Use additional general purpose registers.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        Always succeed when compiling css selectors.

2014-06-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Tiles on bottom of screen are not always allocated when necessary
        https://bugs.webkit.org/show_bug.cgi?id=134272

        Reviewed by Simon Fraser.

        The initial visibleRect is in the coordinate of the root layer, so its origin
        is at the top left of the view. The initial rect we were using doesn't
        include the contents inset, so it was too short, which was causing tiles near
        the bottom of the screen to not always be allocated if the tile threshold was
        close to the bottom of the view. Instead, we want to include the contents
        inset size so the visible rect includes the entire view.
        GraphicsLayerCA::recursiveCommitChanges() takes care of mapping and cropping
        the visible rect into the tiled layer's coordinate system, at which point it
        is used for visible tile logic.

        Test: platform/mac-wk2/tiled-drawing/visible-rect-content-inset.html

        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::update):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2014-06-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed project gardening.

        * WebCore.vcxproj/WebCore.vcxproj: Clean up path information so
        files appear in appropriate places in project view.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2014-06-30  Zalan Bujtas  <zalan@apple.com>

        Remove redundant repaintCompositedLayers() parameter and its dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=134431

        Reviewed by Darin Adler.

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::convertToPixelSnappedLayerCoords): Deleted.
        (WebCore::RenderLayer::convertToLayerCoords): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::repaintCompositedLayers):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayer):
        * rendering/RenderLayerCompositor.h:

2014-06-30  Alex Christensen  <achristensen@webkit.org>

        Remove webkit prefix from pointer lock.
        https://bugs.webkit.org/show_bug.cgi?id=134312

        Reviewed by Dean Jackson.

        * dom/Document.cpp:
        (WebCore::Document::exitPointerLock):
        (WebCore::Document::pointerLockElement):
        (WebCore::Document::webkitExitPointerLock): Deleted.
        (WebCore::Document::webkitPointerLockElement): Deleted.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::requestPointerLock):
        (WebCore::Element::webkitRequestPointerLock): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * dom/EventNames.h:
        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::movementX):
        (WebCore::MouseRelatedEvent::movementY):
        (WebCore::MouseRelatedEvent::webkitMovementX): Deleted.
        (WebCore::MouseRelatedEvent::webkitMovementY): Deleted.
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::PointerLockController):
        Initialize all data members.
        (WebCore::PointerLockController::requestPointerLock):
        (WebCore::PointerLockController::didAcquirePointerLock):
        (WebCore::PointerLockController::didNotAcquirePointerLock):
        (WebCore::PointerLockController::didLosePointerLock):

2014-06-30  Myles C. Maxfield  <mmaxfield@apple.com>

        U16_IS_SURROGATE should not be called with a UChar32
        https://bugs.webkit.org/show_bug.cgi?id=134440

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::advanceByCombiningCharacterSequence):

2014-06-30  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove m_evasObject from Widget
        https://bugs.webkit.org/show_bug.cgi?id=134442

        Reviewed by Gyuyoung Kim.

        Since WebKit1/EFL was dropped, we don't need to keep the m_evasObject
        in the Widget.cpp because it's not used for WebKit2/Efl.

        * platform/Widget.h:
        (WebCore::Widget::evasObject): Deleted.
        * platform/efl/ScrollbarEfl.cpp:
        Removed WebKit1/Efl specific code which uses m_evasObject.
        It will be a dummy until WebKit2/Efl support proper scrollbar implementation.
        (WebCore::ScrollbarEfl::ScrollbarEfl):
        (WebCore::ScrollbarEfl::~ScrollbarEfl):
        (WebCore::ScrollbarEfl::setParent):
        (WebCore::ScrollbarEfl::frameRectsChanged):
        (WebCore::ScrollbarEfl::invalidate):
        (ScrollbarEfl::ScrollbarEfl): Deleted.
        (ScrollbarEfl::~ScrollbarEfl): Deleted.
        (scrollbarEflEdjeMessage): Deleted.
        (ScrollbarEfl::setParent): Deleted.
        (ScrollbarEfl::updateThumbPosition): Deleted.
        (ScrollbarEfl::updateThumbProportion): Deleted.
        (ScrollbarEfl::updateThumbPositionAndProportion): Deleted.
        (ScrollbarEfl::frameRectsChanged): Deleted.
        (ScrollbarEfl::invalidate): Deleted.
        * platform/efl/ScrollbarEfl.h:
        Removed unnecessary methods. In addition, applied final, override keyword.
        (WebCore::ScrollbarEfl::handleMouseMoveEvent): Deleted.
        (WebCore::ScrollbarEfl::handleMouseOutEvent): Deleted.
        (WebCore::ScrollbarEfl::handleMousePressEvent): Deleted.
        (WebCore::ScrollbarEfl::handleMouseReleaseEvent): Deleted.
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setEvasObject): Deleted.

2014-06-30  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix deprecated warning with bison 3
        https://bugs.webkit.org/show_bug.cgi?id=133791

        Reviewed by Csaba Osztrogonác.

        No new tests because no functional changes.

        * css/CSSGrammar.y.in:
        * xml/XPathGrammar.y:

2014-06-30  Jaehun Lim  <ljaehun.lim@samsung.com>

        Remove HarfBuzzShaper::setDrawRange()
        https://bugs.webkit.org/show_bug.cgi?id=134243

        Reviewed by Gyuyoung Kim.

        setDrawRange() is not used anywhere. Remove it.
        And m_fromIndex and m_toIndex are changed by only setDrawRange().
        So remove them too and use the default values instead of them.

        No new tests, no behavior changes.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):
        (WebCore::HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun):
            currentCharacterIndex is unsigned, always greater than 0. Clean up if statements.
        (WebCore::HarfBuzzShaper::setDrawRange): Deleted.
        * platform/graphics/harfbuzz/HarfBuzzShaper.h:

2014-06-29  Pratik Solanki  <psolanki@apple.com>

        Create NSURLRequest lazily when USE(CFNETWORK) is enabled
        https://bugs.webkit.org/show_bug.cgi?id=134441

        Reviewed by Sam Weinig.

        No new tests. Should be covered by exsting tests.

        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::nsURLRequest):

2014-06-29  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove netscape plugin implementation from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=134438

        Reviewed by Gyuyoung Kim.

        Because WebKit1/Efl was dropped, PluginPackageEfl.cpp and PluginViewEfl.cpp are not necessary.

        * PlatformEfl.cmake:
        * plugins/efl/PluginPackageEfl.cpp: Removed.
        * plugins/efl/PluginViewEfl.cpp: Removed.
        * plugins/x11/PluginViewX11.cpp: Removed.
        This file is to share common code between WebKit1/Efl and WebKit1/GTk.
        Now, both ports are dropped WebKit1 support and the GTK port already removed the related files at r167016.

2014-06-29  Yoav Weiss  <yoav@yoav.ws>

        Add support for HTMLImageElement's sizes attribute
        https://bugs.webkit.org/show_bug.cgi?id=133620

        Reviewed by Dean Jackson.

        Tests: fast/dom/HTMLImageElement/sizes/image-sizes-1x.html
               fast/dom/HTMLImageElement/sizes/image-sizes-2x.html
               fast/dom/HTMLImageElement/sizes/image-sizes-js-change.html
               fast/dom/HTMLImageElement/sizes/image-sizes-js-innerhtml.html
               http/tests/loading/sizes/preload-image-sizes-2x.html
               http/tests/loading/sizes/preload-image-sizes.html

        This patch adds support for HTMLImageElement's sizes attribute and the
        related srcset extended syntax as defined in
        http://picture.responsiveimages.org/.
        This sizes attribute syntax is added to the CSSGrammar and parsed by
        the CSSParser.
        The SourceSizeList class is generated by the parser, and used to get
        the final source size.
        HTMLImageElement and HTMLPreloadScanner send this value to
        HTMLSrcsetParser.
        HTMLSrcsetParser uses this value in order to pick the right resource.

        * CMakeLists.txt: Added css/SourceSizeList.cpp.
        * Configurations/FeatureDefines.xcconfig: Added the PICTURE_SIZES flag.
        * WebCore.vcxproj/WebCore.vcxproj: Added css/SourceSizeList.*.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Added css/SourceSizeList.*.
        * WebCore.xcodeproj/project.pbxproj: Added css/SourceSizeList.*.
        * css/CSSGrammar.y.in: Added 4 grammar rules that define a Media condition,
        Source size list, Source size length and source size.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSizesAttribute): Parse the sizes attribute.
        (WebCore::CSSParser::detectAtToken): Set the token to SIZESATTR.
        * css/CSSParser.h:
        * css/SourceSizeList.cpp: Added. Defined the SourceSize and SourceSizeList classes.
        (WebCore::SourceSize::match):
        (WebCore::computeLength):
        (WebCore::defaultValue):
        (WebCore::SourceSize::length):
        (WebCore::SourceSizeList::parseSizesAttribute):
        (WebCore::SourceSizeList::getEffectiveSize):
        * css/SourceSizeList.h: Added.
        (WebCore::SourceSize::SourceSize):
        (WebCore::SourceSizeList::append):
        * html/HTMLImageElement.cpp: Integrated sizes attribute parsing and added currentSrc.
        (WebCore::HTMLImageElement::setBestFitURLAndDPRFromImageCandidate):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::currentSrc):
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:
        * html/parser/HTMLDocumentParser.cpp: Added information required for sizes parsing to
        HTMLPreloadScanner calls.
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan):
        * html/parser/HTMLPreloadScanner.cpp: Integrated sizes attribute parsing.
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLSrcsetParser.cpp: Added 'w' descriptor parsing sizes based normalization.
        (WebCore::parseDescriptors):
        (WebCore::pickBestImageCandidate):
        (WebCore::bestFitSourceForImageAttributes):
        * html/parser/HTMLSrcsetParser.h:

2014-06-29  Andreas Kling  <akling@apple.com>

        No need to lazily initialize ResourceResponse internals when accessing timing data.
        <https://webkit.org/b/134437>
        <rdar://problem/17499876>

        When building with ENABLE(WEB_TIMING), the last thing that would happen when
        serializing a ResourceResponse in the network process is that we'd retrieve
        the ResourceLoadTiming to encode it as part of the response. Doing so would
        trigger the lazy instantiation of ResourceResponse's internal data structures.

        Since timing data is not actually lazily instantiated, we can just not do that.

        This shaves off ~550ms of network process main thread time on PLT, reducing
        response latency by not doing unnecessary stuff before letting the web process
        look at the downloaded data.

        Reviewed by Gavin Barraclough.

        * WebCore.exp.in:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::resourceLoadTiming): Deleted.
        (WebCore::ResourceResponseBase::setResourceLoadTiming): Deleted.
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::resourceLoadTiming):

2014-06-29  Pratik Solanki  <pratik.solanki@gmail.com>

        Refactor ResourceRequest into Cocoa and iOS specific files
        https://bugs.webkit.org/show_bug.cgi?id=134430

        Reviewed by Andreas Kling.

        No new tests because no functional changes.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::applyWebArchiveHackForMail): Deleted.
        * platform/network/cocoa/ResourceRequestCocoa.mm: Copied from Source/WebCore/platform/network/mac/ResourceRequestMac.mm.
        (WebCore::ResourceRequest::nsURLRequest):
        (WebCore::ResourceRequest::cfURLRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdateResourceHTTPBody):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/ios/ResourceRequestIOS.mm: Added.
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks):
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::updateNSURLRequest):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::initQuickLookResourceCachingQuirks):
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks):
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::updateNSURLRequest):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::ResourceRequest::nsURLRequest): Deleted.
        (WebCore::ResourceRequest::cfURLRequest): Deleted.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Deleted.
        (WebCore::ResourceRequest::doUpdateResourceHTTPBody): Deleted.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Deleted.
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody): Deleted.
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties): Deleted.
        (WebCore::ResourceRequest::setStorageSession): Deleted.

2014-06-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        TextCodecICU::encode turns the whole string as yen signs if there is any backslash in it
        https://bugs.webkit.org/show_bug.cgi?id=133678

        Reviewed by Alexey Proskuryakov.

        Test: fast/encoding/backslash-encoding-jp.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::encode): fixed the copy of characters other than backslash.

2014-06-28  Dean Jackson  <dino@apple.com>

        [iOS] Pinching into a video (fullscreen gesture) leaves page zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=134433
        <rdar://problem/16630794>

        Reviewed by Eric Carlson.

        Detect the number of target touches (those directly on the
        video element) and disable the page zoom if it looks
        like the user is trying to trigger fullscreen.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handleBaseGestureStart): If we are seeing
        two touches in this video element, don't trigger fullscreen. The
        exception is if we haven't yet started playback.
        (ControllerIOS.prototype.handleBaseGestureChange): Don't allow fullscreen
        if we haven't started playback (iOS 7 behaviour).
        (ControllerIOS.prototype.handleWrapperTouchStart): Keep track of the
        number of targetted touches.

2014-06-27  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] position:fixed inside accelerated overflow:scroll is jumpy
        https://bugs.webkit.org/show_bug.cgi?id=134426
        <rdar://problem/17474523>

        Reviewed by Tim Horton.

        After committing a new layer tree (with possibly stale position:fixed layer
        positions), we need the scrolling tree to update those positions based on
        the current scroll offset.
        
        Give ScrollingTreeScrollingNode an implementation of updateLayersAfterAncestorChange()
        which is required to update fixed/sticky child nodes.

        * WebCore.exp.in:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateLayersAfterAncestorChange):
        * page/scrolling/ScrollingTreeScrollingNode.h:

2014-06-28  Juan A. Suarez Romero  <jasuarez@igalia.com>  and  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use public getter/setter in GObject DOM bindings properties implementation.
        https://bugs.webkit.org/show_bug.cgi?id=134390.

        Reviewed by Carlos Garcia Campos.

        The current GObject DOM bindings generator is duplicating code when
        implementing the get/set_property methods and the public
        getters/setters, instead of making one invoking the other.
        
        This commit changes this behaviour so the code is not duplicated,
        making it easier to maintain.

        No new tests needed.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperty):
        (GenerateProperties):
        (WriteData):
        (GetCoreObject): Deleted.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (webkit_dom_test_active_dom_object_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (webkit_dom_test_event_constructor_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (webkit_dom_test_exception_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_set_property):
        (webkit_dom_test_interface_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp:
        (webkit_dom_test_nondeterministic_set_property):
        (webkit_dom_test_nondeterministic_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        (webkit_dom_test_typedefs_set_property):
        (webkit_dom_test_typedefs_get_property):
        * bindings/scripts/test/GObject/WebKitDOMattribute.cpp:
        (webkit_dom_test_exception_get_property):
        (webkit_dom_attribute_get_property):

2014-06-28  Radu Stavila  <stavila@adobe.com>

        [New Multicolumn] Elements with rounded corners and overflow:hidden do not properly clip their content
        https://bugs.webkit.org/show_bug.cgi?id=133941

        Reviewed by Darin Adler.

        When having a multicol element inside an element with overflow:hidden and border-radius,
        the fragments representing the columns need to have the border radius set also, to ensure
        proper clipping.

        Test: fast/multicol/newmulticol/multicol-clip-rounded-corners.html

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

2014-06-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Background clipping with subpixel behaves differently when composited.
        https://bugs.webkit.org/show_bug.cgi?id=134422

        Reviewed by Simon Fraser.

        Adjust cliprect with the subpixel offset from the graphics layer the same way we do it for painting.
        It ensures that cliprect starts from the right position when graphics layer is not on the same
        coordinates as the associated render layer.

        Test: compositing/hidpi-compositing-layer-with-subpixel-offset-accumulation-clipping.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::applyFilters):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:

2014-06-27  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement parts of the AVFOUNDATION_LOADER_DELEGATE logic for Windows
        https://bugs.webkit.org/show_bug.cgi?id=134418

        Reviewed by Eric Carlson.

        Land an initial implementation of AVFOUNDATION_LOADER_DELEGATE for
        Windows.

        * DerivedSources.cpp: Add new IDL files
        * DerivedSources.make: Add check for AVFOUNDATION_LOADER_DELEGATE.
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp: Added (ported from
        Objective C.)
        * WebCore.vcxproj/WebCore.vcxproj: Update for new files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.vcxproj/WebCoreCommon.props: Add new search paths.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Update for new files.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters: Ditto.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extractKeyURIKeyIDAndCertificateFromInitData):
        Moved from MediaPlayerPrivateAVFoundationObjC.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/AVFoundationCFSoftLinking.h:
        Update for new API calls.
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp: Added.
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h: Added.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        Updated for new AVFOUNDATION_LOADER_DELEGATE methods.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp: Added.
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h: Added.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        Remove method that was moved to base class.

2014-06-27  Benjamin Poulain  <benjamin@webkit.org>

        Remove BufferForAppendingHyphen
        https://bugs.webkit.org/show_bug.cgi?id=134376

        Reviewed by Darin Adler.

        It is legacy, from a time when that code was using a Vector.

        The problem is that StringBuilder's memory was also implicitly used to keep
        the string alive for the lifespan of the TextRun. That seems quite dangerous
        as changes in StringBuilder could have changed that.

        To fix the lifetime issue, my first idea was to make it explicit by passing
        a String reference to hold the memory alive, and a boolean to say if the text
        need an hyphen. The problem with that is this code is very hot and I made things
        worse.

        The solution with this patch is to just pass a pointer to a String to do both
        the buffer reference, and the decision to add the hyphen. Having a single
        argument with 2 meanings is not pretty but that's not worse than the old buffer.

        * editing/TextIterator.cpp:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::constructTextRun):
        (WebCore::adjustCharactersAndLengthForHyphen): Deleted.
        * rendering/InlineTextBox.h:
        (WebCore::BufferForAppendingHyphen::BufferForAppendingHyphen): Deleted.
        * rendering/RenderText.cpp:

2014-06-27  Jeremy Jones  <jeremyj@apple.com>

        Lazily link frameworks in WebVideoFullscreenInterfaceAVKit.
        https://bugs.webkit.org/show_bug.cgi?id=134407

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController init]):
        Load AVPlayerController on use.
        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit):
        Remove loading on construction.
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime): Load AVValueTiming on use.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): Load several classes on use.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Load UIColor on use.

2014-06-27  Alex Christensen  <achristensen@webkit.org>

        Remove extra operations from 64-bit or on armv7.
        https://bugs.webkit.org/show_bug.cgi?id=134408

        Reviewed by Geoffrey Garen.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::addFlagsToElementStyleFromContext):
        Only do or operations if it would change values.
        Often we're only setting one flag, so half the operations are not necessary.

2014-06-27  Beth Dakin  <bdakin@apple.com>

        ScrollView::rootViewToTotalContents() needs to take topContentInset into account
        https://bugs.webkit.org/show_bug.cgi?id=134415
        -and corresponding-
        <rdar://problem/17473633>

        Reviewed by Simon Fraser.

        This affects hit testing in headers aka PageBanners.

        The root view will be anchored above the start of the total contents if there is a 
        topContentInset, so the inset value should be subtracted to get into the right 
        coordinate space here.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rootViewToTotalContents):

2014-06-27  Antti Koivisto  <antti@apple.com>

        Flush throttling with remote layers
        https://bugs.webkit.org/show_bug.cgi?id=134398

        Reviewed by Darin Adler.

        With remote layer trees the flush scheduling lives in the WebKit2 layer. The throttling code
        needs to live there as well.
        
        Add the required callbacks and disable the existing throttling code in RenderLayerCompositor
        when remote layers are in use. Later we can get rid of the RenderLayerCompositor throttling code.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadProgressingStatusChanged):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::adjustLayerFlushThrottling):
        * page/FrameView.cpp:
        (WebCore::FrameView::disableLayerFlushThrottlingTemporarilyForInteraction):
        (WebCore::FrameView::loadProgressingStatusChanged):
        
            Factor the progress status change activities to a function.

        (WebCore::FrameView::updateLayerFlushThrottling):
        (WebCore::FrameView::setExposedRect):
        
            Move the call to adjustTiledBackingCoverage from WebKit to here.

        (WebCore::FrameView::updateLayerFlushThrottlingInAllFrames): Deleted.
        * page/FrameView.h:
        * page/LayerFlushThrottleState.h: Added.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):

2014-06-27  Brady Eidson  <beidson@apple.com>

        The user pressing a button on a gamepad should cause gamepads to become visible to all NavigatorGamepads.
        https://bugs.webkit.org/show_bug.cgi?id=134375

        Reviewed by Darin Adler.

        No new tests (Not yet a tested config)

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::platformGamepadConnected): Also call to makeGamepadsVisibileToBlindNavigators.
        (WebCore::GamepadManager::platformGamepadDisconnected):
        (WebCore::GamepadManager::platformGamepadInputActivity): Call makeGamepadsVisibileToBlindNavigators.
        (WebCore::GamepadManager::makeGamepadsVisibileToBlindNavigators): Walk through each blind navigator
          notifying it of each connected Gamepad.
        (WebCore::GamepadManager::registerNavigator): Also add to the blind navigator set.
        (WebCore::GamepadManager::unregisterNavigator): Also remove from the blind navigator set.
        * Modules/gamepad/GamepadManager.h:

        * platform/GamepadProviderClient.h: Added platformGamepadInputActivity.

        * platform/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::HIDGamepadProvider):
        (WebCore::HIDGamepadProvider::valuesChanged): Set the input notification timer which will notify the clients
          that a button was pressed.
        (WebCore::HIDGamepadProvider::inputNotificationTimerFired): Perform that notification.
        * platform/mac/HIDGamepadProvider.h:

2014-06-27  Brady Eidson  <beidson@apple.com>

        HIDGamepads should populate themselves with initial input values
        https://bugs.webkit.org/show_bug.cgi?id=134381

        Reviewed by Darin Adler.

        No new tests (Not yet a tested config)

        * platform/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::getCurrentValueForElement):
        (WebCore::HIDGamepad::initElements):  Loop through all the saved elements to get current values.
        (WebCore::HIDGamepad::maybeAddButton):
        (WebCore::HIDGamepad::maybeAddAxis):
        * platform/mac/HIDGamepad.h:
        (WebCore::HIDGamepadElement::HIDGamepadElement):
        (WebCore::HIDGamepadButton::HIDGamepadButton):
        (WebCore::HIDGamepadAxis::HIDGamepadAxis):

2014-06-27  Peyton Randolph  <prandolph@apple.com>

        Add feature flag for link long-press gesture.
        https://bugs.webkit.org/show_bug.cgi?id=134262

        Reviewed by Enrica Casucci.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_LINK_LONG_PRESS.

2014-06-26  Brady Eidson  <beidson@apple.com>

        HIDGamepadProvider should only be active when someone is interested in Gamepads.
        https://bugs.webkit.org/show_bug.cgi?id=134374

        Reviewed by Darin Adler.

        No new tests (Not yet a tested config)

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::registerNavigator): Add some logging.
        (WebCore::GamepadManager::unregisterNavigator): Ditto.

        * platform/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::HIDGamepadProvider):
        (WebCore::HIDGamepadProvider::connectionDelayTimerFired): Stop suppressing connection callbacks
        (WebCore::HIDGamepadProvider::openAndScheduleManager):
        (WebCore::HIDGamepadProvider::closeAndUnscheduleManager): Stop listening for gamepad events, and clear
          all current gamepads.
        (WebCore::HIDGamepadProvider::startMonitoringGamepads): If the first client, call openAndScheduleManager
        (WebCore::HIDGamepadProvider::stopMonitoringGamepads): If the last client, call closeAndUnscheduleManager
        (WebCore::HIDGamepadProvider::deviceAdded): If this callback came while we were suppressing connection
          callbacks, it is a startup event for already-connected gamepads. Stop suppressing callbacks in a later
          spin of the runloop.
        (WebCore::HIDGamepadProvider::deviceRemoved):
        * platform/mac/HIDGamepadProvider.h:
        (WebCore::HIDGamepadProvider::setShouldDispatchCallbacks): Deleted.

2014-06-27  Alex Christensen  <achristensen@webkit.org>

        Prevent unnecessary register saving in css jit.
        https://bugs.webkit.org/show_bug.cgi?id=133955

        Reviewed by Geoff Garen.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::prepareAndCall):
        (WebCore::FunctionCall::cleanupPostCall):
        (WebCore::FunctionCall::saveAllocatedCallerSavedRegisters):
        (WebCore::FunctionCall::restoreAllocatedCallerSavedRegisters):
        (WebCore::FunctionCall::saveAllocatedRegisters): Renamed to saveAllocatedCallerSavedRegisters.
        (WebCore::FunctionCall::restoreAllocatedRegisters): Renamed to restoreAllocatedCallerSavedRegisters.
        Only push caller saved registers before function calls.
        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::isValidRegister):
        Corrected register ranges.
        (WebCore::RegisterAllocator::isCallerSavedRegister): Added.

2014-06-27  Beth Dakin  <bdakin@apple.com>

        Custom scrollbars should not create ScrollbarPainters on Mac
        https://bugs.webkit.org/show_bug.cgi?id=134406
        -and corresponding-
        <rdar://problem/16178301>

        Reviewed by Tim Horton.

        The solution here is to return early in ScrollbarThemeMac::registerScrollbar() if 
        the scrollbar is custom. However, since this function is called during the 
        RenderScrollbar and Scrollbar constructor, we need to re-implement 
        Scrollbar::isCustomScrollbar() to return a member variable that is passed into the 
        constructor. Otherwise, we will get Scrollbar’s implementation is 
        isCustomScrollbar() wrongfully returning false since instead of the derived
        class’s implementation. 

        Scrollbar constructor now has an option parameter isCustomScrollbar that defaults 
        to false. That value is returned by isCustomScrollbar()
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/Scrollbar.h:

        Return early if this is a custom scrollbar since the rest of the function deals 
        with creating a native scrollbar and getting it in the right state.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::registerScrollbar):

        Send true to the Scrollbar constructor to indicate that this is a custom 
        scrollbar.
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        * rendering/RenderScrollbar.h:

2014-06-27  Eric Carlson  <eric.carlson@apple.com>

        [Mac] AVMetadataKeySpaceISOUserData not defined on 10.8
        https://bugs.webkit.org/show_bug.cgi?id=134401

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::metadataType): Use SOFT_LINK_POINTER_OPTIONAL for AVMetadataKeySpaceISOUserData
            so we don't have problems on OS versions where it isn't defined.

2014-06-27  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        REGRESSION (r168685): css calc() expression fails 
        https://bugs.webkit.org/show_bug.cgi?id=134059

        The expression 'calc((100% - 20px) / 3' did not work properly after r168685,
        because primitiveType() function in CSSCalculationValue.cpp has handled
        CalcPercentLength and CalcPercentNumber categories as if they were angles.
        The patch fixes this incorrect behavior.

        Reviewed by Simon Fraser.

        Test: fast/css/calc-percentage-pixel.html

        * css/CSSCalculationValue.cpp:

2014-06-27  Jer Noble  <jer.noble@apple.com>

        [MSE] http/tests/media/media-source/mediasource-append-buffer.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=134389

        Reviewed by Eric Carlson.

        Two subtests in mediasource-append-buffer.html are failing. Bring setDuration() up to spec
        by throwing an exception if the duration is called while any SourceBuffer is updating. Do
        not cancel pending events when a SourceBuffer is removed from its MediaSource. And mark the
        SourceBuffer as having pending activity if there are pending events to be fired.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setDuration):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removedFromMediaSource):
        (WebCore::SourceBuffer::hasPendingActivity):

2014-06-26  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix touch-scrollable elements with overflow:scroll on just one axis, and RTL scrolling
        https://bugs.webkit.org/show_bug.cgi?id=134377
        <rdar://problem/16762224>

        Reviewed by Tim Horton.
        
        Make -webkit-overflow-scrolling:touch scrolling work correctly when one axis
        has overflow:scroll and the other overflow:hidden. Also fix scrolling in RTL
        contexts.
        
        An RTL scroller with overflow-x:hidden will have a non-zero scroll origin,
        and needs to truncate the scrolled content on the left side. To pass the
        correct geometry to the UI process, we need to introduce the concept of
        "reachable" size as well as total content size; normally these are the same,
        but will differ when scrolling is only allowed on one axis but there is overflow
        on both axes.
        
        To get the reachable size, add RenderLayer::scrollableContentsSize().
        
        RenderLayer::visibleSize() was wrong; the function should return the size of the 
        scrollable portion, but used layer size which includes borders. Fix to use pixelSnappedClientWidth()/Height(),
        which is what we use for scrollbar computations.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setReachableContentsSize):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::reachableContentsSize):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::reachableContentsSize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::visibleSize):
        (WebCore::RenderLayer::scrollableContentsSize):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::updateScrollingLayerWithClient):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2014-06-27  Bear Travis  <betravis@adobe.com>

        [Feature Queries] Fix feature queries build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=134359

        Reviewed by Antti Koivisto.

        Update the XCode project and Feature Queries code to build on Mac.

        There are existing tests for supports in the LayoutTests/css3 directory.

        * WebCore.xcodeproj/project.pbxproj: Add the Feature Queries files
        to the XCode project.
        * css/CSSGrammar.y.in: Update CSSParserExpression to CSSParserValueList.
        * css/DOMWindowCSS.idl: Add ImplementationLacksVTable metadata.

2014-06-27  Jer Noble  <jer.noble@apple.com>

        [MSE] media/media-source/media-source-tracks.html is crashy
        https://bugs.webkit.org/show_bug.cgi?id=134385

        Reviewed by Eric Carlson.

        Fix the refactoring error (self assignment) introduced by r170488.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):

2014-06-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        XHR should keep attributes on instance
        https://bugs.webkit.org/show_bug.cgi?id=134363

        Reviewed by Sam Weinig.

        Test: js/dom/xhr-prototype-define-property.html

        Having them on the prototype broke some sites due to the fact that these DOM attributes are currently 
        not configurable. Once we make them configurable, we can move XHR attributes back to the prototype.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InterfaceRequiresAttributesOnInstanceForCompatibility):

2014-06-27  Jeremy Jones  <jeremyj@apple.com>

        removeCodedFrames should modify ref to TrackBuffer no a copy.
        https://bugs.webkit.org/show_bug.cgi?id=134380

        Reviewed by Daniel Bates.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames):
        Iterate with a reference.

2014-06-27  Zalan Bujtas  <zalan@apple.com>

        Set cliprect radius unconditionally in RenderLayer.
        https://bugs.webkit.org/show_bug.cgi?id=134396

        Reviewed by Simon Fraser.

        No change in functionality.

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

2014-06-27  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Interaction between auto-placement and column / row spanning
        https://bugs.webkit.org/show_bug.cgi?id=110633

        Reviewed by Sergio Villar Senin.

        Modify auto-placement algorithm in order to support span in both
        definite and automatic positions.

        This patch fixes examples like:
        grid-row: auto;
        grid-column: 2 / span 3;

        And also:
        grid-row: auto;
        grid-column: span 3;

        Tests: fast/css-grid-layout/grid-item-auto-placement-automatic-span.html
               fast/css-grid-layout/grid-item-auto-placement-definite-span.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::isEmptyAreaEnough): New method that
        checks if a grid area is or not empty.
        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea): Updated method
        that now receives two arguments with the span value in both directions.
        (WebCore::RenderGrid::ensureGridSize): Renamed from gridRow(). Adapted
        method to grow in both directions at the same time if needed. It ensures
        that the grid is big enough to insert a new item.
        (WebCore::RenderGrid::insertItemIntoGrid): Only leave the method that
        receives a GridCoordinate. It uses ensureGridSize() before inserting the
        item in the grid.
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Ensure that
        the grid is big enough to place the largest span for auto-positioned
        items.
        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid):
        New method that returns a GridCoordinate outside current grid with the
        requested dimensions.
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid): Adapted
        method to calculate the item's span and use the new version of
        nextEmptyGridArea(). If an empty area is not found it uses
        createEmptyGridAreaAtSpecifiedPositionsOutsideGrid() to place the item.
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid): Ditto.
        (WebCore::RenderGrid::growGrid): Renamed to ensureGridSize().
        * rendering/RenderGrid.h: Modify methods headers and add new method
        signature.
        * rendering/style/GridCoordinate.h:
        (WebCore::GridSpan::integerSpan): Add new simple method to return the
        span value of a position.
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition):
        Implement method to take into account span in auto-placement algorithm.
        (WebCore::GridResolvedPosition::adjustGridPositionsFromStyle): Add new
        checks related with named grid line spans in auto-positioned items,
        which is not allowed according to the spec.
        * rendering/style/GridResolvedPosition.h: Update method header.

2014-06-27  Mahesh Kulkarni  <mahesh.kk@samsung.com>

        [XHR] open method must uppercase only standard method types
        https://bugs.webkit.org/show_bug.cgi?id=134264

        Reviewed by Darin Adler.

        As per step-5 of http://xhr.spec.whatwg.org/#the-open()-method only
        DELETE, PUT, GET, POST, OPTIONS, HEAD are standard. Use other methods as is without case change.
        All tests from w3c-test suite pass http://w3c-test.org/XMLHttpRequest/open-method-case-sensitive.htm.
        This merges blink changes from r176592.

        Tests: http/tests/xmlhttprequest/xmlhttprequest-open-method-allowed.html
               http/tests/xmlhttprequest/xmlhttprequest-open-method-case-insensitive.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::uppercaseKnownHTTPMethod):

2014-06-27  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        Increase priority on SharedTimer source.
        http://bugs.webkit.org/show_bug.cgi?id=134109

        While running webkit on a Debian virtual machine I stumbled upon an issue where JS
        setTimeout callbacks were not being properly invoked due to machine limitations and the
        usage of a low priority on setTimeout timers.

        This patch increases the SharedTimer source priority to use the default glib priority which
        fixes the issue, making setTimeout JS calls work properly on the test environment.

        Reviewed by Gustavo Noronha Silva.

        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireInterval):

2014-06-27  Zalan Bujtas  <zalan@apple.com>

        Remove redundant offsetFromAncestor() call from RenderLayer::localClipRect().
        https://bugs.webkit.org/show_bug.cgi?id=134378

        Reviewed by Simon Fraser.

        No change in functionality.

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

2014-06-27  Philippe Normand  <pnormand@igalia.com>

        [GTK] 8tracks.com triggers annoying pop-up window/installation of "About protocol source plugin" (GStreamer?)
        https://bugs.webkit.org/show_bug.cgi?id=133605

        Reviewed by Carlos Garcia Campos.

        Don't attempt to load blank URLs with the GStreamer media
        player. Those URLs trigger the codec installer which is useless in
        this scenario. This patch also renames some of the variables of
        the ::load method, as suggested by Carlos.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Check video-sink validity before disconnecting its signal handlers.
        (WebCore::MediaPlayerPrivateGStreamer::load): Don't load blank
        URLs (about:blank).
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        Disconnect repaint handler only if it's valid.

2014-06-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose getter and setter functions for attributes named type
        https://bugs.webkit.org/show_bug.cgi?id=134300

        Reviewed by Martin Robinson.

        We skip those because the getter conflicts with the get_type()
        function of all GObjects. We should use a different name for them. As
        a general rule we use the last word of the class name, something like:

          webkit_dom_blob_get_type() -> webkit_dom_blob_get_blob_type()
          webkit_dom_event_get_type() -> webkit_dom_event_get_event_type()

        It's consistent with other existing DOM methods like
        webkit_dom_xpath_result_get_result_type() or webkit_dom_css_value_get_css_value_type().
        This patch also adds some exceptions for particular cases.

        * bindings/gobject/webkitdom.symbols: Add new public symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetFunctionSigName): Helper function to return the function name
        that takes into account all exceptions when generating getters and
        setters of attributes named type. Otherwise the name is returned unmodified.
        (GenerateFunction): Use GetFunctionSigName().
        (GenerateFunctions): Do not skip functions for type attributes.

2014-06-27  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove unnecessary #include in HistoryController
        https://bugs.webkit.org/show_bug.cgi?id=134369

        Reviewed by Daniel Bates.

        After the landing of https://webkit.org/b/130099, HistoryController doesn't need
        WebCore::Settings class. So we can remove the related header.

        * loader/HistoryController.cpp:

2014-06-26  Jeongeun Kim  <je_julie.kim@samsung.com>

        REGRESSION (r170287): SVGDocumentExtensions::rebuildElements() called on removed element
        https://bugs.webkit.org/show_bug.cgi?id=134304

        Reviewed by Daniel Bates.

        Roll out <http://trac.webkit.org/170287> (https://bugs.webkit.org/show_bug.cgi?id=134186)
        as it led to SVGDocumentExtensions::rebuildElements() being called on an element(s) that
        may no longer be in the document.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::removeChildren):
        * dom/Document.cpp:
        (WebCore::Document::commonTeardown):
        (WebCore::Document::implicitClose):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::rebuildElements):
        * svg/SVGDocumentExtensions.h:

2014-06-26  Tim Horton  <timothy_horton@apple.com>

        [WK2] Pinch-zoom shadows can overlap headers and footers
        https://bugs.webkit.org/show_bug.cgi?id=134372
        <rdar://problem/16004095>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        Put header/footer layers in front of the root content layer instead of behind.
        Ideally nothing would ever overlap them, but this will give them precedence regardless.

2014-06-26  David Kilzer  <ddkilzer@apple.com>

        [Win] Always NULL-terminate the string in createUTF8String()
        <http://webkit.org/b/134353>
        <rdar://problem/17471783>

        Reviewed by Brent Fulgham.

        * plugins/PluginView.cpp:
        (WebCore::createUTF8String): Pull out CString length into local
        variable.  Switch to use memcpy.  Always NULL-terminate the
        string.

2014-06-26  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash in WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered const + 13
        https://bugs.webkit.org/show_bug.cgi?id=134367

        Reviewed by Darin Adler.

        Add a couple of null-checks to protect against methods being called in the brief time
        between when the object is created and when it's asked to load.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered):

2014-06-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Rearrange conditions to find invalid protocol in NavigatorContentUtils::verifyProtocolHandlerScheme()
        https://bugs.webkit.org/show_bug.cgi?id=134289

        Reviewed by Darin Adler.

        If we do early return when there is invalid protocol, we're able to avoid unnecessary call flow.

        No new tests, covered by existing tests.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::verifyProtocolHandlerScheme):

2014-06-26  Benjamin Poulain  <bpoulain@apple.com>

        [WK1] Use native touch event's timestamp for DOM touch event
        https://bugs.webkit.org/show_bug.cgi?id=134326

        Reviewed by Enrica Casucci.

        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::PlatformTouchEventBuilder::PlatformTouchEventBuilder):
        Use device event timestamp to get more accurate timing information. This also removes
        the variance introduced by WebKit when computing velocity/acceleration/etc.

2014-06-26  Balazs Kelemen  <b.kelemen@samsung.com>

        Memcache migth not be pruned when it should for https pages
        https://bugs.webkit.org/show_bug.cgi?id=134361

        Reviewed by Geoffrey Garen.

        There is no reason we should not try to prune in case of a https resource.

        No observable change in behavior, no tests.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        Call prune unconditionally and remove an unnecessary branch.

2014-06-26  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: Mountain Lion: Gmail's "in new window" view of mail threads is very slow to load its content
        https://bugs.webkit.org/show_bug.cgi?id=133882
        <rdar://problem/17271965>

        Reviewed by Brady Eidson.

        This goes to pre-r161796 behavior on 10.8 and 10.9. We schedule the requests internally,
        and only give 6 of them to CFNetwork at a time. Except for synchronous requests,
        which still use the improved approach, and don't count against 6 connections.

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::resourcePrioritiesEnabled):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Deleted.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2014-06-26  Brady Eidson  <beidson@apple.com>

        Remove use of PlatformStrategies for Gamepad API.
        https://bugs.webkit.org/show_bug.cgi?id=134348

        Reviewed by Dean Jackson.

        No new tests (Not yet a tested config)

        Introduce a virtual GamepadProvider with a process-global shared provider.
        The base implementation of the GamepadProvider does nothing.
        * platform/GamepadProvider.cpp: Renamed from Source/WebKit/mac/WebCoreSupport/WebHIDGamepadController.h.
        (WebCore::GamepadProvider::shared):
        (WebCore::GamepadProvider::setSharedProvider):
        (WebCore::GamepadProvider::startMonitoringGamepads):
        (WebCore::GamepadProvider::stopMonitoringGamepads):
        (WebCore::GamepadProvider::platformGamepads):
        * platform/GamepadProvider.h: Renamed from Source/WebCore/platform/GamepadStrategy.h.
        (WebCore::GamepadProvider::~GamepadProvider):

        * platform/GamepadProviderClient.h: Renamed from Source/WebCore/platform/GamepadStrategyClient.h.
        (WebCore::GamepadProviderClient::~GamepadProviderClient):

        GamepadManager is now a GamepadProviderClient:
        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::GamepadManager):
        (WebCore::GamepadManager::registerNavigator):
        (WebCore::GamepadManager::unregisterNavigator):
        * Modules/gamepad/GamepadManager.h:

        Remove the GamepadStrategy altogether:
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::PlatformStrategies):
        (WebCore::PlatformStrategies::gamepadStrategy): Deleted.

        Call to the shared GamepadProvider instead of the strategy:
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::gamepads):
        (WebCore::NavigatorGamepad::gamepadsBecameVisible):
        (WebCore::NavigatorGamepad::gamepadConnected):

        HIDGamepadListener is now a subclass of GamepadProvider that implements the HID based management.
        LegacyWebKit on Mac will install the shared HIDGamepadProvider instead of the default GamepadProvider:
        * platform/mac/HIDGamepadProvider.cpp: Renamed from Source/WebCore/platform/mac/HIDGamepadListener.cpp.
        (WebCore::deviceMatchingDictionary):
        (WebCore::deviceAddedCallback):
        (WebCore::deviceRemovedCallback):
        (WebCore::deviceValuesChangedCallback):
        (WebCore::HIDGamepadProvider::shared):
        (WebCore::HIDGamepadProvider::HIDGamepadProvider):
        (WebCore::HIDGamepadProvider::indexForNewlyConnectedDevice):
        (WebCore::HIDGamepadProvider::startMonitoringGamepads):
        (WebCore::HIDGamepadProvider::stopMonitoringGamepads):
        (WebCore::HIDGamepadProvider::deviceAdded):
        (WebCore::HIDGamepadProvider::deviceRemoved):
        (WebCore::HIDGamepadProvider::valuesChanged):
        (WebCore::HIDGamepadProvider::removeGamepadForDevice):
        * platform/mac/HIDGamepadProvider.h: Renamed from Source/WebCore/platform/mac/HIDGamepadListener.h.
        (WebCore::HIDGamepadProvider::platformGamepads):
        (WebCore::HIDGamepadProvider::setShouldDispatchCallbacks):

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

        * platform/mac/HIDGamepad.h: Fix incorrect comment

2014-06-26  Andreas Kling  <akling@apple.com>

        Skip memcmp()ing fully downloaded resources after they become mmap()able.
        <https://webkit.org/b/134362>

        When we receive word that a downloaded resource is now available for mmap()ing
        from the file system, we don't need to compare against the buffered data,
        since even if there were a mismatch, the cached version should be the canonical one.

        This was added as belt-and-suspenders while the supporting mechanism was being
        developed in CFNetwork, and there's no evidence of a race today. This change
        turns the runtime checks into debug-only assertions.

        Saves ~300ms of main thread time on PLT.

        Reviewed by Geoff Garen.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData):

2014-06-26  Jer Noble  <jer.noble@apple.com>

        [MSE] Refactoring: Use C++11 for-loops in SourceBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=134352

        Reviewed by Darin Adler.

        Use C++11 style for-loops where appropriate in SourceBuffer now that the
        SampleMap ordered objects support them.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::sourceBufferPrivateFastSeekTimeForMediaTime):
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::validateInitializationSegment):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2014-06-25  Joseph Pecoraro  <pecoraro@apple.com>
 
        [iOS]: Tapping <button> outside of a form is no longer working
        https://bugs.webkit.org/show_bug.cgi?id=134319
        <rdar://problem/17213346>

        Reviewed by Daniel Bates.

        Restore behavior of allowing <button> clicks outside of <form>.
        This used to be iOS behavior before it was removed in favor of the
        OpenSource (Android?) behavior. Now, willRespondToMouseClickEvents
        is only used by iOS, so lets restore the iOS behavior.

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::willRespondToMouseClickEvents):

2014-06-26  Jer Noble  <jer.noble@apple.com>

        Unreviewed build-fix. Remove unintentionial rename of MediaTime.h -> MediaTimeHash.h.

        * Modules/mediasource/SampleMap.h:

2014-06-26  Eric Carlson  <eric.carlson@apple.com>

        [iOS] no need to deactivate audio session
        https://bugs.webkit.org/show_bug.cgi?id=134350

        Reviewed by Jer Noble.

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): Don't bother calling 
            AudioSession::setActive(false), WebCore's audio session will be deactivated 
            automatically if another application begins playing audio.

2014-06-26  Jer Noble  <jer.noble@apple.com>

        [MSE] Refactoring: Differentiate between SampleMap decode and presentation order methods
        https://bugs.webkit.org/show_bug.cgi?id=134349

        Reviewed by Geoffrey Garen.

        Refactor SampleMap to clarify the distinction between methods which return decode-order
        iterators and ones which retun presentation-order iterators.

        Add two classes, PresentationOrderSampleMap and DecodeOrderSampleMap, to contain the actual
        MediaTime-to-Sample maps, and move the methods returning presentation-order and decode-order
        iterators to each, respectively.  Rename the {presentation,decode}{Begin,End}() methods to
        begin() and end() so the objects can be used in C++11 for-loops.

        Update all the call sites in SourceBuffer to use the new ordered objects.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::SampleIsLessThanMediaTimeComparator::operator()): Use new ordered objects.
        (WebCore::SampleIsGreaterThanMediaTimeComparator::operator()): Ditto.
        (WebCore::SampleMap::clear): Ditto.
        (WebCore::SampleMap::addSample): Ditto.
        (WebCore::SampleMap::removeSample): Ditto.
        (WebCore::PresentationOrderSampleMap::findSampleContainingPresentationTime): Renamed from SampleMap version.
        (WebCore::PresentationOrderSampleMap::findSampleAfterPresentationTime): Ditto.
        (WebCore::DecodeOrderSampleMap::findSampleWithDecodeTime): Ditto.
        (WebCore::PresentationOrderSampleMap::reverseFindSampleContainingPresentationTime): Ditto.
        (WebCore::PresentationOrderSampleMap::reverseFindSampleBeforePresentationTime): Ditto.
        (WebCore::DecodeOrderSampleMap::reverseFindSampleWithDecodeTime): Ditto.
        (WebCore::DecodeOrderSampleMap::findSyncSamplePriorToPresentationTime): Ditto.
        (WebCore::DecodeOrderSampleMap::findSyncSamplePriorToDecodeIterator): Ditto.
        (WebCore::DecodeOrderSampleMap::findSyncSampleAfterPresentationTime): Ditto.
        (WebCore::DecodeOrderSampleMap::findSyncSampleAfterDecodeIterator): Ditto.
        (WebCore::PresentationOrderSampleMap::findSamplesBetweenPresentationTimes): Ditto.
        (WebCore::PresentationOrderSampleMap::findSamplesWithinPresentationRange): Ditto.
        (WebCore::DecodeOrderSampleMap::findDependentSamples): Ditto.
        * Modules/mediasource/SampleMap.h:
        (WebCore::PresentationOrderSampleMap::begin): Renamed from presentationBegin().
        (WebCore::PresentationOrderSampleMap::end): Renamed from presentationEnd().
        (WebCore::PresentationOrderSampleMap::rbegin): Renamed from reversePresentationBegin().
        (WebCore::PresentationOrderSampleMap::rend): Renamed from reversePresentationEnd().
        (WebCore::DecodeOrderSampleMap::begin): Renamed from decodeBegin().
        (WebCore::DecodeOrderSampleMap::end): Renamed from decodeEnd().
        (WebCore::DecodeOrderSampleMap::rbegin): Renamed from reverseDecodeBegin().
        (WebCore::DecodeOrderSampleMap::rend): Renamed from reverseDecodeEnd().
        (WebCore::SampleMap::SampleMap): Create new ordered objects.
        (WebCore::SampleMap::sizeInBytes): Use new ordered objects.
        (WebCore::SampleMap::decodeOrder): Simple accessor.
        (WebCore::SampleMap::presentationOrder): Simple accessor.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime): Use new ordered objects.
        (WebCore::SourceBuffer::sourceBufferPrivateFastSeekTimeForMediaTime): Ditto.
        (WebCore::SourceBuffer::removeCodedFrames): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        (WebCore::SourceBuffer::bufferedSamplesForTrackID): Ditto.

2014-06-26  Chris Fleizach  <cfleizach@apple.com>

        Add an undo group for each dictated utterance in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=134086

        Applied review comments from Sam Weinig.

        Move the associated USE #define into Platform.h.
 
        * WebCore.xcodeproj/project.pbxproj:
        * editing/mac/TextUndoInsertionMarkup.h: Removed.
        * editing/mac/TextUndoInsertionMarkupMac.h:

2014-06-26  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Fix Debug Build Error in Webcore module.
        https://bugs.webkit.org/show_bug.cgi?id=134345

        Reviewed by Zalan Bujtas.

        Use static cast to change the type of variable to fix error

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setDrawRange):

2014-06-26  Eric Carlson  <eric.carlson@apple.com>

        [Mac] allow host application to canonicalize media urls
        https://bugs.webkit.org/show_bug.cgi?id=134329

        Reviewed by Dean Jackson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::canonicalURL): New, use NSURLProtocol to canonicalize a URL.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Call canonicalURL.

2014-06-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add padding for future expansion to WebKitDOMEventTargetIface
        https://bugs.webkit.org/show_bug.cgi?id=134298

        Reviewed by Martin Robinson.

        * bindings/gobject/WebKitDOMEventTarget.h:

2014-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for constants in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=133983

        Reviewed by Martin Robinson.

        * bindings/gobject/webkitdom.symbols: Add stable constants.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateHeader): Add constants to the header.
        (Generate): Pass the interface object to GenerateHeader to get the constants
        (IsInterfaceSymbol): Helper function that returns whether the given
        symbol belongs to the interface. Check also constants now.
        (ReadStableSymbols): Use IsInterfaceSymbol().
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:

2014-06-26  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Properly support for z-index on grid items
        https://bugs.webkit.org/show_bug.cgi?id=103329

        Reviewed by Benjamin Poulain.

        From Blink r157620 by <jchaffraix@chromium.org> and r172402 by
        <wangxianzhu@chromium.org>.

        The specification says that grid should match flexbox and force
        grid items to be stacking context if z-index is set, regardless
        of 'position'. After this change, this is what happens.

        Previously z-index changes of static positioned objects were ignored.
        However, z-index is applicable for some static positioned objects,
        such as grid items. Ignoring them makes the object not to be properly
        painted on z-index change.

        As StyleResolver has ensured that z-index is non-auto only if
        applicable, RenderStyle::changeRequiresLayerRepaint() should not check
        again (with inconsistent conditions).

        Tests: fast/css-grid-layout/grid-item-z-index-change-repaint.html
               fast/css-grid-layout/grid-item-z-index-stacking-context.html
               fast/css-grid-layout/grid-item-z-index-support.html

        * css/StyleResolver.cpp:
        (WebCore::isDisplayFlexibleOrGridBox): Add new method to check if parent
        display is flexbox or grid.
        (WebCore::StyleResolver::adjustRenderStyle): Use new method in z-index
        condition.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayerRepaint): Move z-index checks
        out of non-static positioned objects if.

2014-06-25  Dean Jackson  <dino@apple.com>

        HIDGamepad should use CFIndex when looping
        https://bugs.webkit.org/show_bug.cgi?id=134337

        Reviewed by Dan Bernstein.

        * platform/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::initElementsFromArray): Replace int with CFIndex, and use
        a local variable for CFArrayCount.

2014-06-25  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt after r170465.

        * platform/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::initElementsFromArray):

2014-06-25  Dean Jackson  <dino@apple.com>

        [Mac] Radio buttons and checkboxes vanish when redrawn
        https://bugs.webkit.org/show_bug.cgi?id=134335

        Reviewed by Dan Bernstein.

        I screwed up when landing r170343 by moving some code around
        which broke the logic. We need to query the animation
        state for controls after we draw (both statically and animated).

        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton): We need to check the state of animation again, after
        we draw.

2014-06-25  Brady Eidson  <beidson@apple.com>

        Add HID-based gamepad implementation for Mac
        https://bugs.webkit.org/show_bug.cgi?id=134324

        Reviewed by Dean Jackson.

        No new tests (Not yet a tested config)

        * Modules/gamepad/Gamepad.cpp:
        (WebCore::Gamepad::Gamepad):
        (WebCore::Gamepad::updateFromPlatformGamepad): Update the Gamepad’s data from the passed-in PlatformGamepad.
        * Modules/gamepad/Gamepad.h:

        * Modules/gamepad/GamepadButton.h:
        (WebCore::GamepadButton::create): Change to use Ref instead of RefPtr.

        GamepadManager is a GamepadStrategyClient that receives notifications from the platform gamepad implementation
        and forwards them to NavigatorGamepad objects. In the future it will also handle event dispatch and exposing
        gamepads to the API layer when a button is pressed:
        * Modules/gamepad/GamepadManager.cpp: Added.
        (WebCore::GamepadManager::shared):
        (WebCore::GamepadManager::GamepadManager):
        (WebCore::GamepadManager::platformGamepadConnected):
        (WebCore::GamepadManager::platformGamepadDisconnected):
        (WebCore::GamepadManager::registerNavigator):
        (WebCore::GamepadManager::unregisterNavigator):
        * Modules/gamepad/GamepadManager.h:

        The NavigatorGamepad supplement actually manages visibility of Gamepads on a per-DOMWindow basis:
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::NavigatorGamepad):
        (WebCore::NavigatorGamepad::~NavigatorGamepad):
        (WebCore::NavigatorGamepad::from):
        (WebCore::NavigatorGamepad::gamepads):
        (WebCore::NavigatorGamepad::gamepadsBecameVisible):
        (WebCore::NavigatorGamepad::gamepadConnected):
        (WebCore::NavigatorGamepad::gamepadDisconnected):
        * Modules/gamepad/NavigatorGamepad.h:
        (WebCore::NavigatorGamepad::navigationStart):

        HIDGamepad is a PlatformGamepad that wraps an IOHIDDeviceRef and keeps input values updated:
        * platform/mac/HIDGamepad.cpp: Added.
        (WebCore::HIDGamepad::HIDGamepad):
        (WebCore::HIDGamepad::initElements):
        (WebCore::HIDGamepad::initElementsFromArray):
        (WebCore::HIDGamepad::maybeAddButton):
        (WebCore::HIDGamepad::maybeAddAxis):
        (WebCore::HIDGamepad::valueChanged):
        * platform/mac/HIDGamepad.h: Added.
        (WebCore::HIDGamepadElement::HIDGamepadElement):
        (WebCore::HIDGamepadElement::~HIDGamepadElement):
        (WebCore::HIDGamepadElement::isButton):
        (WebCore::HIDGamepadElement::isAxis):
        (WebCore::HIDGamepadButton::HIDGamepadButton):
        (WebCore::HIDGamepadAxis::HIDGamepadAxis):
        (WebCore::HIDGamepad::hidDevice):

        HIDGamepadListener wraps an IOHIDManagerRef and continuously listens for changes to Gamepad-type
        devices plugged in to the system:
        * platform/mac/HIDGamepadListener.cpp: Added.
        (WebCore::deviceMatchingDictionary):
        (WebCore::deviceAddedCallback):
        (WebCore::deviceRemovedCallback):
        (WebCore::deviceValuesChangedCallback):
        (WebCore::HIDGamepadListener::shared):
        (WebCore::HIDGamepadListener::HIDGamepadListener):
        (WebCore::HIDGamepadListener::indexForNewlyConnectedDevice):
        (WebCore::HIDGamepadListener::deviceAdded):
        (WebCore::HIDGamepadListener::deviceRemoved):
        (WebCore::HIDGamepadListener::valuesChanged):
        (WebCore::HIDGamepadListener::removeGamepadForDevice):
        * platform/mac/HIDGamepadListener.h: Copied from Source/WebCore/Modules/gamepad/NavigatorGamepad.cpp.
        (WebCore::HIDGamepadListenerClient::~HIDGamepadListenerClient):
        (WebCore::HIDGamepadListener::setClient):
        (WebCore::HIDGamepadListener::platformGamepads):
        (WebCore::HIDGamepadListener::setShouldDispatchCallbacks):

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-06-25  Ryosuke Niwa  <rniwa@webkit.org>

        WebProgressTracker updates progress too frequently
        https://bugs.webkit.org/show_bug.cgi?id=134185

        Reviewed by Tim Horton.

        The old code throttled the progress update to when either 100ms has passed or the delta is at least 2%
        but this was still not enough in pages that loaded in sub-seconds. The new code always throttles it at 200ms.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:

2014-06-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fixed position elements jump around when zooming
        https://bugs.webkit.org/show_bug.cgi?id=134328
        <rdar://problem/17447048>

        Reviewed by Zalan Bujtas.

        If a given remote layer tree commit contains changes of layers for viewport-constrained
        objects, then the associated scrolling tree also needs to show that the layers changed,
        since we need to re-run the "viewport changed" logic in the UI process to get the
        layers correctly positioned for the current zoom level.
        
        The bug was that page scale changes resulted in small "pixel alignment" position
        changes which touched layers, but we didn't commit any scrolling tree changes. So
        the scrolling tree commit would result in visibly stale layer positions, with no scrolling tree
        update to adjust them for the current transient zoom.

        Fix by making use of the existing "alignment offset" field in the ViewportConstraints
        data, and having RemoteScrollingCoordinatorProxy::connectStateNodeLayers() note that
        fixed or sticky layers changed if any properties of fixed or sticky scrolling tree
        nodes were updated.

        * page/scrolling/ScrollingConstraints.h:
        (WebCore::StickyPositionViewportConstraints::operator==):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::pixelAlignmentOffset):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateGeometry):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

2014-06-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Tweak the logic used to choose the scale at which position:fixed gets pushed out of view
        https://bugs.webkit.org/show_bug.cgi?id=134323

        Reviewed by Benjamin Poulain.

        Previously we used a fixed scale (1.2x) at which we'd start pushing position:fixed elements
        out of the viewport. This worked well on iPad, but terribly on iPhone. Instead, choose a scale
        relative to how much of the page is visible width-wise, the threshold being 2/3 of the page width.
        The width is clamped to get reasonable behavior on wide pages.

        * page/FrameView.cpp:
        (WebCore::FrameView::rectForViewportConstrainedObjects):

2014-06-25  Brady Eidson  <beidson@apple.com>

        Add new platform gamepad abstractions
        https://bugs.webkit.org/show_bug.cgi?id=134325

        Reviewed by Dean Jackson.

        No new tests (Not yet a tested config)

        - GamepadStrategy lets ports customize the 3 basic behaviors needed for a gamepad
          implementation to feed the API in WebCore.
        - GamepadStrategyClient gives arbitrary objects in WebCore the ability to register
          for callbacks with the GamepadStrategy.
        - PlatformGamepad is a platform-agnostic object that represents the data that
          feeds into the Gamepad object that is exposed to web content.

        The code in this patch is dead as-is, but https://bugs.webkit.org/show_bug.cgi?id=134324
        will contain an immediate follow-up patch that uses it.

        Makes sense to review them separately.

        * WebCore.xcodeproj/project.pbxproj:

        * platform/GamepadStrategy.h: Added.
        (WebCore::GamepadStrategy::~GamepadStrategy):

        * platform/GamepadStrategyClient.h: Added.
        (WebCore::GamepadStrategyClient::~GamepadStrategyClient):

        * platform/PlatformGamepad.h: Added.
        (WebCore::PlatformGamepad::~PlatformGamepad):
        (WebCore::PlatformGamepad::id):
        (WebCore::PlatformGamepad::lastUpdateTime):
        (WebCore::PlatformGamepad::connectTime):
        (WebCore::PlatformGamepad::PlatformGamepad):

        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::gamepadStrategy):
        (WebCore::PlatformStrategies::PlatformStrategies):

2014-06-25  Zalan Bujtas  <zalan@apple.com>

        Assertion failed: CGPathAddRoundedRect asserts on non-renderable rounded rectangle.
        https://bugs.webkit.org/show_bug.cgi?id=134288

        Reviewed by Simon Fraser.

        Speculative fix. This changeset attempts to address a possible mantissa overflow of radius
        when checking whether the rounded rectangle is renderable.
        We convert both the radius and the rectangle values to CGFloat(float/double) to perform
        this renderable check, instead of always using float.

        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::Radii::scale): Move scale(float, float) from RoundedRect to FloatRoundedRect.
        (WebCore::FloatRoundedRect::isRenderable): Add check if radius is >= 0.
        * platform/graphics/FloatRoundedRect.h:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::scale):
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting): use FloatRoundeRect::Radii.
        * platform/graphics/RoundedRect.h:
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::platformAddPathForRoundedRect): use epsilon() to ensure width/height is always >= even with mantissa overflow. 

2014-06-25  Jer Noble  <jer.noble@apple.com>

        [MSE] removeCodedFrames() can remove more than it should
        https://bugs.webkit.org/show_bug.cgi?id=134320

        Reviewed by Geoff Garen.

        removeCodedFrames() can remove more samples than it should because it compares an iterator
        in presentation timespace to one in decode timespace. Clean up this code by removing frames
        in decode order. Rename variables and add comments to make explicit which timespace defines
        the iterators being used.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames):

2014-06-25  Beth Dakin  <bdakin@apple.com>

        Crash in ScrollingTree::isRubberBandInProgress()
        https://bugs.webkit.org/show_bug.cgi?id=134316
        -and corresponding-
        <rdar://problem/16247911>

        Reviewed by Geoffrey Garen.

        This crash appears to have been caused by http://trac.webkit.org/changeset/161276 
        which moved the ScrollingNode creation code from ScrollingTree over to 
        ScrollingCoordinator. This creates a thread safety issue. In the crashing case, we 
        believe that the ScrollingCoordinator's ScrollingTree pointer had been null-ed out
        even though the ScrollingTree was kept alive by the bind call to propagate 
        commitNewTreeState() over to the scrolling thread. The fix is to move node 
        creation back to the ScrollingTree and to use the this pointer to create new
        nodes rather than the ScrollingCoordinator's ScrollingTree pointer.

        Don't allow ScrollingCoordinator to handle ScrollingTreeNode creation.
        * page/scrolling/AsyncScrollingCoordinator.h:

        Re-name createNode to createScrollingTreeNode(). 
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:

        Remove this implementation of createNode that called into the 
        ScrollingCoordinator.
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::createNode): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:

        Don't allow ScrollingCoordinator to handle ScrollingTreeNode creation.
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode): Deleted.

        Re-name createNode to createScrollingTreeNode, and actually create the nodes here.
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::createScrollingTreeNode):
        (WebCore::ScrollingTreeIOS::createNode): Deleted.
        * page/scrolling/ios/ScrollingTreeIOS.h:

        Don't allow ScrollingCoordinator to handle ScrollingTreeNode creation.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode): Deleted.

        Add the implementation of createScrollingTreeNode() for the Mac to 
        ScrollingTreeMac since it can create Mac-specific nodes.
        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeMac.h:

2014-06-25  Enrica Casucci  <enrica@apple.com>

        iOS build fix after http://trac.webkit.org/changeset/170447.
        Unreviewed.

        * editing/mac/TextUndoInsertionMarkup.h:

2014-06-25  Chris Fleizach  <cfleizach@apple.com>

        Add an undo group for each dictated utterance in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=134086

        Reviewed by Enrica Casucci.

        Provide a mechanism for ending the current undo group on a text insertion.
        This allows a stream of text, that is normally part of one undo group, to be
        broken up so that subsequent undo commands will only undo portions of the text stream.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/mac/TextUndoInsertionMarkup.h: Added.
        * editing/mac/TextUndoInsertionMarkup.mm: Added.
        (WebCore::shouldRegisterInsertionUndoGroup):
        (WebCore::registerInsertionUndoGrouping):

2014-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS]: WK2 Inspector Node Search
        https://bugs.webkit.org/show_bug.cgi?id=134279

        Reviewed by Benjamin Poulain.

        * WebCore.exp.in:
        Export Node::inspect for WebKit2.

2014-06-25  Dana Burkart  <dburkart@apple.com>

        Add support for 5-tuple versioning.

        Reviewed by David Farler.

        * Configurations/Version.xcconfig:

2014-06-25  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] REGRESSION(r170336) - zero tolerance seeks are ignored.
        https://bugs.webkit.org/show_bug.cgi?id=134310

        Reviewed by Brent Fulgham.

        Tests for zero tolerance seeks were inadvertantly reversed in r170336.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

2014-06-25  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Pause playback when readyState drops below HAVE_FUTURE_DATA, and do not complete seek until it rises above HAVE_METADATA.
        https://bugs.webkit.org/show_bug.cgi?id=134306

        Reviewed by Eric Carlson.

        Pause the synchronizer before seeking, and do not resume the synchronizer until it both reports that the seek completed,
        and that the readyState rises above HAVE_METADATA. In every other location where we change the rate of the synchronizer,
        gate that rate change on the above.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC): Check shouldBePlaying().
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance): Unset m_seekCompleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal): Pause the synchronizer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble): Check shouldBePlaying().
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::shouldBePlaying): Test m_seeking, !m_seekCompleted, and the readyState.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState): Set m_seekCompleted; check shouldBePlaying() and play if appropriate.

2014-06-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Update monitorSourceBuffers to match recent spec changes
        https://bugs.webkit.org/show_bug.cgi?id=134305

        Reviewed by Eric Carlson.

        In W3C bug #24347, the text for the third clause of Source Buffer Monitoring was updated. Update our
        implementation to match the new text.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::monitorSourceBuffers):

2014-06-25  Alex Christensen  <achristensen@webkit.org>
            And peavo@outlook.com  <peavo@outlook.com>

        Use references instead of pointers in RenderTheme.
        https://bugs.webkit.org/show_bug.cgi?id=134261

        Reviewed by Zalan Bujtas.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldHaveSpinButton):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderThumb::updateAppearance):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::adjustSizeConstraints):
        (WebCore::RenderThemeEfl::applyEdjeRTLState):
        (WebCore::RenderThemeEfl::isControlStyled):
        (WebCore::RenderThemeEfl::paintThemePart):
        (WebCore::RenderThemeEfl::supportsFocusRing):
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbSize):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::adjustMenuListButtonStyle):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::adjustTextAreaStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        (WebCore::RenderThemeEfl::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        (WebCore::RenderThemeEfl::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeEfl::animationDurationForProgressBar):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::supportsFocusRing):
        (WebCore::RenderThemeGtk::adjustButtonStyle):
        (WebCore::RenderThemeGtk::adjustMenuListStyle):
        (WebCore::RenderThemeGtk::adjustMenuListButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsButtonStyle):
        (WebCore::adjustSearchFieldIconStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle):
        (WebCore::RenderThemeGtk::adjustSliderTrackStyle):
        (WebCore::RenderThemeGtk::adjustSliderThumbStyle):
        (WebCore::borderRadiiFromStyle):
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaSliderThumb):
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeGtk::adjustProgressBarStyle):
        (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeGtk::animationDurationForProgressBar):
        (WebCore::RenderThemeGtk::calculateProgressRect):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::setToggleSize):
        (WebCore::RenderThemeGtk::setCheckboxSize):
        (WebCore::RenderThemeGtk::setRadioSize):
        (WebCore::RenderThemeGtk::comboBoxArrowSize):
        (WebCore::RenderThemeGtk::getComboBoxPadding):
        (WebCore::RenderThemeGtk::popupInternalPaddingLeft):
        (WebCore::RenderThemeGtk::popupInternalPaddingRight):
        (WebCore::RenderThemeGtk::popupInternalPaddingTop):
        (WebCore::RenderThemeGtk::popupInternalPaddingBottom):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::setToggleSize):
        (WebCore::RenderThemeGtk::setCheckboxSize):
        (WebCore::RenderThemeGtk::setRadioSize):
        (WebCore::getComboBoxMetrics):
        (WebCore::RenderThemeGtk::popupInternalPaddingLeft):
        (WebCore::RenderThemeGtk::popupInternalPaddingRight):
        (WebCore::RenderThemeGtk::popupInternalPaddingTop):
        (WebCore::RenderThemeGtk::popupInternalPaddingBottom):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::layout):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::adjustMediaSliderThumbSize):
        * rendering/RenderMediaControls.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (RenderMenuList::computeIntrinsicLogicalWidths):
        (RenderMenuList::menuStyle):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::updateLogicalWidth):
        (WebCore::RenderMeter::computeLogicalHeight):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateAnimationState):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::supportsFocusRing):
        (WebCore::RenderTheme::stateChanged):
        (WebCore::RenderTheme::adjustCheckboxStyle):
        (WebCore::RenderTheme::adjustRadioStyle):
        (WebCore::RenderTheme::adjustButtonStyle):
        (WebCore::RenderTheme::adjustInnerSpinButtonStyle):
        (WebCore::RenderTheme::adjustTextFieldStyle):
        (WebCore::RenderTheme::adjustTextAreaStyle):
        (WebCore::RenderTheme::adjustMenuListStyle):
        (WebCore::RenderTheme::adjustInputFieldSpeechButtonStyle):
        (WebCore::RenderTheme::adjustMeterStyle):
        (WebCore::RenderTheme::meterSizeForBounds):
        (WebCore::RenderTheme::animationRepeatIntervalForProgressBar):
        (WebCore::RenderTheme::animationDurationForProgressBar):
        (WebCore::RenderTheme::adjustProgressBarStyle):
        (WebCore::RenderTheme::shouldHaveSpinButton):
        (WebCore::RenderTheme::adjustMediaControlStyle):
        (WebCore::RenderTheme::adjustSliderTrackStyle):
        (WebCore::RenderTheme::adjustSliderThumbStyle):
        (WebCore::RenderTheme::adjustSliderThumbSize):
        (WebCore::RenderTheme::adjustSearchFieldStyle):
        (WebCore::RenderTheme::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderTheme::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderTheme::adjustSearchFieldResultsButtonStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::supportsHover):
        (WebCore::RenderTheme::minimumMenuListSize):
        (WebCore::RenderTheme::popupInternalPaddingLeft):
        (WebCore::RenderTheme::popupInternalPaddingRight):
        (WebCore::RenderTheme::popupInternalPaddingTop):
        (WebCore::RenderTheme::popupInternalPaddingBottom):
        (WebCore::RenderTheme::popupMenuSize):
        (WebCore::RenderTheme::setCheckboxSize):
        (WebCore::RenderTheme::setRadioSize):
        (WebCore::RenderTheme::setButtonSize):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustCheckboxStyle):
        (WebCore::RenderThemeIOS::isControlStyled):
        (WebCore::RenderThemeIOS::adjustRadioStyle):
        (WebCore::RenderThemeIOS::popupInternalPaddingRight):
        (WebCore::RenderThemeIOS::adjustRoundBorderRadius):
        (WebCore::RenderThemeIOS::adjustMenuListButtonStyle):
        (WebCore::RenderThemeIOS::adjustSliderTrackStyle):
        (WebCore::RenderThemeIOS::adjustSliderThumbSize):
        (WebCore::RenderThemeIOS::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeIOS::animationDurationForProgressBar):
        (WebCore::RenderThemeIOS::adjustSearchFieldStyle):
        (WebCore::RenderThemeIOS::adjustButtonStyle):
        (WebCore::RenderThemeIOS::setButtonSize):
        (WebCore::RenderThemeIOS::shouldHaveSpinButton):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled):
        (WebCore::RenderThemeMac::controlSizeForFont):
        (WebCore::RenderThemeMac::sizeForFont):
        (WebCore::RenderThemeMac::sizeForSystemFont):
        (WebCore::RenderThemeMac::setSizeFromFont):
        (WebCore::RenderThemeMac::setFontFromControlSize):
        (WebCore::RenderThemeMac::controlSizeForSystemFont):
        (WebCore::RenderThemeMac::adjustTextFieldStyle):
        (WebCore::RenderThemeMac::adjustTextAreaStyle):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::meterSizeForBounds):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::levelIndicatorFor):
        (WebCore::RenderThemeMac::progressBarRectForBounds):
        (WebCore::RenderThemeMac::minimumProgressBarHeight):
        (WebCore::RenderThemeMac::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeMac::animationDurationForProgressBar):
        (WebCore::RenderThemeMac::adjustProgressBarStyle):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeMac::popupInternalPaddingRight):
        (WebCore::RenderThemeMac::popupInternalPaddingTop):
        (WebCore::RenderThemeMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeMac::popupMenuSize):
        (WebCore::RenderThemeMac::minimumMenuListSize):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::setSearchFieldSize):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::isControlStyled):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::baselinePosition):
        (WebCore::RenderThemeSafari::controlSizeForFont):
        (WebCore::RenderThemeSafari::sizeForFont):
        (WebCore::RenderThemeSafari::sizeForSystemFont):
        (WebCore::RenderThemeSafari::setSizeFromFont):
        (WebCore::RenderThemeSafari::setFontFromControlSize):
        (WebCore::RenderThemeSafari::controlSizeForSystemFont):
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::setCheckboxSize):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::setRadioSize):
        (WebCore::RenderThemeSafari::setButtonPaddingFromControlSize):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        (WebCore::RenderThemeSafari::setButtonSize):
        (WebCore::RenderThemeSafari::adjustTextFieldStyle):
        (WebCore::RenderThemeSafari::adjustTextAreaStyle):
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::popupInternalPaddingLeft):
        (WebCore::RenderThemeSafari::popupInternalPaddingRight):
        (WebCore::RenderThemeSafari::popupInternalPaddingTop):
        (WebCore::RenderThemeSafari::popupInternalPaddingBottom):
        (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):
        (WebCore::RenderThemeSafari::minimumMenuListSize):
        (WebCore::RenderThemeSafari::adjustSliderThumbStyle):
        (WebCore::RenderThemeSafari::adjustSliderThumbSize):
        (WebCore::RenderThemeSafari::setSearchFieldSize):
        (WebCore::RenderThemeSafari::adjustSearchFieldStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeSafari::adjustMeterStyle):
        (WebCore::RenderThemeSafari::meterSizeForBounds):
        (WebCore::RenderThemeSafari::paintMeter):
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::RenderThemeWin::supportsFocusRing):
        (WebCore::RenderThemeWin::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeWin::setCheckboxSize):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationPartStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWin::adjustMeterStyle):
        (WebCore::RenderThemeWin::meterSizeForBounds):
        (WebCore::RenderThemeWin::paintMeter):
        * rendering/RenderThemeWin.h:
        (WebCore::RenderThemeWin::paintCheckbox):
        (WebCore::RenderThemeWin::paintRadio):
        (WebCore::RenderThemeWin::setRadioSize):
        (WebCore::RenderThemeWin::paintTextArea):
        (WebCore::RenderThemeWin::popupOptionSupportsTextIndent):
        (WebCore::RenderThemeWin::paintSearchFieldDecorationPart):
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):
        (WebCore::RenderThemeWin::shouldShowPlaceholderWhenFocused):

2014-06-25  Benjamin Poulain  <benjamin@webkit.org>

        [Mac] Update the time base of event's timestamp when the system time changes
        https://bugs.webkit.org/show_bug.cgi?id=134293

        Reviewed by Anders Carlsson.

        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::cachedStartupTimeIntervalSince1970): Since events timestamps are absolute time, they also
        need to be updated if the system clock changes.

2014-06-25  Dirk Schulze  <krit@webkit.org>

        Add all blend modes to feBlend

        feBlend should support all blend modes from CSS and Canvas
        https://bugs.webkit.org/show_bug.cgi?id=134296

        Reviewed by Dean Jackson.

        Add all blend modes to <feBlend> (the SVG filter primitive) that are also
        supported by HTML Canvas and CSS.

        In addition, add "normal" blend mode to HTML Canvas as requested by the
        CSS Compositing and Blending specification. (Referenced from HTML Canvas.)
        With this change, SVG, CSS and Canvas truly share the same blend modes and
        even the same keywords. This is much easier to for web authors.

        http://www.w3.org/TR/2014/CR-compositing-1-20140220/#ltblendmodegt

        Test: svg/filters/feBlend-all-blendmodes.svg

        * platform/graphics/GraphicsTypes.cpp: Reorder blend mode text streams to match
            enumeration order. Add a new function to parse blend modes independent of
            compositing modes. Add a string "normal" that is supported by CSS, feBlend and
            HTML Canvas now.
        (WebCore::parseBlendMode):
        (WebCore::parseCompositeAndBlendOperator):
        * platform/graphics/GraphicsTypes.h: Reorder BlendMode enumeration values to match
         the SVG JS enumeration for blend modes.
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h: Move all software code that is no
            longer required by the software path but still used by NEON here.
        (WebCore::FEBlend::platformApplySoftware):
        (WebCore::FEBlend::platformApplyNEON):
        * platform/graphics/filters/FEBlend.cpp:
            Use drawImageBuffer() to blend the results of previous filter primitives. This
            allows removing more than 60% of the code.
        (WebCore::FEBlend::FEBlend):
        (WebCore::FEBlend::create):
        (WebCore::FEBlend::blendMode):
        (WebCore::FEBlend::setBlendMode):
        (WebCore::FEBlend::platformApplySoftware):
        (WebCore::FEBlend::dump):
        (WebCore::FEBlend::externalRepresentation):
        (WebCore::feBlendNormal): Deleted.
        (WebCore::feBlendMultiply): Deleted.
        (WebCore::feBlendScreen): Deleted.
        (WebCore::feBlendDarken): Deleted.
        (WebCore::feBlendLighten): Deleted.
        (WebCore::feBlendUnknown): Deleted.
        (WebCore::platformApply): Deleted.
        (WebCore::FEBlend::platformApplyGeneric): Deleted.
        (WebCore::operator<<): Deleted.
        * platform/graphics/filters/FEBlend.h:
        * svg/SVGAnimatedEnumeration.cpp: Use the global BlendMode enumeration.
        (WebCore::enumerationValueForTargetAttribute):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement): Use the global BlendMode enumeration.
            No new enumeration values added or exposed to SVG DOM as requested by SVG WG.
        (WebCore::SVGFEBlendElement::parseAttribute):
        * svg/SVGFEBlendElement.h: Replace BlendModeType with global BlendMode enumeration. Remove
            blend mode parsing code and use the code in GraphicsTypes instead.
        (WebCore::SVGPropertyTraits<BlendMode>::highestEnumValue):
        (WebCore::SVGPropertyTraits<BlendMode>::toString):
        (WebCore::SVGPropertyTraits<BlendModeType>::highestEnumValue): Deleted.
        (WebCore::SVGPropertyTraits<BlendModeType>::toString): Deleted.
        (WebCore::SVGPropertyTraits<BlendModeType>::fromString): Deleted.

2014-06-25  Zalan Bujtas  <zalan@apple.com>

        Unreviewed iOS build fix after r170425.

        * accessibility/AccessibilityProgressIndicator.cpp:
        * accessibility/AccessibilityProgressIndicator.h:

2014-06-25  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at com.apple.WebCore: WebCore::AlternativeTextController::removeDictationAlternativesForMarker + 43
        https://bugs.webkit.org/show_bug.cgi?id=134226

        Reviewed by Enrica Casucci.

        Unchecked access of details pointer in the Document marker led to the crash.
        It seems erroneous to allow creation of a DocumentMarker without details when one is expected, because it
        carries the dictation context (not just the description).
        Also, add in ASSERTs to catch scenarios where a nullptr might be passed in.

        Test: platform/mac/editing/input/crash-for-empty-text-alternative.html

        * dom/DocumentMarker.cpp:
        (WebCore::DocumentMarker::DocumentMarker):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::removeDictationAlternativesForMarker):

2014-06-25  Laszlo Gombos  <l.gombos@samsung.com>

        Remove build guard for progress element
        https://bugs.webkit.org/show_bug.cgi?id=134292

        Reviewed by Benjamin Poulain.

        The build flag is no longer needed as it is always on.

        No new tests as there is no new behaviour.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::create):
        (WebCore::AccessibilityProgressIndicator::valueForRange):
        (WebCore::AccessibilityProgressIndicator::maxValueForRange):
        (WebCore::AccessibilityProgressIndicator::minValueForRange):
        (WebCore::AccessibilityProgressIndicator::progressElement):
        * accessibility/AccessibilityProgressIndicator.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        * css/html.css:
        (progress::-webkit-progress-value):
        * html/HTMLProgressElement.cpp:
        * html/HTMLProgressElement.h:
        * html/HTMLProgressElement.idl:
        * html/HTMLTagNames.in:
        * html/shadow/ProgressShadowElement.cpp:
        * html/shadow/ProgressShadowElement.h:
        * platform/efl/DefaultTheme/CMakeLists.txt:
        * platform/efl/DefaultTheme/default.edc:
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::toEdjeGroup):
        (WebCore::RenderThemeEfl::applyEdjeRTLState):
        (WebCore::RenderThemeEfl::paintProgressBar):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::calculateProgressRect):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::paintProgressBar):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintProgressBar):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSnapshottedPlugIn):
        (WebCore::RenderObject::isProgress):
        * rendering/RenderProgress.cpp:
        * rendering/RenderProgress.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::progressBarRectForBounds):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintProgressBar):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintProgressBar):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):

2014-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings test results after r170422.

        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (WebKit::wrapTestActiveDOMObject):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit::wrapTestCallback):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (WebKit::wrapTestCustomNamedGetter):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (WebKit::wrapTestEventConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (WebKit::wrapTestEventTarget):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (WebKit::wrapTestException):
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.cpp:
        (WebKit::wrapTestGenerateIsReachable):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit::wrapTestInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (WebKit::wrapTestMediaQueryListListener):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (WebKit::wrapTestNamedConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (WebKit::wrapTestNode):
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp:
        (WebKit::wrapTestNondeterministic):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit::wrapTestObj):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        (WebKit::wrapTestOverloadedConstructors):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (WebKit::wrapTestSerializedScriptValueInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        (WebKit::wrapTestTypedefs):
        * bindings/scripts/test/GObject/WebKitDOMattribute.cpp:
        (WebKit::wrapattribute):
        * bindings/scripts/test/GObject/WebKitDOMreadonly.cpp:
        (WebKit::wrapreadonly):

2014-06-24  Tomas Popela  <tpopela@redhat.com>

        [GTK] Some of DOM bindings macros are misnamed
        https://bugs.webkit.org/show_bug.cgi?id=121543

        Reviewed by Carlos Garcia Campos.

        As we are using WebKitDOM as a namespace we should unify all type macros
        to have WEBKIT_DOM_TYPE prefix instead of WEBKIT_TYPE_DOM. Also add
        more exceptions to decamelize function in GObject bindings generator
        to fix the names of bindings for BR, HR, UL, OL, DL and LI elements.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::handleEvent):
        * bindings/gobject/WebKitDOMEventTarget.h:
        * bindings/gobject/WebKitDOMNodeFilter.h:
        * bindings/gobject/WebKitDOMObject.h:
        * bindings/gobject/webkitdom.symbols:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (decamelize):
        (GetParentGObjType):
        (GenerateProperty):
        (GenerateHeader):
        (GenerateCFile):
        (GenerateEventTargetIface):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (WebKit::wrapFloat64Array):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (WebKit::wrapTestActiveDOMObject):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit::wrapTestCallback):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (WebKit::wrapTestCustomNamedGetter):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (WebKit::wrapTestEventConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (WebKit::wrapTestEventTarget):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (WebKit::wrapTestException):
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.cpp:
        (WebKit::wrapTestGenerateIsReachable):
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit::wrapTestInterface):
        (webkit_dom_test_interface_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (WebKit::wrapTestMediaQueryListListener):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (WebKit::wrapTestNamedConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (WebKit::wrapTestNode):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp:
        (WebKit::wrapTestNondeterministic):
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit::wrapTestObj):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        (WebKit::wrapTestOverloadedConstructors):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (WebKit::wrapTestSerializedScriptValueInterface):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        (WebKit::wrapTestTypedefs):
        (webkit_dom_test_typedefs_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.cpp:
        (WebKit::wrapattribute):
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:
        * bindings/scripts/test/GObject/WebKitDOMreadonly.cpp:
        (WebKit::wrapreadonly):
        * bindings/scripts/test/GObject/WebKitDOMreadonly.h:

2014-06-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170414.
        https://bugs.webkit.org/show_bug.cgi?id=134291

        the patch added a test that fails on almost every Mac tester
        (Requested by rniwa on #webkit).

        Reverted changeset:

        "Tiles on bottom of screen are not always allocated when
        necessary"
        https://bugs.webkit.org/show_bug.cgi?id=134272
        http://trac.webkit.org/changeset/170414

2014-06-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Tiles on bottom of screen are not always allocated when necessary
        https://bugs.webkit.org/show_bug.cgi?id=134272

        Reviewed by Simon Fraser.

        The initial visibleRect is in the coordinate of the root layer, so its origin
        is at the top left of the view. The initial rect we were using doesn't
        include the contents inset, so it was too short, which was causing tiles near
        the bottom of the screen to not always be allocated if the tile threshold was
        close to the bottom of the view. Instead, we want to include the contents
        inset size so the visible rect includes the entire view.
        GraphicsLayerCA::recursiveCommitChanges() takes care of mapping and cropping
        the visible rect into the tiled layer's coordinate system, at which point it
        is used for visible tile logic.

        Test: platform/mac-wk2/tiled-drawing/visible-rect-content-inset.html

        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::update):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2014-06-24  Myles C. Maxfield  <mmaxfield@apple.com>

        InlineTextBox's m_len can be an unsigned (rather than an unsigned short)
        https://bugs.webkit.org/show_bug.cgi?id=134173

        Reviewed by Daniel Bates.

        After Zalan's talks with Kling, it seems that the simple line layout code
        might alleviate the need for the space savings in InlineTextBox. Given this,
        it would be beneficial to be a little more safe by using unsigneds throughout.

        For example, we have code like "void setLen(unsigned len) { m_len = len; }"
        which might silently break if given particular inputs.

        No new tests because there is no behavior change.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::truncation):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::ellipsisRectForBox):

2014-06-24  Ryosuke Niwa  <rniwa@webkit.org>

        Speculative 32-bit Mac build fix after r170402.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::advanceByCombiningCharacterSequence):

2014-06-24  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS]: WK2 Inspector Node Highlighting
        https://bugs.webkit.org/show_bug.cgi?id=134257

        Reviewed by Timothy Hatcher.

        Some clients want to get highlights with the scroll applied,
        others do not. Provide a CoordinateSpace param to be used for
        getting a highlight (only used on iOS).

        * WebCore.exp.in:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getHighlight):
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::getHighlight):
        (WebCore::buildObjectForRendererFragments):
        * inspector/InspectorOverlay.h:
        (WebCore::Highlight::Highlight):
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightRects):

2014-06-24  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Uncaught exception when deallocating AVSampleBufferDisplayLayer
        https://bugs.webkit.org/show_bug.cgi?id=134281

        Reviewed by Brent Fulgham.

        AVSampleBufferDisplayLayer is throwing an exception from its -dealloc method because KVO observers exist
        at the time of dealloc. Remove the observer for outputObscuredDueToInsufficientExternalProtection inside
        -stopObservingLayer.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener stopObservingLayer:]):

2014-06-24  Mark Rowe  <mrowe@apple.com>

        WKContextHistoryClient::didNavigateWithNavigationData is passed incorrect URL when history.pushState is used
        <https://webkit.org/b/134271> / <rdar://problem/16270167>

        Reviewed by Brady Eidson.

        Tests: http/tests/globalhistory/history-delegate-pushstate.html
               http/tests/globalhistory/history-delegate-replacestate.html

        * page/History.cpp:
        (WebCore::History::stateObjectAdded): Call HistoryController after updating the document's URL so that the
        URL will reflect the destination of the navigation when FrameLoaderClient::updateGlobalHistory is called.

2014-06-24  Myles C. Maxfield  <mmaxfield@apple.com>

        advanceByCombiningCharacterSequence() can be simplified
        https://bugs.webkit.org/show_bug.cgi?id=133591

        Reviewed by Dean Jackson.

        Use U16_NEXT() because it already does what we're trying to do.

        No new tests because there is no behavior change.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::advanceByCombiningCharacterSequence):

2014-06-24  Brady Eidson  <beidson@apple.com>

        Enable GAMEPAD in the Mac build, but disabled at runtime.
        https://bugs.webkit.org/show_bug.cgi?id=134255

        Reviewed by Dean Jackson.

        No new tests (No changes to a tested config).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Add the ability to have a function be EnabledAtRuntime by
          removing such functions from the prototype if they are disabled.

        Change the three new objects and the one new function to be EnabledAtRuntime
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadButton.idl:
        * Modules/gamepad/GamepadEvent.idl:
        * Modules/gamepad/NavigatorGamepad.idl:

        Add a RuntimeEnabledFeature for Gamepads:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setGamepadsEnabled):
        (WebCore::RuntimeEnabledFeatures::gamepadsEnabled):

        * Configurations/FeatureDefines.xcconfig:

2014-06-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Add positionInRootFragments to SelectorFragment
        https://bugs.webkit.org/show_bug.cgi?id=133609

        Reviewed by Benjamin Poulain.

        Some non-backtrack-related predicates use relationToRightFragment information
        to decide whether checkingContext->elementStyle should be refered.
        To make it works correctly, add the positionInRootFragments field to SelectorFragment.
        When positionInRootFragments == Rightmost and relationToRightFragment == Rightmost,
        we should see checkingContext->elementStyle.

        Test: fast/selectors/first-child-update-with-renderer.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::shouldUseRenderStyleFromCheckingContext):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLastChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsOnlyChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):

2014-06-24  Jer Noble  <jer.noble@apple.com>

        [Fullscreen][Mac] WKView is not firstResponder after entering fullscreen mode
        https://bugs.webkit.org/show_bug.cgi?id=134270

        Reviewed by Jon Honeycutt.

        The WebCoreFullScreenWindow's firstResponder is reset when the full screen animation completes and
        the window's style is changed to a fullscreen style. Save the firstResponder, and if it's still in
        the window's view hierarchy after the style changes, reset it to the firstResponder.

        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow setStyleMask:]):

2014-06-24  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Pass AVSampleBufferDisplayLayer HDCP status through to EME
        https://bugs.webkit.org/show_bug.cgi?id=134221

        Reviewed by Eric Carlson.

        Pass the outputObscuredDueToInsufficientExternalProtection property of AVSampleBufferDisplayLayer
        as an error to the associated MediaKeySession object.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener invalidate]):
        (-[WebAVSampleBufferErrorListener beginObservingLayer:]):
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):

2014-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Use unsigneds instead of ints for indexes into a string in text layout code
        https://bugs.webkit.org/show_bug.cgi?id=133592

        Reviewed by Zalan Bujtas.

        Migrate much of the text-handling code to use unsigneds for indexes into a string.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForText):
        (WebCore::computeUnderlineType):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawEmphasisMarksForSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForSimpleText):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::size):
        (WebCore::GlyphBuffer::glyphs):
        (WebCore::GlyphBuffer::advances):
        (WebCore::GlyphBuffer::fontDataAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::offsetAt):
        (WebCore::GlyphBuffer::reverse):
        (WebCore::GlyphBuffer::offsetInString):
        (WebCore::GlyphBuffer::swap):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextRunIterator::atEnd):
        * platform/graphics/Latin1TextIterator.h:
        (WebCore::Latin1TextIterator::Latin1TextIterator):
        (WebCore::Latin1TextIterator::currentCharacter):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::SurrogatePairAwareTextIterator::SurrogatePairAwareTextIterator):
        * platform/graphics/SurrogatePairAwareTextIterator.h:
        (WebCore::SurrogatePairAwareTextIterator::currentCharacter):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::length):
        (WebCore::TextRun::charactersLength):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::glyphDataForCharacter):
        (WebCore::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::adjustSelectionRectForComplexText):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setNormalizedBuffer):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::selectionState):
        (WebCore::adjustCharactersAndLengthForHyphen):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::positionForOffset):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::getStringToRender):
        * rendering/RenderCombineText.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::positionForOffset):
        (WebCore::SVGInlineTextBox::localSelectionRect):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGInlineTextBox::paintText):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::currentCharacterStartsSurrogatePair):
        (WebCore::SVGTextMetricsBuilder::advance):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::rotationOfCharacterCallback):
        (WebCore::SVGTextQuery::extentOfCharacterCallback):
        (WebCore::SVGTextQuery::characterNumberAtPositionCallback):
        * rendering/svg/SVGTextQuery.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGGlyphToPathTranslator::SVGGlyphToPathTranslator):
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontData.h:

2014-06-24  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed build fix.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): Cast variadic argument to int.

2014-06-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] MSVC mishandles enums in bitfields
        https://bugs.webkit.org/show_bug.cgi?id=134237

        Reviewed by Michael Saboff.

        Replace uses of enum types in bit fields with unsigned to
        avoid losing a bit to hold the sign value. This can result
        in Windows interpreting the value of the field improperly.

        * loader/ResourceLoaderOptions.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceResponse.h:
        * rendering/RenderLayer.h:
        * rendering/RenderMarquee.h:

2014-06-24  Antti Koivisto  <antti@apple.com>

        Try to fix build.

        * WebCore.exp.in: Remove duplicate export, this should be in the iOS section only.

2014-06-24  Eric Carlson  <eric.carlson@apple.com>

        [Mac] process raw VTT in-band captions
        https://bugs.webkit.org/show_bug.cgi?id=134178

        Reviewed by Jer Noble.

        * CMakeLists.txt: Add ISOVTTCue.cpp|h.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/track/BufferedLineReader.h:
        (WebCore::BufferedLineReader::reset): New, empty the input buffer.

        Make it possible to process WebVTT captions. 
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::parser): Allocate, if necessary, and return a WebVTT parser.
        (WebCore::InbandGenericTextTrack::parseWebVTTCueData): Pass a cue to the parser.
        (WebCore::InbandGenericTextTrack::parseWebVTTFileHeader): Pass a VTT file header to the parser.
        (WebCore::InbandGenericTextTrack::newCuesParsed): Parser callback.
        (WebCore::InbandGenericTextTrack::newRegionsParsed): Ditto.
        (WebCore::InbandGenericTextTrack::fileFailedToParse): Ditto.
        * html/track/InbandGenericTextTrack.h:

        * html/track/InbandTextTrack.h:

        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::parser): New, parser accessor.
        (WebCore::InbandWebVTTTextTrack::parseWebVTTCueData): New, parse VTT data in an ISOWebVTTCue
            object.
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Cleanup.
        (WebCore::InbandWebVTTTextTrack::newRegionsParsed): Implement.
        (WebCore::InbandWebVTTTextTrack::fileFailedToParse): Change the error message.
        * html/track/InbandWebVTTTextTrack.h:

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::TextTrackCueGenericBoxElement): Change cue parameter
            from a pointer to a reference.
        (WebCore::TextTrackCueGeneric::createDisplayTree): Ditto.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::create): Change cue parameter from a pointer to a reference.
        (WebCore::VTTCueBox::VTTCueBox): Ditto.
        (WebCore::VTTCueBox::getCue): Return a reference.
        (WebCore::VTTCueBox::applyCSSProperties): m_cue is a reference, not a pointer.
        (WebCore::VTTCue::create): New, create a VTTCue from WebVTTCueData.
        (WebCore::VTTCue::VTTCue): New, internal constructor that takes a WebVTTCueData.
        (WebCore::VTTCue::initialize): New, shared constructor initialization.
        (WebCore::VTTCue::createDisplayTree): m_cue is a reference, not a pointer.
        (WebCore::VTTCue::markFutureAndPastNodes): Ditto.
        (WebCore::VTTCue::setCueSettings): Ditto.
        * html/track/VTTCue.h:
        (WebCore::VTTCueBox::create): Deleted.
        (WebCore::VTTCue::create): Deleted.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseFileHeader): New. Reset the line reader buffer and parser state, 
            call the parser.
        (WebCore::WebVTTParser::parseCueData): Create a cue from ISOWebVTTCue.
        (WebCore::WebVTTParser::collectTimingsAndSettings): Return immediately if the string is empty.
        (WebCore::WebVTTParser::collectTimeStamp): Ditto.
        * html/track/WebVTTParser.h:
        (WebCore::WebVTTCueData::originalStartTime): New.
        (WebCore::WebVTTCueData::setOriginalStartTime): New.
        (WebCore::WebVTTCueData::WebVTTCueData):

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewCues): Cleanup, use the new VTTCue::create.

        Parse ISO WebVTT cue boxes.
        * platform/graphics/ISOVTTCue.cpp: Added.
        (WebCore::ISOBox::ISOBox):
        (WebCore::ISOBox::peekType):
        (WebCore::ISOBox::peekLength):
        (WebCore::ISOBox::peekString):
        (WebCore::vttCueBoxType):
        (WebCore::vttIdBoxType):
        (WebCore::vttSettingsBoxType):
        (WebCore::vttPayloadBoxType):
        (WebCore::vttCurrentTimeBoxType):
        (WebCore::vttCueSourceIDBoxType):
        (WebCore::ISOWebVTTCue::boxType):
        (WebCore::ISOWebVTTCue::ISOWebVTTCue):
        * platform/graphics/ISOVTTCue.h: Added.
        (WebCore::ISOBox::boxHeaderSize):
        (WebCore::ISOBox::length):
        (WebCore::ISOBox::type):
        (WebCore::ISOWebVTTCue::presentationTime):
        (WebCore::ISOWebVTTCue::duration):
        (WebCore::ISOWebVTTCue::sourceID):
        (WebCore::ISOWebVTTCue::id):
        (WebCore::ISOWebVTTCue::originalStartTime):
        (WebCore::ISOWebVTTCue::settings):
        (WebCore::ISOWebVTTCue::cueText):

        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::InbandTextTrackPrivateClient::parseWebVTTFileHeader): New.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::InbandTextTrackPrivateAVF): Add a cue format parameter.
        (WebCore::InbandTextTrackPrivateAVF::processCue): Call processNativeSamples.
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings): Add logging. Minor cleanup.
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): New, process an array of 
            CMSampleBuffers, create ISOWebVTTCue from the sample data.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::InbandTextTrackPrivateAVCF):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
        (WebCore::InbandTextTrackPrivateAVCF::create):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::processMediaSelectionOptions):
        (WebCore::LegibleOutputData::LegibleOutputData):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::legibleOutputCallback):

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        (WebCore::InbandTextTrackPrivateAVFObjC::create): Add a cue format parameter.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::InbandTextTrackPrivateAVFObjC): Ditto.

        * platform/graphics/avfoundation/InbandTextTrackPrivateLegacyAVFObjC.cpp:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::InbandTextTrackPrivateLegacyAVFObjC): Pass cue
            format to base class.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Improve logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Don't leak an NSDictionary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Don't process media selection
            options until we have tracks.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions): 
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): Pass native samples as well as 
            attributed strings to track.
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        * platform/graphics/avfoundation/objc/OutOfBandTextTrackPrivateAVF.h:
        (WebCore::OutOfBandTextTrackPrivateAVF::OutOfBandTextTrackPrivateAVF):

        * platform/graphics/avfoundation/objc/OutOfBandTextTrackPrivateAVF.h:
        (WebCore::OutOfBandTextTrackPrivateAVF::OutOfBandTextTrackPrivateAVF):

2014-06-24  Antti Koivisto  <antti@apple.com>

        Only flush layers when the exposed rect actually changes
        https://bugs.webkit.org/show_bug.cgi?id=134248

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:

2014-06-24  Brady Eidson  <beidson@apple.com>

        Remove references to "Shader.h" which doesn't currently exist in the project.

        Rubberstamped by Andreas Kling.

        * WebCore.xcodeproj/project.pbxproj:

2014-06-24  Martin Hock  <mhock@apple.com>

        [iOS] DOMWindow::outerWidth and outerHeight don't return useful values, so return 0.
        Also, revert r169281.
        https://bugs.webkit.org/show_bug.cgi?id=134233
        <rdar://problem/17060183>

        Reviewed by Benjamin Poulain.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::outerHeight):
        (WebCore::DOMWindow::outerWidth):

2014-06-24  Jeremy Jones  <jeremyj@apple.com>

        Don't set AudioSession active while interrupted.
        https://bugs.webkit.org/show_bug.cgi?id=134239

        Reviewed by Eric Carlson.

        To activate the AudioSession there must be a session with audio or video
        and being playing or paused.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::hasActive): added
        (WebCore::MediaSessionManager::beginInterruption): updateSessionState
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): updateSessionState
        * platform/audio/MediaSessionManager.h: declare hasActive()
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): use hasActive()

2014-06-24  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r170336): Crash in HTMLMediaElement::seekTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=134253

        Rubber-stamped by Eric Carlson.

        Now that seekWithTolerance() has been split up into an asyncronous section, the null-checks in seekWithTolerance()
        need to be re-performed in seekTimerFired(), in case the m_player has been cleared between when the seek was initiated
        and when the asynchronous section is performed.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekTimerFired):

2014-06-24  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix unused parameter warnings if inspector is disabled
        https://bugs.webkit.org/show_bug.cgi?id=134244

        Reviewed by Zalan Bujtas.

        No new tests, no behavior change.

        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::startProfiling):
        (WebCore::InspectorInstrumentation::stopProfiling):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldContinueAfterNotifyingLoadedFromMemoryCache):

2014-06-24  Jer Noble  <jer.noble@apple.com>

        [MSE] Add null-check in sourceBufferPrivateAppendComplete().
        https://bugs.webkit.org/show_bug.cgi?id=133230

        Reviewed by Eric Carlson.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Bail early if the 
            SourceBuffer has been removed from the MediaSource.

2014-06-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170337.
        https://bugs.webkit.org/show_bug.cgi?id=134250

        caused 3 layout tests to crash on debug. (Requested by zalan
        on #webkit).

        Reverted changeset:

        "Use unsigneds instead of ints for indexes into a string in
        text layout code"
        https://bugs.webkit.org/show_bug.cgi?id=133592
        http://trac.webkit.org/changeset/170337

2014-06-24  Jarek Czekalski  <jarekczek@poczta.onet.pl>

        [ATK] Don't ignore links rendered as blocks.
        https://bugs.webkit.org/show_bug.cgi?id=130941

        Reviewed by Mario Sanchez Prada.

        * /m/usr/src/webkit-trunk/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (WebCore::AccessibilityObject::objectFocusedAndCaretOffsetUnignored): Don't ignore links
        when they are renderered with display:block.

2014-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings test results after r170351.

        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:

2014-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r170309.

        Skip functions returning arrays in GObject DOM bindings.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction):

2014-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Replace RefPtr<Evas_Object> with UniquePtrEfl
        https://bugs.webkit.org/show_bug.cgi?id=134236

        Reviewed by Gyuyoung Kim.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::ThemePartCacheEntry::create):
        (WebCore::RenderThemeEfl::loadTheme):
        (WebCore::RenderThemeEfl::applyPartDescriptionsFrom):
        * platform/efl/RenderThemeEfl.h:
        * platform/graphics/efl/CairoUtilitiesEfl.cpp:
        (WebCore::evasObjectFromCairoImageSurface):
        * platform/graphics/efl/CairoUtilitiesEfl.h:
        * platform/graphics/efl/ImageEfl.cpp:
        (WebCore::BitmapImage::getEvasObject):

2014-06-23  Jeremy Jones  <jeremyj@apple.com>

        Chapter forward/backward should seek to beginning/end.
        https://bugs.webkit.org/show_bug.cgi?id=134225

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController seekChapterBackward:]): forwards to -seekToBeginning
        (-[WebAVPlayerController seekChapterForward:]): forwards to -seekToEnd

2014-06-23  Dean Jackson  <dino@apple.com>

        [Mac] Don't draw focus rings if we are animating controls
        https://bugs.webkit.org/show_bug.cgi?id=134232
        <rdar://problem/17381121>

        Reviewed by Tim Horton.

        Controls in native apps do not draw their focus rings as they
        animate (in Yosemite). Turn this off for WebKit too. It turns
        out that when we were drawing them, they were in the wrong
        place anyway.

        Since we don't animate controls when testing, we can't really test this.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton): Only draw the focus ring if the
        NSButtonCell is not animating.

2014-06-23  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Remove some unnecessary code from WebKitAccessibleWrapperAtk
        https://bugs.webkit.org/show_bug.cgi?id=134193

        Reviewed by Gyuyoung Kim.

        It was used along with DRT. Since we have stopped support WK1/DRT, it won't be needed.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetFocusedElement): Deleted.
        * accessibility/atk/WebKitAccessibleWrapperAtk.h:

2014-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Use unsigneds instead of ints for indexes into a string in text layout code
        https://bugs.webkit.org/show_bug.cgi?id=133592

        Reviewed by Zalan Bujtas.

        Migrate much of the text-handling code to use unsigneds for indexes into a string.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForText):
        (WebCore::computeUnderlineType):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawEmphasisMarksForSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForSimpleText):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::size):
        (WebCore::GlyphBuffer::glyphs):
        (WebCore::GlyphBuffer::advances):
        (WebCore::GlyphBuffer::fontDataAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::offsetAt):
        (WebCore::GlyphBuffer::reverse):
        (WebCore::GlyphBuffer::offsetInString):
        (WebCore::GlyphBuffer::swap):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextRunIterator::atEnd):
        * platform/graphics/Latin1TextIterator.h:
        (WebCore::Latin1TextIterator::Latin1TextIterator):
        (WebCore::Latin1TextIterator::currentCharacter):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::SurrogatePairAwareTextIterator::SurrogatePairAwareTextIterator):
        * platform/graphics/SurrogatePairAwareTextIterator.h:
        (WebCore::SurrogatePairAwareTextIterator::currentCharacter):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::length):
        (WebCore::TextRun::charactersLength):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::glyphDataForCharacter):
        (WebCore::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::adjustSelectionRectForComplexText):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setNormalizedBuffer):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::selectionState):
        (WebCore::adjustCharactersAndLengthForHyphen):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::positionForOffset):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::getStringToRender):
        * rendering/RenderCombineText.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::positionForOffset):
        (WebCore::SVGInlineTextBox::localSelectionRect):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGInlineTextBox::paintText):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::currentCharacterStartsSurrogatePair):
        (WebCore::SVGTextMetricsBuilder::advance):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::rotationOfCharacterCallback):
        (WebCore::SVGTextQuery::extentOfCharacterCallback):
        (WebCore::SVGTextQuery::characterNumberAtPositionCallback):
        * rendering/svg/SVGTextQuery.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGGlyphToPathTranslator::SVGGlyphToPathTranslator):
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontData.h:

2014-06-20  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement seek algorithm should allow cancelling previous seeks.
        https://bugs.webkit.org/show_bug.cgi?id=134116

        Reviewed by Eric Carlson.

        Test: media/video-seek-double.html

        Fulfill the requirement of the §4.7.14.9 seeking algorithm to do steps 5+ asynchronously and cancel
        previous instances of the algorithm.

        For the html/ parts of the algorithm, implement this by adding a seek timer, which when fired will
        issue steps 5-12. MediaPlayerPrivateAVFoundation will already coalesce multiple seek operations, so nothing
        additional needs be done there.  However, MediaPlayerPrivateMediaSourceAVFObjC needs to implement the same
        pending seek logic in case additional seeks were issued after the html/ algorithm reached step 12.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize the new m_seekTimer.
        (WebCore::HTMLMediaElement::parseAttribute): Clear the seek timer.
        (WebCore::HTMLMediaElement::seekInternal): Differentiate between DOM seeks and internal seeks.
        (WebCore::HTMLMediaElement::seekWithTolerance:) Split into the seekTimerFired() method.
        (WebCore::HTMLMediaElement::seekTimerFired:) Added, split from seekWithTolerance().
        * html/HTMLMediaElement.h:
        * html/MediaController.cpp:
        (MediaController::bringElementUpToSpeed): Call seekInternal().
        (WebCore::HTMLMediaElement::PendingSeek::PendingSeek): Added convenience struct for storing seek requests.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::PendingSeek::PendingSeek): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC): Modify the time jumped
            handler to not clear the m_seeking flag if another seek request is pending.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

2014-06-23  Timothy Horton  <timothy_horton@apple.com>

        [WK2] Use the page background color instead of white when swipe snapshots were purged (134218)
        https://bugs.webkit.org/show_bug.cgi?id=134218
        <rdar://problem/17426454>

        Reviewed by Benjamin Poulain.

        * WebCore.exp.in:

2014-06-23  Eric Carlson  <eric.carlson@apple.com>

        [iOS] remove InbandTextTrackPrivateAVFIOS
        https://bugs.webkit.org/show_bug.cgi?id=134220

        Reviewed by Benjamin Poulain.

        * WebCore.xcodeproj/project.pbxproj: Remove references to InbandTextTrackPrivateAVFIOS.

        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h: Removed.
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm: Removed.

2014-06-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170323.
        https://bugs.webkit.org/show_bug.cgi?id=134224

        lots of build breakage (Requested by bradeeoh on #webkit).

        Reverted changeset:

        "[Mac] process raw VTT in-band captions"
        https://bugs.webkit.org/show_bug.cgi?id=134178
        http://trac.webkit.org/changeset/170323

2014-06-23  Jeffrey Pfau  <jpfau@apple.com>

        Fix release build

        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::canRunTransaction):

2014-06-19  Jeffrey Pfau  <jpfau@apple.com>

        Database process crashes when multiple transactions attempt to run at once
        https://bugs.webkit.org/show_bug.cgi?id=134139

        Reviewed by David Kilzer.

        Ensure that only one transaction can be running at a time.

        Test: storage/indexeddb/transaction-overlapping.html

        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::canRunTransaction):

2014-06-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Make the state restore from HistoryItem more precise and reliable
        https://bugs.webkit.org/show_bug.cgi?id=134150

        Reviewed by Tim Horton.

        The two biggest changes for WebCore are:
        -Store everything we need to handle changes of ViewportConfiguration on HistoryItem.
        -Store the exposedRect with floating point coordinates.

        * WebCore.exp.in:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        We cannot determine a good scroll position from the WebProcess because the obscured insets can change
        arbitrarily in the UIProcess. When we scroll here from the WebProcess, we would force an invalid position
        to the UIProcess with the next layer tree update.

        To avoid any problem, we prohibit scrolling when restoring the focus appearance.

        * history/HistoryItem.cpp:
        (WebCore::encodeRect):
        (WebCore::encodeSize):
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        (WebCore::decodeRect):
        (WebCore::decodeSize):
        (WebCore::HistoryItem::decodeBackForwardTree):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::exposedContentRect):
        (WebCore::HistoryItem::setExposedContentRect):
        (WebCore::HistoryItem::unobscuredContentRect):
        (WebCore::HistoryItem::setUnobscuredContentRect):
        (WebCore::HistoryItem::minimumLayoutSizeInScrollViewCoordinates):
        (WebCore::HistoryItem::setMinimumLayoutSizeInScrollViewCoordinates):
        (WebCore::HistoryItem::contentSize):
        (WebCore::HistoryItem::setContentSize):
        (WebCore::HistoryItem::exposedContentPosition): Deleted.
        (WebCore::HistoryItem::setExposedContentPosition): Deleted.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::exposedContentRect):
        (WebCore::ScrollView::setExposedContentRect):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didChangeVisibleRect):

2014-06-23  Eric Carlson  <eric.carlson@apple.com>

        [Mac] process raw VTT in-band captions
        https://bugs.webkit.org/show_bug.cgi?id=134178

        Reviewed by Jer Noble.

        * CMakeLists.txt: Add ISOVTTCue.cpp|h.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/track/BufferedLineReader.h:
        (WebCore::BufferedLineReader::reset): New, empty the input buffer.

        Make it possible to process WebVTT captions. 
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::parser): Allocate, if necessary, and return a WebVTT parser.
        (WebCore::InbandGenericTextTrack::parseWebVTTCueData): Pass a cue to the parser.
        (WebCore::InbandGenericTextTrack::parseWebVTTFileHeader): Pass a VTT file header to the parser.
        (WebCore::InbandGenericTextTrack::newCuesParsed): Parser callback.
        (WebCore::InbandGenericTextTrack::newRegionsParsed): Ditto.
        (WebCore::InbandGenericTextTrack::fileFailedToParse): Ditto.
        * html/track/InbandGenericTextTrack.h:

        * html/track/InbandTextTrack.h:

        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::parser): New, parser accessor.
        (WebCore::InbandWebVTTTextTrack::parseWebVTTCueData): New, parse VTT data in an ISOWebVTTCue
            object.
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Cleanup.
        (WebCore::InbandWebVTTTextTrack::newRegionsParsed): Implement.
        (WebCore::InbandWebVTTTextTrack::fileFailedToParse): Change the error message.
        * html/track/InbandWebVTTTextTrack.h:

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::TextTrackCueGenericBoxElement): Change cue parameter
            from a pointer to a reference.
        (WebCore::TextTrackCueGeneric::createDisplayTree): Ditto.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::create): Change cue parameter from a pointer to a reference.
        (WebCore::VTTCueBox::VTTCueBox): Ditto.
        (WebCore::VTTCueBox::getCue): Return a reference.
        (WebCore::VTTCueBox::applyCSSProperties): m_cue is a reference, not a pointer.
        (WebCore::VTTCue::create): New, create a VTTCue from WebVTTCueData.
        (WebCore::VTTCue::VTTCue): New, internal constructor that takes a WebVTTCueData.
        (WebCore::VTTCue::initialize): New, shared constructor initialization.
        (WebCore::VTTCue::createDisplayTree): m_cue is a reference, not a pointer.
        (WebCore::VTTCue::markFutureAndPastNodes): Ditto.
        (WebCore::VTTCue::setCueSettings): Ditto.
        * html/track/VTTCue.h:
        (WebCore::VTTCueBox::create): Deleted.
        (WebCore::VTTCue::create): Deleted.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseFileHeader): New. Reset the line reader buffer and parser state, 
            call the parser.
        (WebCore::WebVTTParser::parseCueData): Create a cue from ISOWebVTTCue.
        (WebCore::WebVTTParser::collectTimingsAndSettings): Return immediately if the string is empty.
        (WebCore::WebVTTParser::collectTimeStamp): Ditto.
        * html/track/WebVTTParser.h:
        (WebCore::WebVTTCueData::originalStartTime): New.
        (WebCore::WebVTTCueData::setOriginalStartTime): New.
        (WebCore::WebVTTCueData::WebVTTCueData):

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewCues): Cleanup, use the new VTTCue::create.

        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::InbandTextTrackPrivateClient::parseWebVTTFileHeader): New.

        Parse ISO WebVTT cue boxes.
        * platform/graphics/ISOVTTCue.cpp: Added.
        (WebCore::ISOBox::ISOBox):
        (WebCore::ISOBox::peekType):
        (WebCore::ISOBox::peekLength):
        (WebCore::ISOBox::peekString):
        (WebCore::vttCueBoxType):
        (WebCore::vttIdBoxType):
        (WebCore::vttSettingsBoxType):
        (WebCore::vttPayloadBoxType):
        (WebCore::vttCurrentTimeBoxType):
        (WebCore::vttCueSourceIDBoxType):
        (WebCore::ISOWebVTTCue::boxType):
        (WebCore::ISOWebVTTCue::ISOWebVTTCue):
        * platform/graphics/ISOVTTCue.h: Added.
        (WebCore::ISOBox::boxHeaderSize):
        (WebCore::ISOBox::length):
        (WebCore::ISOBox::type):
        (WebCore::ISOWebVTTCue::presentationTime):
        (WebCore::ISOWebVTTCue::duration):
        (WebCore::ISOWebVTTCue::sourceID):
        (WebCore::ISOWebVTTCue::id):
        (WebCore::ISOWebVTTCue::originalStartTime):
        (WebCore::ISOWebVTTCue::settings):
        (WebCore::ISOWebVTTCue::cueText):

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::InbandTextTrackPrivateAVF): Add a cue format parameter.
        (WebCore::InbandTextTrackPrivateAVF::processCue): Call processNativeSamples.
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings): Add logging. Minor cleanup.
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): New, process an array of 
            CMSampleBuffers, create ISOWebVTTCue from the sample data.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        (WebCore::InbandTextTrackPrivateAVFObjC::create): Add a cue format parameter.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::InbandTextTrackPrivateAVFObjC): Ditto.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Improve logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Don't leak an NSDictionary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Don't process media selection
            options until we have tracks.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions): 
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): Pass native samples as well as 
            attributed strings to track.
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        * platform/graphics/avfoundation/objc/OutOfBandTextTrackPrivateAVF.h:
        (WebCore::OutOfBandTextTrackPrivateAVF::OutOfBandTextTrackPrivateAVF):

        * platform/graphics/avfoundation/InbandTextTrackPrivateLegacyAVFObjC.cpp:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::InbandTextTrackPrivateLegacyAVFObjC): Pass cue
            format to base class.

        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::InbandTextTrackPrivateAVCF): Ditto.
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:

2014-06-23  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash in SourceBuffer::sourceBufferPrivateDidReceiveRenderingError()
        https://bugs.webkit.org/show_bug.cgi?id=134211

        Reviewed by Eric Carlson.

        Null-check m_source before dereferencing, as the SourceBuffer may have been removed
        from its MediaSource before this error was received.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveRenderingError):

2014-06-23  Joseph Pecoraro  <pecoraro@apple.com>

        Reduce synchronous layout triggered by JavaScript-based media controls
        https://bugs.webkit.org/show_bug.cgi?id=134208

        Reviewed by Eric Carlson.

        Avoid always querying the offsetWidth and offsetHeight of the timeline
        by only calculating these values when the timeline may change size.
        Also avoid doing work in a few cases where properties did not
        actually change.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller):

        (Controller.prototype.setNeedsTimelineMetricsUpdate):
        (Controller.prototype.updateTimelineMetricsIfNeeded):
        Only update the timeline metrics when they may have changed.

        (Controller.prototype.updateControls):
        (Controller.prototype.handleTimelineMouseMove):
        (Controller.prototype.progressFillStyle):
        (Controller.prototype.showControls):
        (Controller.prototype.addControls):
        Mark timeline metrics need update based on various UI changes.

        (Controller.prototype.setStatusHidden):
        Only do work if the hidden status changed.
        Mark timeline metrics need update if the timeline is changed.

        (Controller.prototype.updateProgress):
        Use cached timeline metrics instead of always querying offsetWidth/offsetHeight.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS):
        (ControllerIOS.prototype.updateControls):

        (ControllerIOS.prototype.updateProgress):
        Use cached timeline metrics instead of always querying offsetWidth/offsetHeight.

        (ControllerIOS.prototype.handleWirelessPlaybackChange):
        Mark timeline metrics need update as button may have changed.

        (ControllerIOS.prototype.handleWirelessTargetAvailableChange):
        Only do work if the availability changed.
        Mark timeline metrics need update as a new button may have appeared.

        (ControllerIOS.prototype.set pageScaleFactor):
        Only do work if the page scale factor changed.

2014-06-23  Brady Eidson  <beidson@apple.com>

        Add skeleton code for updated Gamepad API
        https://bugs.webkit.org/show_bug.cgi?id=134165

        Unreviewed - Forgotten review feedback from http://trac.webkit.org/changeset/170309

        * Modules/gamepad/GamepadButton.idl: Forgot to commit the removal of NoInterfaceObject here.

2014-06-23  Brady Eidson  <beidson@apple.com>

        Add skeleton code for updated Gamepad API
        https://bugs.webkit.org/show_bug.cgi?id=134165

        Reviewed by Dean Jackson.

        No new tests (No change in behavior for any tested configuration)

        Interface and dummy implementation for the Gamepad object:
        * Modules/gamepad/Gamepad.cpp: Added.
        (WebCore::Gamepad::Gamepad):
        (WebCore::Gamepad::~Gamepad):
        (WebCore::Gamepad::axes):
        (WebCore::Gamepad::buttons):
        * Modules/gamepad/Gamepad.h: Added.
        * Modules/gamepad/Gamepad.idl: Added.

        Interface and dummy implementation for the GamepadButton object:
        * Modules/gamepad/GamepadButton.cpp: Added.
        (WebCore::GamepadButton::GamepadButton):
        (WebCore::GamepadButton::pressed):
        * Modules/gamepad/GamepadButton.h: Added.
        (WebCore::GamepadButton::create):
        (WebCore::GamepadButton::value):
        (WebCore::GamepadButton::setValue):
        * Modules/gamepad/GamepadButton.idl: Added.

        Interface and dummy implementation for the GamepadEvent object:
        * Modules/gamepad/GamepadEvent.cpp: Added.
        (WebCore::GamepadEvent::GamepadEvent):
        * Modules/gamepad/GamepadEvent.h: Added.
        (WebCore::GamepadEventInit::GamepadEventInit):
        (WebCore::GamepadEvent::~GamepadEvent):
        (WebCore::GamepadEvent::create):
        (WebCore::GamepadEvent::gamepad):
        * Modules/gamepad/GamepadEvent.idl: Added.
        * dom/EventNames.in:

        Interface and dummy implementation for additions to the Navigator object:
        * Modules/gamepad/NavigatorGamepad.cpp: Added.
        (WebCore::NavigatorGamepad::NavigatorGamepad):
        (WebCore::NavigatorGamepad::supplementName):
        (WebCore::NavigatorGamepad::from):
        (WebCore::NavigatorGamepad::getGamepads):
        (WebCore::NavigatorGamepad::gamepads):
        * Modules/gamepad/NavigatorGamepad.h: Added.
        * Modules/gamepad/NavigatorGamepad.idl: Added.

        Bindings additions necessary for these new interfaces:
        * bindings/js/JSDOMBinding.h:
        (WebCore::JSValueTraits<double>::arrayJSValue):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:

        Project file stuff:
        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * DerivedSources.make:

2014-06-23  Simon Fraser  <simon.fraser@apple.com>

        Catch Obj-C exceptions thrown by _linenPatternImage
        https://bugs.webkit.org/show_bug.cgi?id=134202

        Reviewed by Geoffrey Garen.

        Catch Objective-C exceptions thrown by _linenPatternImage and
        -[NSImage CGImageForProposedRect:context:hints:].

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::linenBackgroundColor):

2014-06-23  Simon Fraser  <simon.fraser@apple.com>

        CSS clip property should make layers non-opaque
        https://bugs.webkit.org/show_bug.cgi?id=134147
        <rdar://problem/17324579>

        Reviewed by Tim Horton.
        
        https://www.fairphone.com has position:fixed elements with clip: rect(...)
        but we were making those layers opaque, resulting in garbage pixels
        in areas outside the clip rect.
        
        Fix by checking for the clip property in RenderBox::backgroundIsKnownToBeOpaqueInRect().

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

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

2014-06-23  Simon Fraser  <simon.fraser@apple.com>

        Adding a mask on a simple color compositing layer removes the content
        https://bugs.webkit.org/show_bug.cgi?id=134127

        Reviewed by Dean Jackson.
        
        In r169053 I moved some updateDrawsContent() into updateAfterDescendents(),
        but this isn't called when a composited layer gains or loses a mask (which
        doesn't cause a layout). This caused us to fail to allocate backing store
        when gaining a mask, resulting in missing content.
        
        Fix by calling updateAfterDescendents() from RenderLayer::styleChange()
        when the layer config isn't changing.
        
        Also remove a condition in isSimpleContainerCompositingLayer() that caused us
        to fall off the simple layer path for masked layers, since this works just
        fine.

        Test: compositing/masks/solid-color-masked.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):

2014-06-23  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Writing mode changes on the <html> and RenderView need to
        be propagated to column sets and flow thread children of those renderers.
        https://bugs.webkit.org/show_bug.cgi?id=134121
        <rdar://problem/16884527>

        Reviewed by Dean Jackson.

        Added fast/multicol/pagination/RightToLeft-rl-dynamic.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        Refactor the propagation code for column sets and flow thread styles into a helper
        function that is called here.

        (WebCore::RenderBlockFlow::updateStylesForColumnChildren):
        * rendering/RenderBlockFlow.h:
        Add a new helper function for recalculating the styles of the column sets and
        flow thread in response to changes.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        When the style is changed for a root element or the RenderView in response to
        writing mode and direction changes, make sure that style gets propagated to
        the column children by calling the new helper function.

2014-06-23  Jer Noble  <jer.noble@apple.com>

        [Mac] Uncaught exception crash when destroying MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=134198

        Reviewed by Eric Carlson.

        Now that we always create an AVPlayerLayer when creating an AVPlayer, but we don't
        return that layer from platformLayer() unless we've been asked to, we no longer are
        asked to destroy our video layer from MediaPlayerPrivateAVFoundation::tearDownVideoRendering().

        Instead, explicitly destroy our video layer (and remove the KVO-observer which is
        causing this exception) in the MediaPlayerPrivateAVFoundationObjC destructor.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):

2014-06-23  Andreas Kling  <akling@apple.com>

        Remove unused FrameView::setUseCustomFixedPositionLayoutRect().
        <https://webkit.org/b/134194>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::setUseCustomFixedPositionLayoutRect): Deleted.
        * page/FrameView.h:

2014-06-23  Antti Koivisto  <antti@apple.com>

        REGRESSION (r160908): Unable to unset bold while entering text
        https://bugs.webkit.org/show_bug.cgi?id=134196
        <rdar://problem/17051653>

        Reviewed by Andreas Kling.
        
        No test, this code path is used by some WK1 API clients only.

        * editing/Editor.cpp:
        (WebCore::Editor::styleForSelectionStart):
        
            This needs to update the style before requesting the renderer.

        * editing/Editor.h:
        * editing/ios/EditorIOS.mm:
        (WebCore::styleForSelectionStart): Deleted.
        * editing/mac/EditorMac.mm:
        (WebCore::styleForSelectionStart): Deleted.
        
            Removed the duplicated functions, moved to Editor.cpp.

2014-06-23  Alex Christensen  <achristensen@webkit.org>

        [iOS] Fix video in WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=133511

        Reviewed by Jer Noble.

        * WebCore.exp.in:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin):
        (WebCore::wkAVAssetResolvedURL): Deleted.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Declare and use resolvedURL on AVURLAsset instead of using wkAVAssetResolvedURL through WebKitSystemInterface.

2014-06-23  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r168046): Incorrect handling of object information in WebCore::RenderFlowThread::removeLineRegionInfo
        https://bugs.webkit.org/show_bug.cgi?id=133587

        Reviewed by Antti Koivisto.

        When an object flowed in multicol is moved from in-flow positioning to out-of-flow positioning,
        its information must be removed from the flowthread prior to the change being made. 
        Otherwise, the flow thread will no longer be its containing block and a reference to it
        will not be possible to obtain.

        No new tests can be added because the code still hits in an unrelated assertion followed by a null dereference.
        The issue was discussed with Antti Koivisto and we decided its better to fix this problem first and
        handle the following issue in a separate bug.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleWillChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::flowThreadContainingBlock):

2014-06-23  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Platform support for WebSpeech feature.
        https://bugs.webkit.org/show_bug.cgi?id=116438

        Reviewed by Csaba Osztrogonác.

        It's a first step of adding support for Speech Synthesis in EFL port.
        Just stub out required API and support for compilation.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake: Added some idls to not break GTK build.
        * platform/PlatformSpeechSynthesizer.h:
        * platform/efl/PlatformSpeechSynthesisProviderEfl.cpp: Added.
        (WebCore::PlatformSpeechSynthesisProviderEfl::PlatformSpeechSynthesisProviderEfl):
        (WebCore::PlatformSpeechSynthesisProviderEfl::~PlatformSpeechSynthesisProviderEfl):
        (WebCore::PlatformSpeechSynthesisProviderEfl::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesisProviderEfl::pause):
        (WebCore::PlatformSpeechSynthesisProviderEfl::resume):
        (WebCore::PlatformSpeechSynthesisProviderEfl::speak):
        (WebCore::PlatformSpeechSynthesisProviderEfl::cancel):
        * platform/efl/PlatformSpeechSynthesisProviderEfl.h: Added.
        * platform/efl/PlatformSpeechSynthesizerEfl.cpp: Added.
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::cancel):

2014-06-23  Jeongeun Kim  <je_julie.kim@samsung.com>

        Make it clear to get m_svgExtensions using svgExtensions().
        https://bugs.webkit.org/show_bug.cgi?id=134186.

        Reviewed by Dirk Schulze.

        This patch makes sure that the purpose of code is to get m_svgExtensions 
        as changing accessSVGExtensions() to svgExtensions(). 
        svgExtensions() is a getter API and accessSVGExtensions() checks 
        the presence of m_svgExtensions and create m_svgExtensions if it does not exist. 

        No new tests, no behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::removeChildren):
        * dom/Document.cpp:
        (WebCore::Document::commonTeardown):
        (WebCore::Document::implicitClose):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::rebuildElements):
        * svg/SVGDocumentExtensions.h:

2014-06-23  Dean Jackson  <dino@apple.com>

        [iOS] Use WebGLLayer rather than PlatformLayer in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=134183

        Follow-up review from Sam Weinig.

        * platform/graphics/GraphicsContext3D.h: Merge another bit of MAC and IOS
        code.
        * ChangeLog: Actually read his review comments this time.

2014-06-23  Dean Jackson  <dino@apple.com>

        [iOS] Use WebGLLayer rather than PlatformLayer in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=134183

        Reviewed by Sam Weinig.

        GraphicsContext3D has a reference to a WebGLLayer that was
        hidden behind a PlatformLayer. This meant we had to cast it
        to use a WebGLLayer method.

        * platform/graphics/GraphicsContext3D.h: Replace RetainPtr<PlatformLayer>
        with RetainPtr<WebGLLayer>.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::~GraphicsContext3D): No need to cast.

2014-06-22  Zalan Bujtas  <zalan@apple.com>

        Make offset from ancestor computation explicit by moving it to the callers.
        https://bugs.webkit.org/show_bug.cgi?id=134168.

        Reviewed by Simon Fraser.
        
        Explicit offset computation helps code reading and less error-prone than passing
        the offset pointer and compute it locally when it is null.

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox):
        (WebCore::performOverlapTests):
        (WebCore::RenderLayer::setupClipPath):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2014-06-22  Zalan Bujtas  <zalan@apple.com>

        Transition layer offsets from LayoutPoint to LayoutSize.
        https://bugs.webkit.org/show_bug.cgi?id=134156

        Reviewed by Simon Fraser.

        Use better representation for offset values.

        No change in functionality.

        * platform/graphics/LayoutSize.h:
        (WebCore::roundedForPainting):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::computeReferenceBox):
        (WebCore::RenderLayer::setupClipPath):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::createLocalTransformState):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::hitTestLayerByApplyingTransform):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::collectLayerFragments):

2014-06-22  Dean Jackson  <dino@apple.com>

        Attempted iOS build fix.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Cast to WebGLLayer.

2014-06-22  Dean Jackson  <dino@apple.com>

        [Apple] WebGL layer may use GC3D after free with remote layer hosting
        https://bugs.webkit.org/show_bug.cgi?id=134179
        <rdar://problem/17412931>

        Reviewed by Tim Horton.

        With remote layer hosting, a WebGLLayer may attempt to draw after
        the GraphicsContext3D has been destroyed. We need to make sure
        the GC3D tells the WebGLLayer that it is no longer valid.

        While here, I changed some return 0 to return nullptr, the
        name of the ObjC property member from m_context to _context,
        and removed some unnecessary .get() calls.

        This is tested by run-webkit-tests with the --remote-layer-tree
        option.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): No need for .get().
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Set the context reference on WebGLLayer
        to be null.
        (WebCore::GraphicsContext3D::setRenderbufferStorageFromDrawable): No need for .get().
        * platform/graphics/mac/WebGLLayer.h: Set the context reference on WebGLLayer
        to be null.
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]): Rename m_context to _context.
        (-[WebGLLayer copyCGLPixelFormatForDisplayMask:]): Check for null.
        (-[WebGLLayer copyCGLContextForPixelFormat:]): Rename to _context.
        (-[WebGLLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]): Check for null.
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]): Ditto.
        (-[WebGLLayer display]): Ditto.

2014-06-20  Simon Fraser  <simon.fraser@apple.com>

        [WK2] Frameset frames are not scrollable after loading (and should be)
        https://bugs.webkit.org/show_bug.cgi?id=134151
        <rdar://problem/17403365>

        Reviewed by Dan Bates.
        
        When loading a <frameset>, we could end up with an empty non-fast-scrollable
        region for the main frame, because after the initial frameset document layout,
        nothing updated the non-fast scrollable region as the subframes added their
        scrollable areas to the the main frame's scrollable area set.
        
        Fix by having addScrollableArea() and removeScrollableArea() trigger an update
        of the non-fast scrollable region.

        Test: platform/mac-wk2/tiled-drawing/scrolling/frames/frameset-frame-scrollability.html

        * page/FrameView.cpp:
        (WebCore::FrameView::addScrollableArea):
        (WebCore::FrameView::removeScrollableArea):
        (WebCore::FrameView::scrollableAreaSetChanged):
        * page/FrameView.h:

2014-06-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170265.
        https://bugs.webkit.org/show_bug.cgi?id=134174

        Broke editing tests (Requested by litherum on #webkit).

        Reverted changeset:

        "Use unsigneds instead of ints for indexes into a string in
        text layout code"
        https://bugs.webkit.org/show_bug.cgi?id=133592
        http://trac.webkit.org/changeset/170265

2014-06-20  Simon Fraser  <simon.fraser@apple.com>

        Have scrollingTreeAsText() dump the non-fast-scrollable region
        https://bugs.webkit.org/show_bug.cgi?id=134149

        Reviewed by Sam Weinig.

        Dump the non-fast-scrollable region (as an array of rects).

        * WebCore.exp.in:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):

2014-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Use unsigneds instead of ints for indexes into a string in text layout code
        https://bugs.webkit.org/show_bug.cgi?id=133592

        Reviewed by Zalan Bujtas.

        Migrate much of the text-handling code to use unsigneds for indexes into a string.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForText):
        (WebCore::computeUnderlineType):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawEmphasisMarksForSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::adjustSelectionRectForSimpleText):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::size):
        (WebCore::GlyphBuffer::glyphs):
        (WebCore::GlyphBuffer::advances):
        (WebCore::GlyphBuffer::fontDataAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::offsetAt):
        (WebCore::GlyphBuffer::reverse):
        (WebCore::GlyphBuffer::offsetInString):
        (WebCore::GlyphBuffer::swap):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextRunIterator::atEnd):
        * platform/graphics/Latin1TextIterator.h:
        (WebCore::Latin1TextIterator::Latin1TextIterator):
        (WebCore::Latin1TextIterator::currentCharacter):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::SurrogatePairAwareTextIterator::SurrogatePairAwareTextIterator):
        * platform/graphics/SurrogatePairAwareTextIterator.h:
        (WebCore::SurrogatePairAwareTextIterator::currentCharacter):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::length):
        (WebCore::TextRun::charactersLength):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::glyphDataForCharacter):
        (WebCore::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::adjustSelectionRectForComplexText):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setNormalizedBuffer):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::selectionState):
        (WebCore::adjustCharactersAndLengthForHyphen):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::positionForOffset):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::getStringToRender):
        * rendering/RenderCombineText.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::positionForOffset):
        (WebCore::SVGInlineTextBox::localSelectionRect):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGInlineTextBox::paintText):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::currentCharacterStartsSurrogatePair):
        (WebCore::SVGTextMetricsBuilder::advance):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::mapStartEndPositionsIntoFragmentCoordinates):
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::rotationOfCharacterCallback):
        (WebCore::SVGTextQuery::extentOfCharacterCallback):
        (WebCore::SVGTextQuery::characterNumberAtPositionCallback):
        * rendering/svg/SVGTextQuery.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGGlyphToPathTranslator::SVGGlyphToPathTranslator):
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontData.h:

2014-06-21  Zan Dobersek  <zdobersek@igalia.com>

        createCairoGLSurface should take in a FloatSize reference as its first parameter
        https://bugs.webkit.org/show_bug.cgi?id=134159

        Reviewed by Martin Robinson.

        The ImageBuffer constructor operates with a FloatSize reference, which is also
        passed to createCairoGLSurface when accelerated 2D canvas support is enabled.
        That function should take in a reference to the same type.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::createCairoGLSurface):

2014-06-21  Dean Jackson  <dino@apple.com>

        [Mac] Margins for new form controls need tweaking
        https://bugs.webkit.org/show_bug.cgi?id=134135
        <rdar://problem/17262164>

        Reviewed by Sam Weinig.

        Take 2 of this patch. Only the mac-mountainlion LayoutTest
        results are different from the first attempt.

        With the newer animated controls in OS X Yosemite, we need
        to tweak the fudge-factor margins for positioning. In a recent
        patch I added another fudge, which I'm removing with this. I'm
        not sure where the older values came from, but I've checked with
        the latest AppKit sources and am using the sizes they implement
        for the controls.

        This will rebaseline a lot of tests, since I've made small tweaks
        to the form layout.

        * platform/mac/ThemeMac.mm:
        (WebCore::checkboxMargins): New margin amounts.
        (WebCore::radioSizes): New sizes.
        (WebCore::radioMargins): New margin amounts.
        (WebCore::paintToggleButton): No need to call the positioning fudge any more.
        (WebCore::checkboxOffsets): Deleted.
        (WebCore::radioOffsets): Deleted.

2014-06-20  Sam Weinig  <sam@webkit.org>

        Remove static tables for bindings that use eager reification
        https://bugs.webkit.org/show_bug.cgi?id=134126

        Reviewed by Oliver Hunt.

        This shaves about 1MB off of WebCore's .o files.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * 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/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/JS/JSreadonly.h:

2014-06-21  Brady Eidson  <beidson@apple.com>

        Gamepad API - Deprecate the existing implementation
        https://bugs.webkit.org/show_bug.cgi?id=134108

        Reviewed by Timothy Hatcher.

        -Add new "GAMEPAD_DEPRECATED" build flag, moving the existing implementation to use it
        -Move some implementation files into a "deprecated" subdirectory.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * PlatformGTK.cmake:

        * Modules/gamepad/deprecated/Gamepad.cpp: Renamed from Source/WebCore/Modules/gamepad/Gamepad.cpp.
        * Modules/gamepad/deprecated/Gamepad.h: Renamed from Source/WebCore/Modules/gamepad/Gamepad.h.
        * Modules/gamepad/deprecated/Gamepad.idl: Renamed from Source/WebCore/Modules/gamepad/Gamepad.idl.
        * Modules/gamepad/deprecated/GamepadList.cpp: Renamed from Source/WebCore/Modules/gamepad/GamepadList.cpp.
        * Modules/gamepad/deprecated/GamepadList.h: Renamed from Source/WebCore/Modules/gamepad/GamepadList.h.
        * Modules/gamepad/deprecated/GamepadList.idl: Renamed from Source/WebCore/Modules/gamepad/GamepadList.idl.
        * Modules/gamepad/deprecated/NavigatorGamepad.cpp: Renamed from Source/WebCore/Modules/gamepad/NavigatorGamepad.cpp.
        * Modules/gamepad/deprecated/NavigatorGamepad.h: Renamed from Source/WebCore/Modules/gamepad/NavigatorGamepad.h.
        * Modules/gamepad/deprecated/NavigatorGamepad.idl: Renamed from Source/WebCore/Modules/gamepad/NavigatorGamepad.idl.

        * platform/Gamepads.h:
        * platform/efl/GamepadsEfl.cpp:
        * platform/gtk/GamepadsGtk.cpp:
        * platform/linux/GamepadDeviceLinux.cpp:
        * platform/linux/GamepadDeviceLinux.h:

2014-06-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Mark TextRun's constructors as explicit
        https://bugs.webkit.org/show_bug.cgi?id=134124

        Reviewed by Sam Weinig.

        After r170072, nobody is implicitly converting a string to a TextRun. Therefore,
        we can make the constructors explicit.

        No new tests because there is no behavior change.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):

2014-06-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170244.
        https://bugs.webkit.org/show_bug.cgi?id=134157

        GTK/EFL bindings generator works differently, making this
        patch not work there.  Will fix entire patch after a rollout.
        (Requested by bradee-oh on #webkit).

        Reverted changeset:

        "Gamepad API - Deprecate the existing implementation"
        https://bugs.webkit.org/show_bug.cgi?id=134108
        http://trac.webkit.org/changeset/170244

2014-06-21  Zan Dobersek  <zdobersek@igalia.com>

        Fix the mismatched header build guards in WebKitDOMNodeFilterPrivate.h
        which are throwing compilation warnings when building with Clang.

        * bindings/gobject/WebKitDOMNodeFilterPrivate.h:

2014-06-21  Brady Eidson  <beidson@apple.com>

        Gamepad API - Deprecate the existing implementation
        https://bugs.webkit.org/show_bug.cgi?id=134108

        Reviewed by Timothy Hatcher.

        -Add new "GAMEPAD_DEPRECATED" build flag, moving the existing implementation to use it
        -Add the "Deprecated" suffix to some implementation files

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * Configurations/FeatureDefines.xcconfig:
        
        * Modules/gamepad/GamepadDeprecated.cpp: Renamed from Source/WebCore/Modules/gamepad/Gamepad.cpp.
        * Modules/gamepad/GamepadDeprecated.h: Renamed from Source/WebCore/Modules/gamepad/Gamepad.h.
        * Modules/gamepad/GamepadDeprecated.idl: Renamed from Source/WebCore/Modules/gamepad/Gamepad.idl.

        * Modules/gamepad/GamepadList.cpp:
        * Modules/gamepad/GamepadList.h:
        * Modules/gamepad/GamepadList.idl:

        * Modules/gamepad/NavigatorGamepadDeprecated.cpp: Renamed from Source/WebCore/Modules/gamepad/NavigatorGamepad.cpp.
        * Modules/gamepad/NavigatorGamepadDeprecated.h: Renamed from Source/WebCore/Modules/gamepad/NavigatorGamepad.h.
        * Modules/gamepad/NavigatorGamepadDeprecated.idl: Renamed from Source/WebCore/Modules/gamepad/NavigatorGamepad.idl.

        * platform/Gamepads.h:
        * platform/efl/GamepadsEfl.cpp:
        * platform/gtk/GamepadsGtk.cpp:
        * platform/linux/GamepadDeviceLinux.cpp:
        * platform/linux/GamepadDeviceLinux.h:

2014-06-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170228.
        https://bugs.webkit.org/show_bug.cgi?id=134155

        Caused 9 layout test failures on Mountain Lion
        http://build.webkit.org/builders/Apple%20MountainLion%20Release%20WK2%20(Tests)/builds/19216
        (Requested by bradee-oh on #webkit).

        Reverted changeset:

        "[Mac] Margins for new form controls need tweaking"
        https://bugs.webkit.org/show_bug.cgi?id=134135
        http://trac.webkit.org/changeset/170228

2014-06-21  Jer Noble  <jer.noble@apple.com>

        [Mac] Create and attach the AVPlayerLayer to the AVPlayer immediately if the media element is <video>.
        https://bugs.webkit.org/show_bug.cgi?id=134131

        Reviewed by Eric Carlson.

        The AVPlayer uses the presence of an AVPlayerLayer to decide which alternate to display in the case of
        HLS streams with audio-only alternates. To give the AVPlayer the most information with which to make its
        decision, always create and attach an AVPlayerLayer before attaching an AVPlayerItem to the AVPlayerLayer.
        In addition, retrieve the <video> element bounds and create an AVPlayerLayer with a matching size, so that
        the AVPlayer can choose an alternate with the correct dimensions.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasLayerRenderer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformLayer):

2014-06-21  Jeremy Jones  <jeremyj@apple.com>

        Implement ios -[WAKWindow convertBaseToScreen:]
        https://bugs.webkit.org/show_bug.cgi?id=134053

        Reviewed by Eric Carlson.

        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow convertBaseToScreen:]):
        Traverse layer hierarchy and convert point.

        (-[WAKWindow convertScreenToBase:]):
        Traverse layer hierarchy and convert point.

2014-06-21  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Removing PAGE_VISIBILITY_API compile guard.
        https://bugs.webkit.org/show_bug.cgi?id=133844

        Reviewed by Gavin Barraclough.

        No new tests because no functional changes.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/vibration/NavigatorVibration.cpp:
        (WebCore::NavigatorVibration::vibrate):
        * dom/Document.cpp:
        (WebCore::Document::hidden):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::visibilityState):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/Page.h:
        * page/PageVisibilityState.cpp:
        * page/PageVisibilityState.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setHiddenPageCSSAnimationSuspensionEnabled):
        * page/Settings.h:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::updateClientDataBuffering):
        * platform/audio/MediaSession.h:

2014-06-21  Frédéric Wang  <fred.wang@free.fr>

        [GTK][EFL] Use OpenType MATH fonts by default.
        https://bugs.webkit.org/show_bug.cgi?id=133604

        Reviewed by Chris Fleizach.

        In order to support stretching of horizontal operators and large
        operators in display mode as well as to improve the drawing of radicals,
        we need to use an OpenType MATH table. This commit makes the MathML code
        try "Latin Modern Math" first, which is an OpenType version of Knuth's
        popular Computer Modern font and is packaged with most TeX
        distributions (e.g. TeX Live on Linux). This should work well on the
        EFL & GTK ports for which the initial OpenType MATH support has been
        tested. Other ports will be handled later.

        No new tests. This is already tested in LayoutTests/mathml/opentype/.

        * css/mathml.css:
        (math): Add "Latin Modern Math" as the first font-family of the <math> element.

2014-06-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed EFL build fix since r170224.

        Add retainPlatformLayer() and releasePlatformLayer() in ScrollingStateNodeCoordinatedGraphics.cpp
        as well. Thouse functions were missed in r170224.

        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/coordinatedgraphics/ScrollingStateNodeCoordinatedGraphics.cpp:
        (WebCore::LayerRepresentation::retainPlatformLayer):
        (WebCore::LayerRepresentation::releasePlatformLayer):

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

        [Mac] Margins for new form controls need tweaking
        https://bugs.webkit.org/show_bug.cgi?id=134135
        <rdar://problem/17262164>

        Reviewed by Sam Weinig.

        With the newer animated controls in OS X Yosemite, we need
        to tweak the fudge-factor margins for positioning. In a recent
        patch I added another fudge, which I'm removing with this. I'm
        not sure where the older values came from, but I've checked with
        the latest AppKit sources and am using the sizes they implement
        for the controls.

        This will rebaseline a lot of tests, since I've made small tweaks
        to the form layout.

        * platform/mac/ThemeMac.mm:
        (WebCore::checkboxMargins): New margin amounts.
        (WebCore::radioSizes): New sizes.
        (WebCore::radioMargins): New margin amounts.
        (WebCore::paintToggleButton): No need to call the positioning fudge any more.
        (WebCore::checkboxOffsets): Deleted.
        (WebCore::radioOffsets): Deleted.

2014-06-20  Alex Christensen  <achristensen@webkit.org>

        Fix css jit on armv7.
        https://bugs.webkit.org/show_bug.cgi?id=134143
        <rdar://problem/17348060>

        Reviewed by Benjamin Poulain.

        This fixes the acid3 test.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::addFlagsToElementStyleFromContext):
        Correct high and low bits.

2014-06-20  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=134117
        Unreproducible crashes under WebCore::ScrollingTree::updateTreeFromStateNode() 
        from messaging a deleted Obj-C object
        -and corresponding-
        <rdar://problem/17149252>

        Reviewed by Simon Fraser.

        This is a speculative fix. It makes LayerRepresentation retain m_platformLayer.

        * WebCore.exp.in:
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::LayerRepresentation):
        (WebCore::LayerRepresentation::~LayerRepresentation):
        (WebCore::LayerRepresentation::operator=):
        (WebCore::LayerRepresentation::operator==):
        (WebCore::LayerRepresentation::operator ==): Deleted.

        Make this ASSERT an ASSERT_WITH_SECURITY_IMPLICATION
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

        Moved ScrollingStateNodeMac.mm, which was empty anyway, to cocoa/
        ScrollingStateNode.mm so that iOS can use it too.
        * page/scrolling/cocoa: Added.
        * page/scrolling/cocoa/ScrollingStateNode.mm: Copied from page/scrolling/mac/ScrollingStateNodeMac.mm.

        Actual implementation for retain and release.
        (WebCore::LayerRepresentation::retainPlatformLayer):
        (WebCore::LayerRepresentation::releasePlatformLayer):

        Deleted.
        * page/scrolling/mac/ScrollingStateNodeMac.mm: Removed.

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

        Introduce RenderLayer::offsetFromAncestorLayer() to make convertToLayerCoords() calls with
        LayoutPoint(0, 0) as parameter more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=134092

        Reviewed by Simon Fraser.

        Most of the RenderLayer::convertToLayerCoords() callers are only interested in
        the offset from the ancestor layer by passing LayoutPoint(0, 0) as the coordinate to convert.
        Introducing offsetFromAncestorLayer() makes those calls more explicit/self-explanatory.
        It helps simplifying the callsite's code.

        No change in functionality.

        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer):
        (WebCore::RenderGeometryMap::pushMappingsToAncestor):
        (WebCore::RenderGeometryMap::push):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeOffsetFromRoot):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::convertToPixelSnappedLayerCoords):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::offsetFromAncestorLayer):
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::createLocalTransformState):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::repaintInCompositedAncestor):

2014-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Removing dead code in platform/graphics/gpu
        https://bugs.webkit.org/show_bug.cgi?id=134065

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/LoopBlinnClassifier.cpp: Removed.
        * platform/graphics/gpu/LoopBlinnClassifier.h: Removed.
        * platform/graphics/gpu/LoopBlinnConstants.h: Removed.
        * platform/graphics/gpu/LoopBlinnLocalTriangulator.cpp: Removed.
        * platform/graphics/gpu/LoopBlinnLocalTriangulator.h: Removed.
        * platform/graphics/gpu/LoopBlinnMathUtils.cpp: Removed.
        * platform/graphics/gpu/LoopBlinnMathUtils.h: Removed.
        * platform/graphics/gpu/LoopBlinnPathCache.cpp: Removed.
        * platform/graphics/gpu/LoopBlinnPathCache.h: Removed.
        * platform/graphics/gpu/LoopBlinnPathProcessor.h: Removed.
        * platform/graphics/gpu/LoopBlinnShader.cpp: Removed.
        * platform/graphics/gpu/LoopBlinnShader.h: Removed.
        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp: Removed.
        * platform/graphics/gpu/LoopBlinnSolidFillShader.h: Removed.
        * platform/graphics/gpu/LoopBlinnTextureCoords.cpp: Removed.
        * platform/graphics/gpu/LoopBlinnTextureCoords.h: Removed.
        * platform/graphics/gpu/Shader.cpp: Removed.
        * platform/graphics/gpu/Shader.h: Removed.
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp: Removed.
        * platform/graphics/gpu/SharedGraphicsContext3D.h: Removed.
        * platform/graphics/gpu/mac/DrawingBufferMac.mm: Removed.
        * platform/graphics/gpu/opencl/FilterContextOpenCL.cpp: Removed.
        * platform/graphics/gpu/opencl/FilterContextOpenCL.h: Removed.
        * platform/graphics/gpu/opencl/OpenCLFEColorMatrix.cpp: Removed.
        * platform/graphics/gpu/opencl/OpenCLFEFlood.cpp: Removed.
        * platform/graphics/gpu/opencl/OpenCLFEImage.cpp: Removed.
        * platform/graphics/gpu/opencl/OpenCLFEMerge.cpp: Removed.
        * platform/graphics/gpu/opencl/OpenCLFESourceAlpha.cpp: Removed.
        * platform/graphics/gpu/opencl/OpenCLFESourceGraphic.cpp: Removed.
        * platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp: Removed.
        * platform/graphics/gpu/opencl/OpenCLHandle.h: Removed.

2014-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Support Khmer and Lao fallback fonts
        https://bugs.webkit.org/show_bug.cgi?id=134114

        Reviewed by Enrica Casucci.

        iOS has fonts which have glyphs for the Khmer and Lao languages.

        This patch also does a little refactoring of the language-specific fallback
        font path to increase readability.

        Test: fast/text/khmer-lao-font.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::languageSpecificFallbackFont):
        (WebCore::FontCache::systemFallbackForCharacters):

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Give NPAPI post requests a default content type
        https://bugs.webkit.org/show_bug.cgi?id=134120

        Reviewed by Andreas Kling.

        * WebCore.exp.in:

2014-06-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r169972): fix issue when removing masks from compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=134118
        <rdar://problem/17366654>

        Reviewed by Dean Jackson.
        
        After r169972 when removing the mask, we could destroy the mask
        layer before the call into m_graphicsLayer->setMaskLayer(), which would
        try to call functions on the old mask. Fix by clearing the mask layer
        on the GraphicsLayer before the mask layer gets destroyed.

        Test: compositing/masks/toggle-mask.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateMaskLayer):
        * rendering/RenderLayerBacking.h:

2014-06-20  Andreas Kling  <akling@apple.com>

        [Cocoa] Release freed up blocks from the JS heap after simulated memory pressure.
        <https://webkit.org/b/134112>

        Reviewed by Mark Hahnenberg.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

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

        Remove redundant RenderLayer::computeOffsetFromRoot() function.
        https://bugs.webkit.org/show_bug.cgi?id=134088

        Reviewed by Benjamin Poulain.

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::computeOffsetFromRoot): Deleted.
        * rendering/RenderLayer.h:

2014-06-19  Simon Fraser  <simon.fraser@apple.com>

        [iOS WebKit2] Make -webkit-overflow-scrolling:touch work in iframes (breaks MSWord previews)
        https://bugs.webkit.org/show_bug.cgi?id=134085
        <rdar://problem/16440586>

        Reviewed by Tim Horton.
        
        When nodes were detached from the scrolling tree, we would previously throw away
        all descendant nodes, expecting that they would be re-attached as we walk the compositing
        layer tree in RenderLayerCompositor.
        
        However, this doesn't work across frame boundaries; the subframe may never update
        its compositing layers again, so would lose all its scrolling nodes.
        
        Fix by having ScrollingStateTree::detachNode() by default set aside subframe nodes
        into a hash map. On reattach, we'll look in the hash map and pull out an existing node
        (with its children intact) if possible.

        Tests: platform/mac-wk2/tiled-drawing/scrolling/frames/coordinated-frame-gain-scrolling-ancestor.html
               platform/mac-wk2/tiled-drawing/scrolling/frames/coordinated-frame-lose-scrolling-ancestor.html
               platform/mac-wk2/tiled-drawing/scrolling/frames/remove-coordinated-frame.html

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::detachNode):
        (WebCore::ScrollingStateTree::clear):
        (WebCore::ScrollingStateTree::removeNodeAndAllDescendants):
        (WebCore::ScrollingStateTree::recursiveNodeWillBeRemoved):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState): Go back to removing the deleted
        nodes from m_nodeMap first.
        (WebCore::ScrollingTree::removeDestroyedNodes): There is no need for this to
        actually make use of ScrollingTreeNode* any more; the ASSERT(!node->parent())
        is bogus because it can fire when whole subtrees are removed, and to clear the
        latched node we just need the ID.

2014-06-19  Simon Fraser  <simon.fraser@apple.com>

        Handle scrolling tree modifications which remove intermediate nodes
        https://bugs.webkit.org/show_bug.cgi?id=134082

        Reviewed by Tim Horton.

        When updating the scrolling tree from the state tree, we failed to maintain
        the children arrays correctly. Fix by removing all children on scrolling nodes,
        and allowing the calls on children to add them back. A temporary hash map
        keeps the nodes alive.
        
        The state tree's m_nodesRemovedSinceLastCommit was also made into a HashSet,
        to make it easier to handle removal followed by re-insertion.

        * WebCore.exp.in:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode): If a node is (possibly re-)added,
        remove it from m_nodesRemovedSinceLastCommit.remove.
        (WebCore::ScrollingStateTree::willRemoveNode):
        (WebCore::ScrollingStateTree::setRemovedNodes):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::removedNodes):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNode): Clean up to have only one call
        to updateBeforeChildren(), and remove all children from the scrolling node
        before visiting state children.
        (WebCore::ScrollingTree::removeDestroyedNodes): It was very wrong to assume
        that all non-root nodes were parented in the root! Now we don't need to
        remove from the parent anyway.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::children):

2014-06-19  Simon Fraser  <simon.fraser@apple.com>

        Make ScrollingTreeNodes refounted, for easier tree reconfiguration
        https://bugs.webkit.org/show_bug.cgi?id=134075

        Reviewed by Tim Horton.

        Make ScrollingTreeNode be ref-counted.

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::rootNode):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::appendChild):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::createNode):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::create):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::createNode):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::create):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::create):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::create):

2014-06-20  Enrica Casucci  <enrica@apple.com>

        iOS build fix after http://trac.webkit.org/changeset/170167.

        Reviewed by Geoff Garen.

        * bindings/js/JSDeviceMotionEventCustom.cpp:
        * bindings/js/JSDeviceOrientationEventCustom.cpp:

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

        Enable synchronous willSendRequest on iOS
        https://bugs.webkit.org/show_bug.cgi?id=134081
        <rdar://problem/17350927>

        Reviewed by Andreas Kling.

        We lost the call to make willSendrequest callbacks be synchronous if possible during code
        refactoring. The call is present in ResourceHandleMac.mm but that code is not called when
        we use the CFNetwork based loader. Call the SPI in setupRequest().

        No new tests because existing tests should cover this functionality.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):

2014-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not build quota files when QUOTA is disabled
        https://bugs.webkit.org/show_bug.cgi?id=134101

        Reviewed by Philippe Normand.

        * CMakeLists.txt: Remove exception for GTK+ that is no longer
        required since r170173.
        * PlatformGTK.cmake: Generate GObject DOM bindings for Quota when enabled.

2014-06-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Add GridSpan::iterator
        https://bugs.webkit.org/show_bug.cgi?id=134058

        Reviewed by Bem Jones-Bey.

        Once that GridResolvedPosition has been introduced in r169934, this
        patch adds a GridSpan::iterator which allows to simplify the loops over
        GridResolvedPositions.
        From now on we could use range-based for loops.

        No new tests as it is already covered by current tests
        (fast/css-grid-layout/).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeNormalizedFractionBreadth): Change loop to
        ranged-based for.
        (WebCore::RenderGrid::insertItemIntoGrid): Ditto.
        (WebCore::RenderGrid::gridAreaBreadthForChild): Ditto.
        * rendering/style/GridCoordinate.h: Define GridSpan::iterator.
        (WebCore::GridSpan::begin): Return resolved initial position.
        (WebCore::GridSpan::end): Return next to resolved final position.
        * rendering/style/GridResolvedPosition.h:
        (WebCore::GridResolvedPosition::operator*): Add operator required by
        range-based for loops.
        (WebCore::GridResolvedPosition::operator!=): Add not equal operator.

2014-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build after r170174.

        * bindings/gobject/WebKitDOMNodeFilter.cpp:
        (WebKit::nodeFilterObjectDestroyedCallback):

2014-06-20  Tim Horton  <timothy_horton@apple.com>

        LayerPool’d PlatformCALayerRemote/RemoteLayerBackingStore can have stale context pointers
        https://bugs.webkit.org/show_bug.cgi?id=134050
        <rdar://problem/17315114>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        Drain all LayerPools upon memory pressure.

        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::LayerPool):
        (WebCore::LayerPool::~LayerPool):
        (WebCore::LayerPool::allLayerPools):
        (WebCore::LayerPool::sharedPool): Deleted.
        * platform/graphics/ca/LayerPool.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::createCompatibleLayerWithSize):
        Add createCompatibleLayerWithSize, which optionally tries to take said layer from the LayerPool.

        (WebCore::PlatformCALayer::moveToLayerPool):
        Add moveToLayerPool, which moves the layer to the LayerPool.

        (WebCore::PlatformCALayer::layerPool):
        The LayerPool for each layer is obtained via PlatformCALayer::layerPool(), which subclasses can override for special behaviors.
        The base class uses a global LayerPool.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::createTileLayer):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::removeTiles):

2014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] webkit_dom_document_create_tree_walker impossible to use due to WebKitDOMNodeFilter
        https://bugs.webkit.org/show_bug.cgi?id=93002

        Reviewed by Gustavo Noronha Silva.

        Add custom implementation of WebKitDOMNodeFilter to expose it as
        an interface instead of a class.

        * PlatformGTK.cmake: Add new files to compilation.
        * bindings/gobject/GObjectNodeFilterCondition.cpp: Added.
        (WebCore::GObjectNodeFilterCondition::~GObjectNodeFilterCondition):
        Reset the NodeFilter WebCore object associated to the
        WebKitDOMNodeFilter object.
        (WebCore::GObjectNodeFilterCondition::acceptNode): Call webkit_dom_node_filter_accept_node().
        * bindings/gobject/GObjectNodeFilterCondition.h: Added.
        (WebCore::GObjectNodeFilterCondition::create): Create a new
        GObjectNodeFilterCondition for the given WebKitDOMNodeFilter.
        (WebCore::GObjectNodeFilterCondition::GObjectNodeFilterCondition):
        * bindings/gobject/WebKitDOMNodeFilter.cpp: Added.
        (webkit_dom_node_filter_default_init):
        (webkit_dom_node_filter_accept_node):
        (WebKit::nodeFilterMap): Map NodeFilter WebCore objects to
        WebKitDOMNodeFilter objects.
        (WebKit::nodeFilterObjectDestroyedCallback): Remove the node
        filter form the map when the WebKitDOMNodeFilter objecrt is destroyed.
        (WebKit::kit): Return the WebKitDOMNodeFilter object for the given
        NodeFilter WebCore object.
        (WebKit::core): Get or create a NodeFilter WebCore object
        associated to the given WebKitDOMNodeFilter.
        * bindings/gobject/WebKitDOMNodeFilter.h: Added.
        * bindings/gobject/WebKitDOMNodeFilter.symbols: Added.
        * bindings/gobject/WebKitDOMNodeFilterPrivate.h: Added.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Add exceptions for NodeFilter parameters since
        the core method returns a PassRefPtr.

2014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Limit the amount of API exposed to GObject DOM bindings API
        https://bugs.webkit.org/show_bug.cgi?id=133726

        Reviewed by Gustavo Noronha Silva.

        Split the GObject DOM bindings API into stable and unstable. The
        unstable API is not included in the main webkitdom.h file, so that
        to use it users have to include the headers individually and
        define a macro WEBKIT_DOM_USE_UNSTABLE_API. For unstable methods
        of stable classes we generate a {ClassName}Unstable.h header file
        containing the unstable API. From now on we only keep backwards
        compatibility for the stable API.

        * PlatformGTK.cmake: Split GObject DOM bindings related variables
        into Stable and Unstable. Add also
        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_set_current_time): Deleted.
        (webkit_dom_text_track_get_kind): Deleted.
        (webkit_dom_text_track_get_mode): Deleted.
        (webkit_dom_text_track_set_mode): Deleted.
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Remove custom symbols
        added due to API changes.
        * bindings/gobject/WebKitDOMPrivate.h: Include webkitdomdefines-unstable.h.
        * bindings/gobject/webkitdom.symbols: Remove all unstable symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Do not skip webkit_dom_html_media_element_set_current_time anymore.
        (GenerateHeader): Only force single header include for stable
        headers and add WEBKIT_DOM_USE_UNSTABLE_API #ifdef to unstable headers.
        (GenerateFunction): Only add stable symbols to the symbols
        array. Add function prototypes to main header or unstable header
        depending on whether it's an unstable symbol for a stable class or
        not. Also add Stability gtk-doc tag to unstable methods.
        (GenerateEndHeader): Add required #endifs
        (WriteData): Write also an Unstable.h header when appropriate and
        only generate a symbols file for stable classes.
        (ReadStableSymbols): Read the stable symbols for the current class.
        (GenerateInterface): Call ReadStableSymbols.
        * bindings/scripts/gobject-generate-headers.pl: Generate webkitdomdefines-unstable.h.
        * 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/WebKitDOMTestGenerateIsReachable.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:
        * bindings/scripts/test/GObject/WebKitDOMreadonly.h:

2014-06-19  Andreas Kling  <akling@apple.com>

        When simulating memory pressure, GC *after* releasing WebCore resources.

        Since clearing the page cache is likely to create lots of garbage, defer the
        synchronous GC until after the WebCore pressure relief, so we can see the
        effect of clearing out all those pages.

        Rubber-stamped by Gavin Barraclough.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

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

        Move generate prototype and constructor classes into the generated implementation files
        https://bugs.webkit.org/show_bug.cgi?id=134054

        Reviewed by Oliver Hunt.

        In an effort to reduce the size of the generated bindings headers, which is important
        as the generated headers get included in a lot of places, this patch moves the prototype
        and constructor declarations from the header to implementation file. This works because,
        for the most part, no code cares about the prototype or constructors except the instance.

        There are a few exceptions which had to be accounted for:
        - The global objects (JSDOMWindow and JSWorkerGlobalScope) need to have their prototypes
          available during initialization, so they remain in the header.
        - JSLocation requires customizing some aspects of the prototype behavior, so its prototype,
          and any future class that uses JSCustomNamedGetterOnPrototype or JSCustomDefineOwnPropertyOnPrototype,
          remains in the header.
        - A few classes had custom constructor functions. Instead of keeping the entire constructor
          in the header, I opted for pulling just the static constructor function into the header, and
          modifying the custom constructors to use the DOMConstructorObject type as the callee, since the
          more specific type was unnecessary.

        As a result of making these changes, I was also able to remove the #include of JSDOMBinding.h from
        all the headers, which brought in quite a bit.

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::constructJSAudioContext):
        (WebCore::JSAudioContextConstructor::constructJSAudioContext): Deleted.
        * bindings/js/JSBlobCustom.cpp:
        (WebCore::constructJSBlob):
        (WebCore::JSBlobConstructor::constructJSBlob): Deleted.
        * bindings/js/JSCryptoCustom.cpp:
        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::constructJSDOMFormData):
        (WebCore::JSDOMFormDataConstructor::constructJSDOMFormData): Deleted.
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        * bindings/js/JSDOMPluginCustom.cpp:
        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::constructJSDataCue):
        (WebCore::JSDataCueConstructor::constructJSDataCue): Deleted.
        * bindings/js/JSDataTransferCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSFileReaderCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSIDBAnyCustom.cpp:
        * bindings/js/JSIDBDatabaseCustom.cpp:
        * bindings/js/JSIDBObjectStoreCustom.cpp:
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::finishCreation):
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::constructJSMutationObserver):
        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver): Deleted.
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionSyncCustom.cpp:
        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::constructJSSharedWorker):
        (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker): Deleted.
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSUserMessageHandlersNamespaceCustom.cpp:
        * bindings/js/JSWebKitPointCustom.cpp:
        (WebCore::constructJSWebKitPoint):
        (WebCore::JSWebKitPointConstructor::constructJSWebKitPoint): Deleted.
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::constructJSWorker):
        (WebCore::JSWorkerConstructor::constructJSWorker): Deleted.
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GeneratePrototypeDeclaration):
        (GenerateConstructorDeclaration):
        (GenerateConstructorHelperMethods):
        (HeaderNeedsPrototypeDeclaration):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * 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/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/JS/JSreadonly.h:


2014-06-19  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile errors related to http header field names.
        https://bugs.webkit.org/show_bug.cgi?id=134029

        Reviewed by Brent Fulgham.

        Http header field names should now be specified with an enum, not a string.

        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::didReceiveResponse):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::getProtectionSpace):

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

        Put the divider in the right place.

        * DerivedSources.make:

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

        Address a review comment from Darin.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willLoadXHR):

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

        Simplify two HistoryController member functions
        https://bugs.webkit.org/show_bug.cgi?id=134064

        Reviewed by Dan Bernstein.

        Remove the FrameLoadType parameter from recursiveSetProvisionalItem,
        use early returns and modern loops.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::recursiveSetProvisionalItem):
        (WebCore::HistoryController::recursiveGoToItem):
        * loader/HistoryController.h:

2014-06-19  David Kilzer  <ddkilzer@apple.com>

        MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL() leaks an NSMutableArray
        <http://webkit.org/b/134052>

        Reviewed by Eric Carlson.

        Fixes the following static analyzer warning:

            WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:688:43: warning: Potential leak of an object stored into 'outOfBandTracks'
                    NSMutableArray* outOfBandTracks = [[NSMutableArray alloc] init];
                                                      ^

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        Use RetainPtr<NSMutableArray> to prevent a leak.  Use
        Objective-C literals to clean up the code.

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

        ScriptExecutionContext::Task, FileThread::Task parameters should be values
        https://bugs.webkit.org/show_bug.cgi?id=134035

        Reviewed by Anders Carlsson.

        r170106 and similar previous changesets enforced ScriptExecutionContext::Task and
        FileThread::Task parameters as rvalue references. There's technically nothing wrong
        with that, but since both classes are move-only it is also not strictly required.
        Accepting these parameters as values is more common in C++ value semantics as well.

        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * fileapi/FileThread.cpp:
        (WebCore::FileThread::postTask):
        * fileapi/FileThread.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerGlobalScope):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::postTask):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postTaskToLoader):
        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::postTask):
        (WebCore::WorkerRunLoop::postTaskAndTerminate):
        (WebCore::WorkerRunLoop::postTaskForMode):
        (WebCore::WorkerRunLoop::Task::create):
        (WebCore::WorkerRunLoop::Task::Task):
        * workers/WorkerRunLoop.h:

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

        Web Inspector: AXI: expose aria-relevant
        https://bugs.webkit.org/show_bug.cgi?id=130913

        Reviewed by Joseph Pecoraro.

        Expose ARIA live region relevance in Web Inspector.
        E.g. "Live: Assertive (Additions, Text)"

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode_liveRegion.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties): Support for liveRegionRelevant.
        * inspector/protocol/DOM.json: Defined enum values and array passed to client.

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

        Add rebeccapurple to CSS named color list
        https://bugs.webkit.org/show_bug.cgi?id=133804

        Reviewed by Jer Noble.

        Add the named color "rebeccapurple" (#639).

        * css/SVGCSSValueKeywords.in:
        * platform/ColorData.gperf:

2014-06-11  Jeffrey Pfau  <jpfau@apple.com>

        Fix flaky beforeload tests
        https://bugs.webkit.org/show_bug.cgi?id=133685

        Reviewed by David Kilzer.

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

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Make FrameLoadType a strongly typed enum
        https://bugs.webkit.org/show_bug.cgi?id=134047

        Reviewed by Andreas Kling.

        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::goBackOrForward):
        (WebCore::BackForwardController::goBack):
        (WebCore::BackForwardController::goForward):
        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):
        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::isReplacing):
        (WebCore::FrameLoader::setReplacing):
        (WebCore::FrameLoader::subresourceCachePolicy):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::shouldPerformFragmentNavigation):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoaderTypes.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreDocumentState):
        (WebCore::HistoryController::updateForReload):
        (WebCore::HistoryController::isReplaceLoadTypeWithProvisionalItem):
        (WebCore::HistoryController::isReloadTypeWithProvisionalItem):
        * loader/NavigationAction.cpp:
        (WebCore::navigationType):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::PolicyChecker):
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::cachePolicy):
        * loader/icon/IconController.cpp:
        (WebCore::IconController::startLoader):

2014-06-18  Alex Christensen  <achristensen@webkit.org>

        [curl] Unreviewed speculative build fix after r170021.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::didReceiveHeader):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::getProtectionSpace):
        (WebCore::headerCallback):
        Use HTTPHeaderName constants.

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

        Move the removeNode() tree walking from ScrollingStateNote into ScrollingStateTree
        https://bugs.webkit.org/show_bug.cgi?id=134043

        Reviewed by Beth Dakin.

        It's cleaner if ScrollingStateTree does the descendant walk when removing nodes.
        We can simply start the "willBeRemoved" walk at the node in question.
        
        Have willRemoveNode() just remove the node from the m_stateNodeMap directly, rather
        than this happening in a separate walk of m_nodesRemovedSinceLastCommit.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::removeDescendant): Deleted.
        (WebCore::ScrollingStateNode::willBeRemovedFromStateTree): Deleted.
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::detachNode):
        (WebCore::ScrollingStateTree::clear):
        (WebCore::ScrollingStateTree::removeNodeAndAllDescendants):
        (WebCore::ScrollingStateTree::recursiveNodeWillBeRemoved):
        (WebCore::ScrollingStateTree::willRemoveNode):
        (WebCore::ScrollingStateTree::removeNode): Deleted.
        * page/scrolling/ScrollingStateTree.h:

2014-06-18  Alex Christensen  <achristensen@webkit.org>

        [iOS WebGL] Fixed WEBGL_compressed_texture_pvrtc.
        https://bugs.webkit.org/show_bug.cgi?id=133561
        
        Based on Blink r153971 by bajones@chromium.org.

        Reviewed by Dean Jackson.

        No new tests, but this should fix webgl-compressed-texture-pvrtc.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions):
        (WebCore::WebGLRenderingContext::validateCompressedTexSubDimensions):
        Added checks for pvrtc.

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Work around a Windows compiler crash.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):

2014-06-18  Benjamin Poulain  <benjamin@webkit.org>

        Subtrees with :first-child and :last-child are not invalidated when siblings are added/removed
        https://bugs.webkit.org/show_bug.cgi?id=133934

        Reviewed by Antti Koivisto.

        When adding/removing nodes on an element, we try to invalidate only the elements that are
        affected. In the case of :first-child and :last-child, that optimizations is implemented
        through two types of flags that are updated during style resolution.

        The first flag is childrenAffectedByFirstChildRules (childrenAffectedByLastChildRules),
        set on the parent of any element that could be affected by :first-child (:last-child).

        The other part of the optimization is marking the style itself with firstChildState (lastChildState)
        to further reduce invalidations.

        The problem in this case happen with a subtree of element is detached. Since there is no renderer,
        the computed style is resolved ad-hoc and stored directly on the element. When the element is moved,
        the computed style was never cleared because the invalidation optimizations were not handling
        elements without style.

        Credit to Yusuke Suzuki for discovering the issue and creating test cases.

        Tests: fast/css/getComputedStyle/empty-update-without-renderer.html
               fast/css/getComputedStyle/first-child-update-without-renderer.html
               fast/css/getComputedStyle/last-child-update-without-renderer.html

        * dom/Element.cpp:
        (WebCore::checkForEmptyStyleChange):
        Clean up: pull the style directly from the function instead of expection the call sites to do that.
        Refine the checks to avoid invalidation.

        (WebCore::checkForSiblingStyleChanges):
        Do not early return if the parent is detached, the children may still need invalidation.

        When there is no renderer, assume the worst first-child/last-child and force the invalidation.

        (WebCore::Element::childrenChanged):

2014-06-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r167856): Unable to log into HSBC app
        https://bugs.webkit.org/show_bug.cgi?id=133991
        <rdar://problem/17044839>

        Reviewed by David Kilzer.

        Following <http://trac.webkit.org/changeset/167856> we disallow "navigation to any URL that is
        invalid, except for JavaScript URLs, which need not be valid." A byproduct of this policy
        decision is that we no longer notify the WebKit client to about a navigation if the destination
        URL is invalid. And some apps, including the HSBC app for iOS, have logic to intercept URLs
        as a means to pass data from their WebView-embedded web app to the WebView. We should expose a
        setting called allowNavigationToInvalidURL (disabled by default on all ports and conditionally
        enabled on iOS) to toggle whether WebCore allows navigation to any URL, even if its invalid,
        so as to not break clients that intercept URLs and have custom logic to handle them.

        Tests: fast/loader/allow-redirect-to-invalid-url-using-javascript.html
               fast/loader/allow-redirect-to-invalid-url-using-meta-refresh.html
               fast/loader/disallow-redirect-to-invalid-url-using-javascript.html
               fast/loader/disallow-redirect-to-invalid-url-using-meta-refresh.html

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::shouldScheduleNavigation): Modified to only validate
        the URL when the setting allowNavigationToInvalidURL is disabled.
        * page/Settings.in: Added setting allowNavigationToInvalidURL (disabled by default).

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

        Make ScrollingStateNodes refcounted, and other minor cleanup
        https://bugs.webkit.org/show_bug.cgi?id=134040

        Reviewed by Beth Dakin.

        Prepare for future scrolling frame gyrations by making
        ScrollingStateNodes refcounted.
        
        Rename ScrollingStateNode::removeChild() to removeDescendant()
        since that's what it does. Also rename didRemoveNode() to willRemoveNode()
        to better match the behavior.
        
        Use 'auto' in more places.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::syncChildPositions):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::create):
        (WebCore::ScrollingStateFixedNode::clone):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::create):
        (WebCore::ScrollingStateFrameScrollingNode::clone):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::cloneAndReset):
        (WebCore::ScrollingStateNode::appendChild):
        (WebCore::ScrollingStateNode::removeDescendant):
        (WebCore::ScrollingStateNode::willBeRemovedFromStateTree):
        (WebCore::ScrollingStateNode::removeChild): Deleted.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::children):
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        (WebCore::ScrollingStateOverflowScrollingNode::create):
        (WebCore::ScrollingStateOverflowScrollingNode::clone):
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::create):
        (WebCore::ScrollingStateStickyNode::clone):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::removeNode):
        (WebCore::ScrollingStateTree::willRemoveNode):
        (WebCore::ScrollingStateTree::didRemoveNode): Deleted.
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::setRootStateNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Adopt modern C++11 loops and fix WebArchive creation functions
        https://bugs.webkit.org/show_bug.cgi?id=134032

        Reviewed by Andreas Kling.

        Use modern loops in a couple of places, fix DocumentLoader::subresources() to return a Vector,
        and stop using Vectors of PassRefPtrs.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresources):
        (WebCore::DocumentLoader::getSubresources): Deleted.
        * loader/DocumentLoader.h:
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::dump):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::resources):
        (WebCore::ApplicationCache::begin): Deleted.
        (WebCore::ApplicationCache::end): Deleted.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::fillResourceList):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::empty):
        (WebCore::ApplicationCacheStorage::storeCopyOfCache):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/archive/cf/LegacyWebArchive.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):

2014-06-18  Alex Christensen  <achristensen@webkit.org>

        Remove duplicate code using sdiv.
        https://bugs.webkit.org/show_bug.cgi?id=133764

        Reviewed by Daniel Bates.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        Use template sdiv for apple armv7s and arm64.

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

        ScriptExecutionContext::Task parameters should always be rvalue references
        https://bugs.webkit.org/show_bug.cgi?id=133615

        Reviewed by Darin Adler.

        ScriptExecutionContext::Task parameters should be rvalue references as the
        passed-in objects are always ScriptExecutionContext::Task rvalues that were
        implicitly constructed from a lambda function or rvalues of objects that
        derive from ScriptExecutionContext::Task.

        This isn't really necessary since ScriptExecutionContext::Task is non-copyable
        and we have to use move semantics anyway, but it makes it clear that these
        objects are expiring rvalues that must be properly dealt with.

        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerGlobalScope):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::postTask):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postTaskToLoader):
        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::postTask):
        (WebCore::WorkerRunLoop::postTaskAndTerminate):
        (WebCore::WorkerRunLoop::postTaskForMode):
        (WebCore::WorkerRunLoop::Task::create):
        (WebCore::WorkerRunLoop::Task::Task):
        * workers/WorkerRunLoop.h:

2014-06-18  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile errors when trying to compile CA code.
        https://bugs.webkit.org/show_bug.cgi?id=134030

        Reviewed by Simon Fraser.

        WinCairo does not USE(CA).

        * WebCore.vcxproj/WebCore.vcxproj:
        * platform/graphics/ca/TileController.h:

2014-06-17  Tim Horton  <timothy_horton@apple.com>

        [iOS][wk2] Use ImageDocument to display subframe PDFs
        https://bugs.webkit.org/show_bug.cgi?id=133944
        <rdar://problem/17205983>

        Reviewed by Dan Bates.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        Make a ImageDocument to show our subframe PDF, if the setting is enabled.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::finishedParsing):
        (WebCore::ImageDocument::createDocumentStructure):
        Set the ResourceResponse on the ImageElement upon creation, instead of
        when the load finishes. This way, when the internal CachedImage creates
        its Image, it can have the correct MIME type for the response, and can
        make a PDFDocumentImage if necessary.

        We never noticed this before because CachedImage falls back to making a
        BitmapImage, and that was the only case that was normally used.

        Throw an explicit white background behind PDF ImageDocuments; PDFDocumentImage
        paints with a transparent background, but when used as an ImageDocument
        it seems reasonable to assume that there should be a white page background
        (similar to what PDFPlugin and friends do).

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        Don't make a PDFDocument if we want to use an ImageDocument for this subframe PDF.

        * page/Settings.in:

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isPDFMIMEType):
        * platform/MIMETypeRegistry.h:
        Expose the already implemented pdfMIMETypes table just like all the rest.

2014-06-17  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix with ENABLE_NOSNIFF after r170021

        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::mimeTypeAllowedByNosniff):

2014-06-17  Jeremy Jones  <jeremyj@apple.com>

        Improve enter and exit fullscreen transition by using two step transition.
        https://bugs.webkit.org/show_bug.cgi?id=133706

        Reviewed by Simon Fraser.

        setupFullscreen, creates the fullscreen views ready to receive the video layer.
        Once they are in place, didSetupFullscreen will move the video layer into the 
        new view hierarchy and initiate enterFullscreen to animate.

        Reverse process for exit fullscreen.

        * WebCore.exp.in: Add exports.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:]):
        Refactor into didSetupFullscreen.
        (-[WebVideoFullscreenController didSetupFullscreen]):
        Move the video layer once fullscreen is ready to receive it.
        (-[WebVideoFullscreenController didExitFullscreen]):
        Move the video layer back into we the web page, and initiate cleanup.
        (-[WebVideoFullscreenController didCleanupFullscreen]):
        Refactord cleanup from didExitFullscreen.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Add delcarations.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        Refactored from enterFullscreen. Builds views ready to receive video layer.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        Animates into fullscreen.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        Animates from fullscreen. Cleanup is refactored into cleanupFullscreen()
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen):
        Refactored from exitFullscreen(), removes views.

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

        Remove unnecessary Structure flags from generated bindings
        https://bugs.webkit.org/show_bug.cgi?id=133992

        Reviewed by Daniel Bates.

        - Remove OverridesVisitChildren flag from DOM prototype objects. They never
          implement visitChildren.
        - Remove OverridesGetOwnPropertySlot and ImplementsHasInstance from DOM constructor
          objects. getOwnPropertySlot is never implemented and ImplementsHasInstance is inherited
          automatically from DOMConstructorObject.
        - If we are not changing any flags, we now don't emit StructureFlags at all for the class.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePrototypeDeclaration):
        (GenerateConstructorDeclaration):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        (WebCore::JSTestActiveDOMObjectPrototype::JSTestActiveDOMObjectPrototype):
        (WebCore::JSTestActiveDOMObjectConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (WebCore::JSTestCustomNamedGetterPrototype::JSTestCustomNamedGetterPrototype):
        (WebCore::JSTestCustomNamedGetterConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructorPrototype::JSTestEventConstructorPrototype):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTargetPrototype::JSTestEventTargetPrototype):
        (WebCore::JSTestEventTargetConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestException.h:
        (WebCore::JSTestExceptionPrototype::JSTestExceptionPrototype):
        (WebCore::JSTestExceptionConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        (WebCore::JSTestGenerateIsReachablePrototype::JSTestGenerateIsReachablePrototype):
        (WebCore::JSTestGenerateIsReachableConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterfacePrototype::JSTestInterfacePrototype):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListenerPrototype::JSTestMediaQueryListListenerPrototype):
        (WebCore::JSTestMediaQueryListListenerConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructorPrototype::JSTestNamedConstructorPrototype):
        (WebCore::JSTestNamedConstructorConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestNode.h:
        (WebCore::JSTestNodePrototype::JSTestNodePrototype):
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        (WebCore::JSTestNondeterministicPrototype::JSTestNondeterministicPrototype):
        (WebCore::JSTestNondeterministicConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObjPrototype::JSTestObjPrototype):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (WebCore::JSTestOverloadedConstructorsPrototype::JSTestOverloadedConstructorsPrototype):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::JSTestSerializedScriptValueInterfacePrototype):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        (WebCore::JSTestTypedefsPrototype::JSTestTypedefsPrototype):
        * bindings/scripts/test/JS/JSattribute.h:
        (WebCore::JSattributePrototype::JSattributePrototype):
        (WebCore::JSattributeConstructor::createStructure):
        * bindings/scripts/test/JS/JSreadonly.h:
        (WebCore::JSreadonlyPrototype::JSreadonlyPrototype):
        (WebCore::JSreadonlyConstructor::createStructure):

2014-06-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Input type=time elements styled with SVG fonts have 0 width
        https://bugs.webkit.org/show_bug.cgi?id=133524

        Reviewed by Simon Fraser.

        Refactor how the LocalizedDateCache returns maximum widths for input elements. Currently,
        measuring the width of an SVG font requires a RenderObject for context, which the
        LocalizedDateCache can't know about (it would be a platform violation). Instead, the
        LocalizedDateCache can return the strings that it would use to measure the width, and the
        caller can actually run the width computation.

        Test: fast/forms/time-input-svg-font.html

        * platform/text/PlatformLocale.h:
        * platform/text/ios/LocalizedDateCache.h:
        * platform/text/ios/LocalizedDateCache.mm:
        (WebCore::LocalizedDateCache::maximumWidthForDateType): Take a delegate which can
        measure text
        (WebCore::LocalizedDateCache::calculateMaximumWidth): Perform maximum width
        computation using delegate.
        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::formatDateTime):
        (WebCore::LocaleMac::maximumWidthForDateType): Deleted. Short-circuit this and go
        directly to the LocalizedDateCache. This makes sense because we have to explicitly
        insert computed values back into the cache in this new model.
        * rendering/RenderThemeIOS.mm:
        (WebCore::adjustInputElementButtonStyle): Create a delegate and pass it to the
        LocalizedDateCache

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

        [UI-side compositing] fix reflections on composited layers
        https://bugs.webkit.org/show_bug.cgi?id=133942

        Reviewed by Tim Horton.

        Fix reflections on composited layers. There are two main set of changes.
        
        First, a PlatformCALayerRemote which is a clone has to track the layer
        it is a clone of, so it knows where to grab the contents from in the UI process.
        This layer may be told that its contents need updating out of order during
        recursiveBuildTransaction(), so we need some small changes in RemoteLayerTreeContext
        to allow a layer to add itself to the set of layers requiring commit.
        
        In the UI process, a new step is added to RemoteLayerTreeHost::updateLayerTree()
        to go through clones, and copy their contents from the origin layer.
        
        The second set of changes makes platformCALayerLayerDidDisplay() work for
        UI-side compositing by not taking a PlatformLayer*, but instead a PlatformCALayer*.
        PlatformCALayer::setContentsChanged() changed to copyContentsFromLayer() so we know
        what the origin layer is.

        Test: compositing/reflections/repaint-with-reflection.html

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::layerDidDisplay): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerLayerDidDisplay): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::layerDidDisplay):
        (WebCore::GraphicsLayerCA::findOrMakeClone):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerLayerDidDisplay):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::copyContentsFromLayer):
        (PlatformCALayerMac::superlayer):
        (PlatformCALayerMac::setContentsChanged): Deleted.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/graphics/mac/WebLayer.mm:
        (-[WebSimpleLayer display]):

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

        Use strongly typed enums for AnimationState and AnimationInputState
        https://bugs.webkit.org/show_bug.cgi?id=133988

        Reviewed by Tim Horton.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::nameForState):
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::updatePlayState):
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::goIntoEndingOrLoopingState):
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::beginAnimationUpdateTime):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::clear):
        (WebCore::AnimationBase::onAnimationStartResponse):
        (WebCore::AnimationBase::waitingToStart):
        (WebCore::AnimationBase::preActive):
        (WebCore::AnimationBase::postActive):
        (WebCore::AnimationBase::fillingForwards):
        (WebCore::AnimationBase::paused):
        (WebCore::AnimationBase::inPausedState):
        (WebCore::AnimationBase::isNew):
        (WebCore::AnimationBase::waitingForStartTime):
        (WebCore::AnimationBase::waitingForStyleAvailable):
        (WebCore::AnimationBase::isAnimatingProperty):
        (WebCore::AnimationBase::styleAvailable):
        (WebCore::AnimationBase::compositeAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::onAnimationEnd):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        (WebCore::ImplicitAnimation::reset):
        (WebCore::ImplicitAnimation::setOverridden):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::sendAnimationEvent):

2014-06-17  Andreas Kling  <akling@apple.com>

        Avoid synchronous layout in window.scrollTo(0,0) when already at (0,0)
        <https://webkit.org/b/133893>

        Going from 0,0 to 0,0 is a no-op since there is no way a layout will
        affect the current scroll position.

        We don't send scroll events when moving to the previous position,
        so this change is not observable.

        Reviewed by Anders Carlsson.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollTo):

2014-06-17  Alex Christensen  <achristensen@webkit.org>

        Fix css jit register usage on armv7.
        https://bugs.webkit.org/show_bug.cgi?id=133952

        Reviewed by Benjamin Poulain.

        * cssjit/RegisterAllocator.h:
        List r7 as a callee saved register, which it is.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateEpilogue):
        Save r6, which is used as a temporary register and must be preserved.

2014-06-17  Miyoung Shin  <myid.shin@samsung.com>

        Use references instead of pointers to RenderBlock in enclosingBoxModelObject()
        https://bugs.webkit.org/show_bug.cgi?id=133978

        Reviewed by Andreas Kling.

        Just a straightforward conversion from pointers to references.

        No new tests, no behavior change.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingBoxModelObject):
        * rendering/RenderObject.h:

2014-06-17  Zan Dobersek  <zdobersek@igalia.com>

        Cache the gst_query_get_n_buffering_ranges() return value for the for-loop conditional
        https://bugs.webkit.org/show_bug.cgi?id=133953

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered): Avoid the extra call in the for-loop
        conditional expression by caching the return value of gst_query_get_n_buffering_ranges().

2014-06-17  Zan Dobersek  <zdobersek@igalia.com>

        Avoid Vector<char> copies in the OffsetBuffer constructor
        https://bugs.webkit.org/show_bug.cgi?id=133956

        Reviewed by Andreas Kling.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::OffsetBuffer::OffsetBuffer): Take the Vector parameter by value and
        move it into the member variable.
        (WebCore::openFunc): Move the Vector object into the OffsetBuffer constructor.

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

        [MSE] Overwritten samples are removed from buffered ranges using decode times; added samples using presentation times
        https://bugs.webkit.org/show_bug.cgi?id=133959

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-overlapping-append-buffered.html

        Explicitly call presentationTime() on removed samples, rather than implicitly asking for the iterator's "first"
        member. When iterating over samples, "first" can either be presentation time, or decode time, depending on which
        iteration method is called. In the case of removing samples, this was using the decode time incorrectly.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2014-06-16  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Region with border radius and overflow:hidden does not clip content
        https://bugs.webkit.org/show_bug.cgi?id=133476

        Reviewed by Andrei Bucur.

        When setting the clip before painting the named flow content,
        use the region's foreground rect to take the region's border radius
        into account if needed.

        Test: fast/regions/region-border-radius-overflow-clip.html

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

2014-06-16  Sam Weinig  <sam@webkit.org>

        Extract prototype declaration generation into a helper function
        https://bugs.webkit.org/show_bug.cgi?id=133969

        Reviewed by Dan Bernstein.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePrototypeDeclaration):

2014-06-16  Sam Weinig  <sam@webkit.org>

        Move forward declaration of bindings static functions into their implementation files
        https://bugs.webkit.org/show_bug.cgi?id=133943

        Reviewed by Geoffrey Garen.

        - Moves the forward declaration of static functions for generated files to the implementation.
        - Adds a new extended attribute, ForwardDeclareInHeader, for functions that still need a 
          forward declaration in the header.

        * bindings/js/JSDOMBinding.h:
        (WebCore::nonCachingStaticFunctionGetter):
        Move this helper here from JSDOMWindowCustom.cpp.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        Switch to comparing the property name directly rather than looking up in the static table and
        comparing function pointers.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
        Switch to comparing the property name directly rather than looking up in the static table and
        comparing function pointers and start using the nonCachingStaticFunctionGetter<> helper.

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::putDelegate):
        Switch to comparing the property name directly rather than looking up in the static table and
        comparing function pointers and start using the nonCachingStaticFunctionGetter<> helper.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        Move forward declaration creation to the implementation file where possible.

        * bindings/scripts/IDLAttributes.txt:
        Add ForwardDeclareInHeader.

        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        Add ForwardDeclareInHeader where necessary.

2014-06-16  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix after r170029

        Use String() instead of AtomicString().

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPHeader):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageHeaders):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::toSoupMessage):

2014-06-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use TileController on Windows
        https://bugs.webkit.org/show_bug.cgi?id=133895

        Reviewed by Tim Horton.

        * WebCore.vcxproj/WebCore.vcxproj: Add Tiled Drawing files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * platform/graphics/TiledBacking.h: No longer Cocoa-only.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): Windows
        now uses the same layer type as Mac.
        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::takeLayerWithSize): Use nullptr
        rather than nil for C++ code.
        * platform/graphics/ca/PlatformCALayer.cpp:
        * platform/graphics/ca/PlatformCALayer.h: Expose necessary
        drawing functions for Windows port.
        * platform/graphics/ca/TileController.cpp: Remove unneeded
        header include for WebLayer.
        * platform/graphics/ca/TileCoverageMap.cpp: Correct #includes.
        * platform/graphics/ca/TileGrid.h: Not just for Cococa.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Remove
        extra whitespace.
        * platform/graphics/ca/mac/PlatformCALayerMac.h: Remove
        unneeded overload.
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::collectRectsToPaint): Added stub.
        (PlatformCALayer::drawLayerContents): Added.
        (PlatformCALayer::frameForLayer): Added.
        (PlatformCALayerWin::PlatformCALayerWin): Remove unneeded
        assert now that we support these types. Add TileController
        support.
        (PlatformCALayerWin::setEdgeAntialiasingMask): Added.
        (printLayer): Add newly-supported tile types.
        (PlatformCALayerWin::tiledBacking): Added.
        * platform/graphics/ca/win/PlatformCALayerWin.h: Update to
        support Tiled Drawing.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::PlatformCALayerWinInternal): Update to
        recognize newly-supported layer types.
        (PlatformCALayerWinInternal::setNeedsDisplay): Ditto.
        (PlatformCALayerWinInternal::setSublayers): Ditto.
        (PlatformCALayerWinInternal::getSublayers): Ditto.
        (PlatformCALayerWinInternal::removeAllSublayers): Ditto.
        (PlatformCALayerWinInternal::insertSublayer): Ditto.
        (PlatformCALayerWinInternal::sublayerCount): Ditto.
        (PlatformCALayerWinInternal::indexOfSublayer): Ditto.
        (PlatformCALayerWinInternal::sublayerAtIndex): Ditto.
        (PlatformCALayerWinInternal::setBounds): Ditto.
        (PlatformCALayerWinInternal::setFrame): Ditto.
        (PlatformCALayerWinInternal::drawTile): Ditto.
        (PlatformCALayerWinInternal::createTileController): Ditto.
        (PlatformCALayerWinInternal::tiledBacking): Ditto.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h: Update to use
        TileController.

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

        Remove unnecessary style invalidation in RenderTextControl::styleDidChange().
        <https://webkit.org/b/133949>

        This explicit invalidation of the text control's inner text element
        was hacked in to fix an editing test back in 2011, long before lazy
        render tree construction.

        It should be safe to remove, since doing so doesn't affect any tests.

        Reviewed by Antti Koivisto.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):

2014-06-16  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):

2014-06-16  Anders Carlsson  <andersca@apple.com>

        Accept-Ranges is not specific to GStreamer.

        * platform/network/HTTPHeaderNames.in:

2014-06-16  Anders Carlsson  <andersca@apple.com>

        Don't use AtomicString in HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=133957
        <rdar://problem/15256572>

        Reviewed by Andreas Kling.

        Use the string data that comes from the generated HTTPHeaderNames.cpp file
        for sharing header name data instead. In the future we can do something more fancy where
        we'll hash the HTTPHeaderName enum directly, but this is good enough for now.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        * WebCore.exp.in:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForHeaders):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::parseHeader):
        * loader/cache/CachedResource.cpp:
        (WebCore::shouldUpdateHeaderAfterRevalidation):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        (WebCore::internHTTPHeaderNameString):
        (WebCore::HTTPHeaderMap::get):
        (WebCore::HTTPHeaderMap::set):
        (WebCore::HTTPHeaderMap::add):
        (WebCore::CaseFoldingCStringTranslator::hash): Deleted.
        (WebCore::CaseFoldingCStringTranslator::equal): Deleted.
        (WebCore::CaseFoldingCStringTranslator::translate): Deleted.
        * platform/network/HTTPHeaderMap.h:
        * platform/network/HTTPHeaderNames.in:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPHeader):
        * platform/network/HTTPParsers.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::httpHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::addHTTPHeaderField):
        * platform/network/ResourceResponseBase.h:
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::setRequestHeaderInternal):
        (WebCore::XMLHttpRequest::getRequestHeader):
        (WebCore::XMLHttpRequest::getResponseHeader):
        * xml/XMLHttpRequest.h:

2014-06-16  Chris Fleizach  <cfleizach@apple.com>

        AX: Safari crashed once in WebCore::AccessibilityObject::ariaIsHidden
        https://bugs.webkit.org/show_bug.cgi?id=133825

        Reviewed by Enrica Casucci.

        Sometimes asking accessibilityIsIgnored() will cause a newObject to be detached immediately after its created. 
        The creation function holds a reference with RefPtr as long as it lives, but when that method returns, the object goes away.

        With that out of the way, I saw the same backtrace lead to updateLayoutIgnorePendingStylesheets being called while still inLayout.

        I tried my best but could not create a reproducible layout test.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):

2014-06-16  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Add more GStreamer-specific header names that are required
        after changes in r170021, fixing the build for ports using GStreamer.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived):
        * platform/network/HTTPHeaderNames.in:

2014-06-16  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::AXObjectCache::textChanged
        https://bugs.webkit.org/show_bug.cgi?id=133873

        Reviewed by Enrica Casucci.

        This looks like a very similar problem to 
        https://bugs.webkit.org/show_bug.cgi?id=133825

        The object is being created and deallocated almost right away because calling accessibilityIsIgnored triggers
        a deferred layout that invalidates the associated render element.

        Despite my best efforts, I could not come up with a way to reproduce this in a layout test.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):

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

        Change ResourceRequestBase::addHTTPHeaderFields to setHTTPHeaderFields instead
        https://bugs.webkit.org/show_bug.cgi?id=133925

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setHTTPHeaderFields):
        (WebCore::ResourceRequestBase::addHTTPHeaderFields): Deleted.
        * platform/network/ResourceRequestBase.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::handlePost):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2014-06-16  Jeongeun Kim  <je_julie.kim@samsung.com>

        Use references instead of pointers to RenderBlock in RenderObject::enclosingBox().
        https://bugs.webkit.org/show_bug.cgi?id=133902

        Reviewed by Andreas Kling.

        Just a straightforward conversion from pointers to references.

        No new tests, no behavior change.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMHTMLElement structuralComplexityContribution]):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRendererFragments):
        * page/EventHandler.cpp:
        (WebCore::scrollNode):
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::logicalScrollOverflow):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBox.cpp:
        (WebCore::computeInlineStaticDistance):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::computedRegionRangeForBox):
        (WebCore::RenderFlowThread::objectShouldFragmentInFlowRegion):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingBox): Removed FIXME comment
        * rendering/RenderObject.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::owningRenderer):

2014-06-16  Anders Carlsson  <andersca@apple.com>

        Use HTTPHeaderName in more places
        https://bugs.webkit.org/show_bug.cgi?id=133948

        Reviewed by Andreas Kling.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::shouldIgnoreHeaderForCacheReuse):
        * platform/network/HTTPHeaderNames.in:
        * xml/XMLHttpRequest.cpp:
        (WebCore::isSetCookieHeader):
        (WebCore::isForbiddenRequestHeader):
        (WebCore::XMLHttpRequest::isAllowedHTTPHeader):
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData): Deleted.
        (WebCore::staticData): Deleted.

2014-06-16  Anders Carlsson  <andersca@apple.com>

        Add HTTPHeaderName overloads on ResourceResponseBase
        https://bugs.webkit.org/show_bug.cgi?id=133946

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::lastModified):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::didBeginDocument):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::canUseSheet):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::mimeType):
        * platform/network/HTTPHeaderNames.in:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        * platform/network/ResourceResponseBase.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::responseMIMEType):
        (WebCore::XMLHttpRequest::didReceiveResponse):

2014-04-05  Antonio Gomes  <a1.gomes@sisa.samsung.com>

        [Bindings] "nullable" sequence support is incomplete (i.e. sequence<NativeType>?)
        https://bugs.webkit.org/show_bug.cgi?id=131240

        Reviewed by Darin Adler.

        Nullable sequences are not fully supported in WebKit's
        code generator machinery. Although the generated code
        does add "is nullable" check to the evaluation condition
        (i.e. if (arg.isNull() || ...)), when the JSValue
        that holds a "null" JSObject is actually to be "converted"
        to a native Vector<T>, it fails.

        The reason for the failure is in JSDOMBindings::toNativeArray.
        This method verifies that JSValue does not hold a "non-null"
        object, and it bails out.
        Analogly, the "ref ptr" variant of this method (toRefPtrNativeArray)
        does support nullables.

        Patch fixes it be checking for a "null" JSValue check before hand.

        Tests: Binding tests updated.

        * bindings/js/JSDOMBinding.h:
        (WebCore::toNativeArray):
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * Modules/websocket/WebSocket.idl:
        Removed one overload ctor now that
        we can use nullable sequences.

2014-06-16  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Occasional image corruption after seeking
        https://bugs.webkit.org/show_bug.cgi?id=133879

        Reviewed by Eric Carlson.

        Change the order of operations for seeks: change the current time of the AVSampleBufferRenderSynchronizer
        before flushing and appending non-displaying samples.

        Rather than having a single function which retrieves the fast seek time and then seeks, split this out
        into two functions: one which gets the fast seek time, and one which seeks. (The later of course already
        exists: seekToTime()).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::fastSeekTimeForMediaTime): Renamed from seekToTime()
        (WebCore::MediaSourcePrivateAVFObjC::seekToTime): Deleted.

2014-06-16  Zan Dobersek  <zdobersek@igalia.com>

        Have ScriptExecutionContext::Task functions take in a ScriptExecutionContext reference
        https://bugs.webkit.org/show_bug.cgi?id=133795

        Reviewed by Andreas Kling.

        The pointer to the ScriptExecutionContext object that is passed to the C++11 lambdas or
        helper functions wrapped in ScriptExecutionContext::Task is never null, so that parameter
        should be a reference instead.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::~Database):
        (WebCore::Database::runTransaction):
        (WebCore::Database::scheduleTransactionCallback):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasksCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks): Dereference the
        member variable that holds a never-null pointer to the ScriptExecutionContext. This should
        similarly be a reference.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnectCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryDataCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmountCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshakeCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageErrorCallback):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerGlobalScopeDidSend):
        (WebCore::workerGlobalScopeDidGetBufferedAmount):
        (WebCore::workerGlobalScopeDidConnect):
        (WebCore::workerGlobalScopeDidReceiveMessage):
        (WebCore::workerGlobalScopeDidReceiveBinaryData):
        (WebCore::workerGlobalScopeDidUpdateBufferedAmount):
        (WebCore::workerGlobalScopeDidStartClosingHandshake):
        (WebCore::workerGlobalScopeDidClose):
        (WebCore::workerGlobalScopeDidReceiveMessageError):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadConnect):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSend):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendBlob):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadBufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadClose):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadFail):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadDestroy):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSuspend):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadResume):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * bindings/js/JSCallbackData.h:
        (WebCore::DeleteCallbackDataTask::DeleteCallbackDataTask):
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask):
        * dom/Document.cpp:
        (WebCore::Document::postTask):
        (WebCore::Document::pendingTasksTimerFired):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::processMessagePortMessagesSoon):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::Task::performTask):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
        * dom/StringCallback.cpp:
        (WebCore::StringCallback::scheduleCallback):
        * fileapi/FileReader.cpp:
        (WebCore::delayedAbort):
        (WebCore::FileReader::abort):
        (WebCore::FileReader::doAbort): Deleted.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadDestroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCancel):
        (WebCore::workerGlobalScopeDidSendData):
        (WebCore::workerGlobalScopeDidReceiveResponse):
        (WebCore::workerGlobalScopeDidReceiveData):
        (WebCore::workerGlobalScopeDidFinishLoading):
        (WebCore::workerGlobalScopeDidFail):
        (WebCore::workerGlobalScopeDidFailAccessControlCheck):
        (WebCore::workerGlobalScopeDidFailRedirectCheck):
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::crossThreadRemoveRequestFromCache):
        (WebCore::MemoryCache::crossThreadRemoveRequestFromSessionCaches):
        * loader/cache/MemoryCache.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::enqueueEvent):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::close):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        (WebCore::WorkerMessagingProxy::connectToInspector):
        (WebCore::WorkerMessagingProxy::disconnectFromInspector):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeDestroyed):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeClosed):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        (WebCore::WorkerMessagingProxy::confirmMessageFromWorkerObject):
        (WebCore::WorkerMessagingProxy::reportPendingActivity):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::Task::performTask):
        * workers/WorkerScriptLoader.cpp:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):

2014-06-16  Zan Dobersek  <zdobersek@igalia.com>

        Page::findStringMatchingRanges() should take Vector<RefPtr<Range>> by reference instead of pointer
        https://bugs.webkit.org/show_bug.cgi?id=133677

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Update the changed symbol.
        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges): The method expects the matchRanges parameter to be non-null,
        so it should take in that parameter by reference instead of pointer.
        * page/Page.h:

2014-06-16  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r168046): Incorrect layout for multicol spanners when moving from one thread to another
        https://bugs.webkit.org/show_bug.cgi?id=133589

        Reviewed by Antti Koivisto.

        When a spanner is moved from a multicol thread to another, its placeholder
        must be properly repositioned.

        Test: fast/multicol/newmulticol/spanner-crash.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):

2014-06-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Missing 'selection-changed' signal when navigating a combo box with keyboard
        https://bugs.webkit.org/show_bug.cgi?id=133512

        Reviewed by Chris Fleizach.

        Make sure that AccessibilityMenuList objects update their active
        option when it changes, which will send a platform-dependent
        accessibility-related notification when needed.

        Test: accessibility/combo-box-collapsed-selection-changed.html

        * rendering/RenderMenuList.cpp:
        (RenderMenuList::didUpdateActiveOption): Keep the out-of-bounds
        check for the index passed but don't avoid updating the option for
        the associated AccessibilityMenuList object if the selected list
        item does not have a renderer, because that could be the case for
        cases where the popup (and its elements) would be rendered in the
        UI Process (e.g. GTK+ port uses GtkMenu and GtkMenuItem for that).

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::didUpdateActiveOption): Ensure
        that the AccessibilityMenuListPopup object for a given menu list
        has accessibility children before updating its active option.

2014-06-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r170003.
        https://bugs.webkit.org/show_bug.cgi?id=133938

        This patch broke GTK build (Requested by kczech on #webkit).

        Reverted changeset:

        "[EFL] Platform support for WebSpeech feature."
        https://bugs.webkit.org/show_bug.cgi?id=116438
        http://trac.webkit.org/changeset/170003

2014-06-16  Frédéric Wang  <fred.wang@free.fr>

        Draw radicals with glyphs for better rendering.
        https://bugs.webkit.org/show_bug.cgi?id=119038

        Unreviewed ASSERT fix.

        * rendering/mathml/RenderMathMLRoot.h:

2014-06-16  Frédéric Wang  <fred.wang@free.fr>

        Draw radicals with glyphs for better rendering
        https://bugs.webkit.org/show_bug.cgi?id=119038

        Reviewed by Chris Fleizach.

        We rewrite RenderMathMLRoot in order to fix bugs with SVG transforms and dynamic modification of children and allow drawing with an OpenType MATH table.
        The drawing of the radical sign (without the top bar) is now moved to a RenderMathMLRadicalOperator class inheriting from RenderMathMLOperator.
        This class fallbacks to the original drawing with graphic primitives if an OpenType MATH table is not available.

        Tests: mathml/opentype/roots-LatinModern.html
               mathml/presentation/mroot-transform.html

        * CMakeLists.txt: add files to build system.
        * WebCore.vcxproj/WebCore.vcxproj: ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto
        * css/mathml.css: remove rules for msqrt/mroot. The "script level" in mroot is not incremented by 2 as specified in the spec.
        (math, mrow, mfenced, merror, mphantom, mstyle, menclose):
        (mroot > *:last-child):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose): Deleted.
        (msqrt > *): Deleted.
        (mroot): Deleted. This rule was causing bug 126516.
        (mroot > * + *): Deleted.
        * rendering/RenderObject.h: Add two new isRenderMathML* functions for dynamic casting.
        (WebCore::RenderObject::isRenderMathMLRadicalOperator):
        (WebCore::RenderObject::isRenderMathMLRootWrapper):
        * rendering/mathml/RenderMathMLOperator.cpp: Accept a set of operator dictionary flags, all disabled by default. This is to allow anonymous radicas, which don't have any flag.
        isFencedOperator() is now replaced with the more general isAnonymous() since we allow anonymous radical operator fors msqrt/mroot.
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
        (WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
        (WebCore::RenderMathMLOperator::SetOperatorProperties):
        (WebCore::RenderMathMLOperator::updateTokenContent):
        * rendering/mathml/RenderMathMLOperator.h: Allow class to be overriden, redefine the anonymous constructor, remove isFencedOperator().
        * rendering/mathml/RenderMathMLRadicalOperator.cpp: Added.
        (WebCore::RenderMathMLRadicalOperator::RenderMathMLRadicalOperator):
        (WebCore::RenderMathMLRadicalOperator::stretchTo):
        (WebCore::RenderMathMLRadicalOperator::SetOperatorProperties):
        (WebCore::RenderMathMLRadicalOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRadicalOperator::computeLogicalHeight):
        (WebCore::RenderMathMLRadicalOperator::paint):
        (WebCore::RenderMathMLRadicalOperator::trailingSpaceError):
        * rendering/mathml/RenderMathMLRadicalOperator.h: Added.
        * rendering/mathml/RenderMathMLRoot.cpp: Rewritten. Some parts to use graphic primitives are moved to RenderMathMLRadicalOperator.cpp.
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        (WebCore::RenderMathMLRoot::baseWrapper):
        (WebCore::RenderMathMLRoot::radicalWrapper):
        (WebCore::RenderMathMLRoot::indexWrapper):
        (WebCore::RenderMathMLRoot::radicalOperator):
        (WebCore::RenderMathMLRoot::restructureWrappers):
        (WebCore::RenderMathMLRoot::addChild):
        (WebCore::RenderMathMLRoot::styleDidChange):
        (WebCore::RenderMathMLRoot::updateFromElement):
        (WebCore::RenderMathMLRoot::updateStyle):
        (WebCore::RenderMathMLRoot::firstLineBaseline):
        (WebCore::RenderMathMLRoot::layout):
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRootWrapper::createAnonymousWrapper):
        (WebCore::RenderMathMLRootWrapper::removeChildWithoutRestructuring):
        (WebCore::RenderMathMLRootWrapper::removeChild):
        (WebCore::RenderMathMLRoot::paddingTop): Deleted.
        (WebCore::RenderMathMLRoot::paddingBottom): Deleted.
        (WebCore::RenderMathMLRoot::paddingLeft): Deleted.
        (WebCore::RenderMathMLRoot::paddingRight): Deleted.
        (WebCore::RenderMathMLRoot::paddingBefore): Deleted.
        (WebCore::RenderMathMLRoot::paddingAfter): Deleted.
        (WebCore::RenderMathMLRoot::paddingStart): Deleted.
        (WebCore::RenderMathMLRoot::paddingEnd): Deleted.
        (WebCore::RenderMathMLRoot::index): Deleted.
        * rendering/mathml/RenderMathMLRoot.h: Rewritten.
        (WebCore::RenderMathMLRootWrapper::RenderMathMLRootWrapper):

2014-06-16  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Platform support for WebSpeech feature.
        https://bugs.webkit.org/show_bug.cgi?id=116438

        Reviewed by Gyuyoung Kim.

        It's a first step of adding support for Speech Synthesis in EFL port.
        Just stub out required API and support for compilation.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/efl/PlatformSpeechSynthesisProviderEfl.cpp: Added.
        (WebCore::PlatformSpeechSynthesisProviderEfl::PlatformSpeechSynthesisProviderEfl):
        (WebCore::PlatformSpeechSynthesisProviderEfl::~PlatformSpeechSynthesisProviderEfl):
        (WebCore::PlatformSpeechSynthesisProviderEfl::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesisProviderEfl::pause):
        (WebCore::PlatformSpeechSynthesisProviderEfl::resume):
        (WebCore::PlatformSpeechSynthesisProviderEfl::speak):
        (WebCore::PlatformSpeechSynthesisProviderEfl::cancel):
        * platform/efl/PlatformSpeechSynthesisProviderEfl.h: Added.
        * platform/efl/PlatformSpeechSynthesizerEfl.cpp: Added.
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::cancel):

2014-06-15  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: add support for the :lang() pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=133913

        Reviewed by Andreas Kling.

        The selector is already very expensive to begin with, just implement it with
        a function call.

        It is also done after every other filter since it is so inefficient.

        Tests: fast/selectors/lang-conflict.html
               fast/selectors/lang-empty.html
               fast/selectors/lang-specificity-xml.xhtml
               fast/selectors/lang-specificity.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):
        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        * dom/ElementData.cpp:
        (WebCore::ElementData::findLanguageAttribute):
        * dom/ElementData.h:

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

        Add an autorelease() member function to RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=133929

        Reviewed by Dan Bernstein.

        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMHTMLImageElement dataRepresentation:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

2014-06-14  Anders Carlsson  <andersca@apple.com>

        Adopt HTTPHeaderName in ResourceResponseBase
        https://bugs.webkit.org/show_bug.cgi?id=133919

        Reviewed by Sam Weinig.

        * platform/network/HTTPHeaderNames.in:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::updateHeaderParsedState):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::addHTTPHeaderField):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::hasCacheValidatorFields):
        (WebCore::parseDateValueInHeader):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::isAttachment):
        * platform/network/ResourceResponseBase.h:

2014-06-14  Anders Carlsson  <andersca@apple.com>

        Simplify ResourceRequest constructors
        https://bugs.webkit.org/show_bug.cgi?id=133911

        Reviewed by Sam Weinig.

        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):

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

        Fix the ARM64 build

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::addFlagsToElementStyleFromContext):

2014-06-13  Sam Weinig  <sam@webkit.org>

        Store DOM constants directly in the JS object rather than jumping through a custom accessor
        https://bugs.webkit.org/show_bug.cgi?id=133898

        Reviewed by Oliver Hunt.

        Instead of implementing constants as custom accessors that just happen to return a value,
        we now store the constant directly in the HashTableValue array (where the GetValueFunc used
        to be). 
        
        - For the case where the constant is accessed via the static table (still in use for instances 
          and some prototypes), the static lookup function will set the value on the property slot,
          instead of passing a function pointer.
        - For the case where the constant is eagerly reified (most prototypes and all constructors) the
          constant is put directly in the object.

        In micro benchmarks this looks to be around a 4x speedup on the use of DOM constants.

        This also removes support for constant strings in IDL, which we had no uses of.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        Remove code to generate forward declaration of constant accessor functions.

        (GenerateImplementation):
        Remove code to generate implementation of constant accessor functions.

        (GenerateHashTableValueArray):
        Plant the constant directly in the value array.

        * bindings/scripts/IDLParser.pm:
        (parseConstValue):
        Remove support for constant strings.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        Update test results.

2014-06-14  Anders Carlsson  <andersca@apple.com>

        Simplify Document::processHttpEquiv
        https://bugs.webkit.org/show_bug.cgi?id=133910

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * platform/network/HTTPHeaderNames.in:

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

        GCController should return FastMalloc memory to the system.
        <https://webkit.org/b/133884>

        Reviewed by Anders Carlsson.

        Speculative test fix; I'm kinda suspecting that some tests are reporting
        more memory used because we did a GC but didn't get around to returning
        free pages to the system yet.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow):

2014-06-14  Zan Dobersek  <zdobersek@igalia.com>

        Generate HTTP header names that are required by WebKitWebSrc
        https://bugs.webkit.org/show_bug.cgi?id=133906

        Reviewed by Anders Carlsson.

        WebKitWebSrc implementation sets icy-metadata and transferMode.dlna HTTP headers
        on ResourceRequest objects. The two headers are added to HTTPHeaderNames.in, and
        a small tweak is added to the generator script to avoid the dot in the second
        header's name (which would otherwise generate invalid C++).

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        * platform/network/HTTPHeaderNames.in:
        * platform/network/create-http-header-name-table:

2014-06-14  Anders Carlsson  <andersca@apple.com>

        Replace some uses of ResourceRequestBase::addHTTPHeaderField with setHTTPHeaderField
        https://bugs.webkit.org/show_bug.cgi?id=133907

        Reviewed by Andreas Kling.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeRequest):
        * platform/network/HTTPHeaderNames.in:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::applyBasicAuthorizationHeader):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::applyBasicAuthorizationHeader):

2014-06-13  Anders Carlsson  <andersca@apple.com>

        Add a ResourceRequestBase::setHTTPHeaderField overload that takes a HTTPHeaderName
        https://bugs.webkit.org/show_bug.cgi?id=133881

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * page/EventSource.cpp:
        (WebCore::EventSource::connect):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::doStart):
        * platform/network/HTTPHeaderNames.in:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::httpHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::httpContentType):
        (WebCore::ResourceRequestBase::setHTTPContentType):
        (WebCore::ResourceRequestBase::httpReferrer):
        (WebCore::ResourceRequestBase::setHTTPReferrer):
        (WebCore::ResourceRequestBase::httpOrigin):
        (WebCore::ResourceRequestBase::setHTTPOrigin):
        (WebCore::ResourceRequestBase::httpUserAgent):
        (WebCore::ResourceRequestBase::setHTTPUserAgent):
        (WebCore::ResourceRequestBase::httpAccept):
        (WebCore::ResourceRequestBase::setHTTPAccept):
        * platform/network/ResourceRequestBase.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):

2014-06-14  Simon Fraser  <simon.fraser@apple.com>

        Masks disappear when layers become tiled
        https://bugs.webkit.org/show_bug.cgi?id=133892
        <rdar://problem/17309793>

        Reviewed by Tim Horton.
        
        There were several problems with tiled mask layers.
        
        First, when a layer became tiled it failed to re-apply the platform layer
        for its mask; fixed by adding MaskLayerChanged to the set of flags in
        swapFromOrToTiledLayer().
        
        Secondly, in CA, a mask layer's superlayer is the layer which is it masking,
        so the if (oldLayer->superlayer())... code in swapFromOrToTiledLayer() would
        erroneously try to swap out a sublayer on the superlayer with the mask.
        
        Thirdly, the mask layer is updated after its host layer, but when the mask layer
        become tiled, there was no code that updated the mask platform layer on its
        host layer. Fix by:
            1. setting a bit on a layer to note that it's being used as a mask.
            2. setting the parent of such a layer to its host layer (mimicking CA)
            3. when the mask becomes tiled, dirtying the MaskLayerChanged bit on
               its parent and adding a clause to commitLayerChangesAfterSublayers()
               to update the mask layer.
        
        Finally, ASSERTION FAILED: owningGraphicsLayer()->isCommittingChanges() would
        fire because we failed to set the m_isCommittingChanges flag while committing
        the mask layer. Fix by moving the TemporaryChange<bool> that sets this flag
        into commitLayerChangesBeforeSublayers() and commitLayerChangesAfterSublayers().
        
        Also used safe casts in more places in GraphicsLayerCA.

        Tests: compositing/masks/become-tiled-mask.html
               compositing/masks/cease-tiled-mask.html
               compositing/masks/tiled-mask.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::removeFromParent):
        (WebCore::GraphicsLayer::setMaskLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setIsMaskLayer):
        (WebCore::GraphicsLayer::isMaskLayer):
        (WebCore::GraphicsLayer::setMaskLayer): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::removeFromParent):
        (WebCore::GraphicsLayerCA::setMaskLayer):
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::commitLayerChangesAfterSublayers):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        (WebCore::GraphicsLayerCA::replicatedLayerRoot):
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::propagateLayerChangeToReplicas):
        (WebCore::GraphicsLayerCA::fetchCloneLayers):

2014-06-14  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile errors related to http headers.
        https://bugs.webkit.org/show_bug.cgi?id=133901

        Reviewed by Brent Fulgham.

        Http headers should now be specified with an enum, not a string.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::didReceiveResponse):

2014-06-14  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r169960.

        * platform/graphics/ca/PlatformCALayer.cpp: Add missing include
        for snprintf on Windows.

2014-06-14  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r169943 and r169946.

        * platform/network/HTTPHeaderMap.h: Removed maybe accidental deletion of the only one add function.
        * platform/network/HTTPHeaderNames.in: Added Sec-WebSocket-Key.

2014-06-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r169963.
        https://bugs.webkit.org/show_bug.cgi?id=133899

        Assertion in mathml/roots-removeChild.html (Requested by fredw
        on #webkit).

        Reverted changeset:

        "Draw radicals with glyphs for better rendering"
        https://bugs.webkit.org/show_bug.cgi?id=119038
        http://trac.webkit.org/changeset/169963

2014-06-14  Frédéric Wang  <fred.wang@free.fr>

        Draw radicals with glyphs for better rendering
        https://bugs.webkit.org/show_bug.cgi?id=119038

        Reviewed by Chris Fleizach.

        We rewrite RenderMathMLRoot in order to fix bugs with SVG transforms and dynamic modification of children and allow drawing with an OpenType MATH table.
        The drawing of the radical sign (without the top bar) is now moved to a RenderMathMLRadicalOperator class inheriting from RenderMathMLOperator.
        This class fallbacks to the original drawing with graphic primitives if an OpenType MATH table is not available.

        Tests: mathml/opentype/roots-LatinModern.html
               mathml/presentation/mroot-transform.html

        * CMakeLists.txt: add files to build system.
        * WebCore.vcxproj/WebCore.vcxproj: ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto
        * css/mathml.css: remove rules for msqrt/mroot. The "script level" in mroot is not incremented by 2 as specified in the spec.
        (math, mrow, mfenced, merror, mphantom, mstyle, menclose):
        (mroot > *:last-child):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose): Deleted.
        (msqrt > *): Deleted.
        (mroot): Deleted. This rule was causing bug 126516.
        (mroot > * + *): Deleted.
        * rendering/RenderObject.h: Add two new isRenderMathML* functions for dynamic casting.
        (WebCore::RenderObject::isRenderMathMLRadicalOperator):
        (WebCore::RenderObject::isRenderMathMLRootWrapper):
        * rendering/mathml/RenderMathMLOperator.cpp: Accept a set of operator dictionary flags, all disabled by default. This is to allow anonymous radicas, which don't have any flag.
        isFencedOperator() is now replaced with the more general isAnonymous() since we allow anonymous radical operator fors msqrt/mroot.
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
        (WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
        (WebCore::RenderMathMLOperator::SetOperatorProperties):
        (WebCore::RenderMathMLOperator::updateTokenContent):
        * rendering/mathml/RenderMathMLOperator.h: Allow class to be overriden, redefine the anonymous constructor, remove isFencedOperator().
        * rendering/mathml/RenderMathMLRadicalOperator.cpp: Added.
        (WebCore::RenderMathMLRadicalOperator::RenderMathMLRadicalOperator):
        (WebCore::RenderMathMLRadicalOperator::stretchTo):
        (WebCore::RenderMathMLRadicalOperator::SetOperatorProperties):
        (WebCore::RenderMathMLRadicalOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRadicalOperator::computeLogicalHeight):
        (WebCore::RenderMathMLRadicalOperator::paint):
        (WebCore::RenderMathMLRadicalOperator::trailingSpaceError):
        * rendering/mathml/RenderMathMLRadicalOperator.h: Added.
        * rendering/mathml/RenderMathMLRoot.cpp: Rewritten. Some parts to use graphic primitives are moved to RenderMathMLRadicalOperator.cpp.
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        (WebCore::RenderMathMLRoot::baseWrapper):
        (WebCore::RenderMathMLRoot::radicalWrapper):
        (WebCore::RenderMathMLRoot::indexWrapper):
        (WebCore::RenderMathMLRoot::radicalOperator):
        (WebCore::RenderMathMLRoot::restructureWrappers):
        (WebCore::RenderMathMLRoot::addChild):
        (WebCore::RenderMathMLRoot::styleDidChange):
        (WebCore::RenderMathMLRoot::updateFromElement):
        (WebCore::RenderMathMLRoot::updateStyle):
        (WebCore::RenderMathMLRoot::firstLineBaseline):
        (WebCore::RenderMathMLRoot::layout):
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRootWrapper::createAnonymousWrapper):
        (WebCore::RenderMathMLRootWrapper::removeChildWithoutRestructuring):
        (WebCore::RenderMathMLRootWrapper::removeChild):
        (WebCore::RenderMathMLRoot::paddingTop): Deleted.
        (WebCore::RenderMathMLRoot::paddingBottom): Deleted.
        (WebCore::RenderMathMLRoot::paddingLeft): Deleted.
        (WebCore::RenderMathMLRoot::paddingRight): Deleted.
        (WebCore::RenderMathMLRoot::paddingBefore): Deleted.
        (WebCore::RenderMathMLRoot::paddingAfter): Deleted.
        (WebCore::RenderMathMLRoot::paddingStart): Deleted.
        (WebCore::RenderMathMLRoot::paddingEnd): Deleted.
        (WebCore::RenderMathMLRoot::index): Deleted.
        * rendering/mathml/RenderMathMLRoot.h: Rewritten.
        (WebCore::RenderMathMLRootWrapper::RenderMathMLRootWrapper):

2014-06-13  Brent Fulgham  <bfulgham@apple.com>

        Move utility functions from WebLayer to PlatformCALayer
        https://bugs.webkit.org/show_bug.cgi?id=133887
        <rdar://problem/17309622>

        Reviewed by Simon Fraser.

        Move some utility functions from WebLayer.h/.mm to PlatformCALayer.
        Provide ObjC implementation in PlatformCALayerMac. A future patch will
        provide corresponding Windows versions.

        * WebCore.exp.in:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::blankPixelCountForTiles):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerPaintContents):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::collectRectsToPaint):
        (PlatformCALayer::drawLayerContents):
        (PlatformCALayer::frameForLayer):
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]):
        (WebCore::collectRectsToPaint): Deleted.
        (WebCore::drawLayerContents): Deleted.
        (WebCore::drawRepaintIndicator): Deleted.
        (WebCore::frameForLayer): Deleted.

2014-06-13  Alex Christensen  <achristensen@webkit.org>

        Unreviewed disabling css jit on armv7.  It's not quite ready yet.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        Removed extra comma.

2014-06-13  Alex Christensen  <achristensen@webkit.org>

        Make css jit compile on armv7.
        https://bugs.webkit.org/show_bug.cgi?id=133889

        Reviewed by Benjamin Poulain.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::moduloHelper):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        Implement modulo using a function call for now.

2014-06-13  Anders Carlsson  <andersca@apple.com>

        Use the callOnMainThread version that takes an std::function in BlobResourceHandle::start()
        https://bugs.webkit.org/show_bug.cgi?id=133886

        Reviewed by Andreas Kling.

        Also replace a couple of NSAutoreleasePools with @autoreleasepool and an OwnPtr with an std::unique_ptr.

        * page/scrolling/mac/ScrollingThreadMac.mm:
        (WebCore::ScrollingThread::threadRunLoopSourceCallback):
        * platform/mac/SharedTimerMac.mm:
        (WebCore::PowerObserver::PowerObserver):
        (WebCore::timerFired):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::PowerObserver::create): Deleted.
        (WebCore::PowerObserver::didReceiveSystemPowerNotification): Deleted.
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::start):
        (WebCore::delayedStartBlobResourceHandle): Deleted.
        * platform/network/BlobResourceHandle.h:

2014-06-12  Sam Weinig  <sam@webkit.org>

        Constructors should eagerly reify their properties too
        https://bugs.webkit.org/show_bug.cgi?id=133822

        Reviewed by Andreas Kling.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDeclaration):
        Constructors should never need to use the lazy property HashTable, so we can just
        remove its getOwnPropertySlot completely.

        (ConstructorHasProperties):
        Add helper to determine if we need to reify any properties.

        (GenerateConstructorHelperMethods):
        Reify if needed, and remove the implementation of getOwnPropertySlot.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * 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/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/JS/JSreadonly.h:
        Update tests.

2014-06-13  Alex Christensen  <achristensen@webkit.org>

        Make css jit allocator smarter.
        https://bugs.webkit.org/show_bug.cgi?id=133834

        Reviewed by Benjamin Poulain.

        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::allocateRegister):
        (WebCore::RegisterAllocator::deallocateRegister):
        (WebCore::RegisterAllocator::reserveCalleeSavedRegisters):
        (WebCore::LocalRegister::LocalRegister):
        (WebCore::RegisterAllocator::RegisterAllocator):
        Use a Deque for the registers.  Allocate from the front and deallocate to the back to cycle the register usage.
        (WebCore::RegisterAllocator::allocateRegisterWithPreference):
        (WebCore::LocalRegisterWithPreference::LocalRegisterWithPreference):
        Added the ability to specify that we prefer a certain register if it is available while allocating.
        These functions always return a register.  It is just a different register than preferred if the preferred register is not available.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        Whenever we are allocating a register for the second argument, we should specify that we 
        prefer to have argumentGPR1 to reduce register swapping when preparing for a function call.
        This cannot be done for argumentGPR0 because elementAddressRegister is argumentGPR0 and it is always allocated.

2014-06-13  Jeremy Jones  <jeremyj@apple.com>

        set setUsesExternalPlaybackWhileExternalScreenIsActive based on fullscreen mode
        https://bugs.webkit.org/show_bug.cgi?id=133829

        Reviewed by Eric Carlson.

        When playing inline and external screen is active, don't use external playback.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        declare updateDisableExternalPlayback()
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        call updateDisableExternalPlayback when player is created
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        call updateDisableExternalPlayback when fullscreen mode changes
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback):
        update setUsesExternalPlaybackWhileExternalScreenIsActive based on fullscreen mode

2014-06-13  Brent Fulgham  <bfulgham@apple.com>

        Convert LayerPool and TileCoverageMap from ObjC to C++
        https://bugs.webkit.org/show_bug.cgi?id=133862
        <rdar://problem/17302883>

        Reviewed by Simon Fraser.

        This just moves two ObjC files from the mac subdirectory to the parent and
        revises the project to build them as C++.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/LayerPool.cpp: Copied from platform/graphics/ca/mac/LayerPool.mm.
        * platform/graphics/ca/LayerPool.h: Copied from platform/graphics/ca/mac/LayerPool.h.
        * platform/graphics/ca/TileCoverageMap.cpp: Copied from platform/graphics/ca/mac/TileCoverageMap.mm.
        * platform/graphics/ca/TileCoverageMap.h: Copied from platform/graphics/ca/mac/TileCoverageMap.h.
        * platform/graphics/ca/mac/LayerPool.h: Removed.
        * platform/graphics/ca/mac/LayerPool.mm: Removed.
        * platform/graphics/ca/mac/TileCoverageMap.h: Removed.
        * platform/graphics/ca/mac/TileCoverageMap.mm: Removed.

2014-06-13  Alex Christensen  <achristensen@webkit.org>

        Make css jit compile for armv7.
        https://bugs.webkit.org/show_bug.cgi?id=133596

        Reviewed by Benjamin Poulain.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::swapArguments):
        Implemented for ARM_THUMB2 and removed allocator hack.
        * cssjit/RegisterAllocator.h:
        Added list of ARM_THUMB2 general purpose registers.
        (WebCore::RegisterAllocator::isValidRegister):
        Added ARM register range and corrected ARM64 register range now that r15 is tempRegister.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        Return CannotCompile if compiling fails because of lack of registers.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateEpilogue):
        Implemented for ARM_THUMB2.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        Return false if the selector cannot be compiled because of lack of registers.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::addFlagsToElementStyleFromContext):
        Added code using 32-bit operations and used macro assembler for 64-bit operations.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        Implemented for APPLE_ARMV7S, where sdiv is not a template in the assembler.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributesMatching):
        Use addPtr instead of add64.

2014-06-13  Anders Carlsson  <andersca@apple.com>

        Add a HTTPHeaderMap::get overload that takes an HTTPHeaderName
        https://bugs.webkit.org/show_bug.cgi?id=133877

        Reviewed by Andreas Kling.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::serverWebSocketProtocol):
        (WebCore::WebSocketHandshake::serverSetCookie):
        (WebCore::WebSocketHandshake::serverSetCookie2):
        (WebCore::WebSocketHandshake::serverUpgrade):
        (WebCore::WebSocketHandshake::serverConnection):
        (WebCore::WebSocketHandshake::serverWebSocketAccept):
        * WebCore.exp.in:
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::get):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/HTTPHeaderNames.in:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::handlePost):

2014-06-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r169939.
        https://bugs.webkit.org/show_bug.cgi?id=133878

        This patch raises assertions on mac (Requested by fredw on
        #webkit).

        Reverted changeset:

        "Draw radicals with glyphs for better rendering"
        https://bugs.webkit.org/show_bug.cgi?id=119038
        http://trac.webkit.org/changeset/169939

2014-06-13  Anders Carlsson  <andersca@apple.com>

        Add a HTTPHeaderMap::set overload that takes a HTTPHeaderName
        https://bugs.webkit.org/show_bug.cgi?id=133874

        Reviewed by Tim Horton.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::set):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2014-06-13  Anders Carlsson  <andersca@apple.com>

        Add a HTTPHeaderMap::find overload that takes a HTTPHeaderName
        https://bugs.webkit.org/show_bug.cgi?id=133872

        Reviewed by Andreas Kling.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::get):
        (WebCore::HTTPHeaderMap::find):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/HTTPHeaderNames.in:

2014-06-13  Frédéric Wang  <fred.wang@free.fr>

        Draw radicals with glyphs for better rendering
        https://bugs.webkit.org/show_bug.cgi?id=119038

        Reviewed by Chris Fleizach.

        We rewrite RenderMathMLRoot in order to fix bugs with SVG transforms and dynamic modification of children and allow drawing with an OpenType MATH table.
        The drawing of the radical sign (without the top bar) is now moved to a RenderMathMLRadicalOperator class inheriting from RenderMathMLOperator.
        This class fallbacks to the original drawing with graphic primitives if an OpenType MATH table is not available.

        Tests: mathml/opentype/roots-LatinModern.html
               mathml/presentation/mroot-transform.html

        * CMakeLists.txt: add files to build system.
        * WebCore.vcxproj/WebCore.vcxproj: ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto
        * css/mathml.css: remove rules for msqrt/mroot. The "script level" in mroot is not incremented by 2 as specified in the spec.
        (math, mrow, mfenced, merror, mphantom, mstyle, menclose):
        (mroot > *:last-child):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose): Deleted.
        (msqrt > *): Deleted.
        (mroot): Deleted. This rule was causing bug 126516.
        (mroot > * + *): Deleted.
        * rendering/RenderObject.h: Add two new isRenderMathML* functions for dynamic casting.
        (WebCore::RenderObject::isRenderMathMLRadicalOperator):
        (WebCore::RenderObject::isRenderMathMLRootWrapper):
        * rendering/mathml/RenderMathMLOperator.cpp: Accept a set of operator dictionary flags, all disabled by default. This is to allow anonymous radicas, which don't have any flag.
        isFencedOperator() is now replaced with the more general isAnonymous() since we allow anonymous radical operator fors msqrt/mroot.
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
        (WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
        (WebCore::RenderMathMLOperator::SetOperatorProperties):
        (WebCore::RenderMathMLOperator::updateTokenContent):
        * rendering/mathml/RenderMathMLOperator.h: Allow class to be overriden, redefine the anonymous constructor, remove isFencedOperator().
        * rendering/mathml/RenderMathMLRadicalOperator.cpp: Added.
        (WebCore::RenderMathMLRadicalOperator::RenderMathMLRadicalOperator):
        (WebCore::RenderMathMLRadicalOperator::stretchTo):
        (WebCore::RenderMathMLRadicalOperator::SetOperatorProperties):
        (WebCore::RenderMathMLRadicalOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRadicalOperator::computeLogicalHeight):
        (WebCore::RenderMathMLRadicalOperator::paint):
        (WebCore::RenderMathMLRadicalOperator::trailingSpaceError):
        * rendering/mathml/RenderMathMLRadicalOperator.h: Added.
        * rendering/mathml/RenderMathMLRoot.cpp: Rewritten. Some parts to use graphic primitives are moved to RenderMathMLRadicalOperator.cpp.
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        (WebCore::RenderMathMLRoot::baseWrapper):
        (WebCore::RenderMathMLRoot::radicalWrapper):
        (WebCore::RenderMathMLRoot::indexWrapper):
        (WebCore::RenderMathMLRoot::radicalOperator):
        (WebCore::RenderMathMLRoot::restructureWrappers):
        (WebCore::RenderMathMLRoot::addChild):
        (WebCore::RenderMathMLRoot::styleDidChange):
        (WebCore::RenderMathMLRoot::updateFromElement):
        (WebCore::RenderMathMLRoot::updateStyle):
        (WebCore::RenderMathMLRoot::firstLineBaseline):
        (WebCore::RenderMathMLRoot::layout):
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRootWrapper::createAnonymousWrapper):
        (WebCore::RenderMathMLRootWrapper::removeChildWithoutRestructuring):
        (WebCore::RenderMathMLRootWrapper::removeChild):
        (WebCore::RenderMathMLRoot::paddingTop): Deleted.
        (WebCore::RenderMathMLRoot::paddingBottom): Deleted.
        (WebCore::RenderMathMLRoot::paddingLeft): Deleted.
        (WebCore::RenderMathMLRoot::paddingRight): Deleted.
        (WebCore::RenderMathMLRoot::paddingBefore): Deleted.
        (WebCore::RenderMathMLRoot::paddingAfter): Deleted.
        (WebCore::RenderMathMLRoot::paddingStart): Deleted.
        (WebCore::RenderMathMLRoot::paddingEnd): Deleted.
        (WebCore::RenderMathMLRoot::index): Deleted.
        * rendering/mathml/RenderMathMLRoot.h: Rewritten.
        (WebCore::RenderMathMLRootWrapper::RenderMathMLRootWrapper):

2014-06-12  Anders Carlsson  <andersca@apple.com>

        Add overloads of HTTPHeaderMap::find and remove that take enums
        https://bugs.webkit.org/show_bug.cgi?id=133823

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        Update symbols.

        * WebCore.xcodeproj/project.pbxproj:
        Make HTTPHeaderNames.h private.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::contains):
        Convert the enum value to a string and call the contains overload that takes a string.

        (WebCore::HTTPHeaderMap::remove):
        Convert the enum value to a string and call the remove overload that takes a string.

        * platform/network/HTTPHeaderMap.h:
        Add new overloads taking HTTPHeaderName and mark the versions taking string literals as deleted.

        * platform/network/HTTPHeaderNames.in:
        Add new header names.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::clearHTTPAuthorization):
        (WebCore::ResourceRequestBase::clearHTTPContentType):
        (WebCore::ResourceRequestBase::clearHTTPReferrer):
        (WebCore::ResourceRequestBase::clearHTTPOrigin):
        (WebCore::ResourceRequestBase::clearHTTPUserAgent):
        (WebCore::ResourceRequestBase::clearHTTPAccept):
        Update functions to use HTTPHeaderName enums.

        (WebCore::ResourceRequestBase::isConditional):
        (WebCore::ResourceRequestBase::makeUnconditional):
        Simplify these.

2014-06-13  Jarek Czekalski  <jarekczek@poczta.onet.pl>

        [ATK] Fix text inside "span" block in "a" block was not accessible.
        https://bugs.webkit.org/show_bug.cgi?id=132349

        Reviewed by Mario Sanchez Prada.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp: Add link role
          to the list of roles whose objects always expose atk_text interface.

2014-06-13  Alberto Garcia  <berto@igalia.com>

        [GTK] GLContextEGL.cpp: conflicting declaration 'typedef ptrdiff_t GLintptr'
        https://bugs.webkit.org/show_bug.cgi?id=133550

        Reviewed by Gustavo Noronha Silva.

        Cairo includes some definitions from GLX that conflict with the
        ones provided by our GLES2 headers (GLintptr, GLsizeiptr).

        Since GLContextEGL doesn't use any GLX functions we can safely
        disable the inclusion of those functions in that source file.

        * platform/graphics/egl/GLContextEGL.cpp:

2014-06-13  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Introduce an explicit type for resolved grid positions
        https://bugs.webkit.org/show_bug.cgi?id=131732

        Reviewed by Sergio Villar Senin.

        We were using simple size_t integers to represent resolved grid
        positions in our internal data structures. This change allows us to
        clarify the code, avoid potential off by one mistakes, and move the
        resolving code to a central place.

        A new class GridResolvedPosition has been created and the related
        methods have been moved there from RenderGrid.
        GridSpan is now defined by two GridResolvedPosition, so all the code
        using it has been modified to adapt it to GridResolvedPosition.

        No new tests as it is already covered by current tests
        (fast/css-grid-layout/).

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGridTemplateAreasValue.cpp:
        (WebCore::stringForPosition):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateAreasRow):
        * css/StyleResolver.cpp:
        (WebCore::createImplicitNamedGridLinesFromGridArea):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::insertItemIntoGrid):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::autoPlacementMajorAxisDirection):
        (WebCore::RenderGrid::autoPlacementMinorAxisDirection):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        (WebCore::RenderGrid::explicitGridColumnCount): Deleted.
        (WebCore::RenderGrid::explicitGridRowCount): Deleted.
        (WebCore::isColumnSide): Deleted.
        (WebCore::isStartSide): Deleted.
        (WebCore::RenderGrid::explicitGridSizeForSide): Deleted.
        (WebCore::RenderGrid::resolveGridPositionsFromAutoPlacementPosition): Deleted.
        (WebCore::gridLinesForSide): Deleted.
        (WebCore::implicitNamedGridLineForSide): Deleted.
        (WebCore::isNonExistentNamedLineOrArea): Deleted.
        (WebCore::RenderGrid::adjustGridPositionsFromStyle): Deleted.
        (WebCore::RenderGrid::resolveGridPositionsFromStyle): Deleted.
        (WebCore::RenderGrid::resolveNamedGridLinePositionFromStyle): Deleted.
        (WebCore::RenderGrid::resolveGridPositionFromStyle): Deleted.
        (WebCore::RenderGrid::resolveGridPositionAgainstOppositePosition): Deleted.
        (WebCore::RenderGrid::resolveNamedGridLinePositionAgainstOppositePosition): Deleted.
        (WebCore::firstNamedGridLineBeforePosition): Deleted.
        (WebCore::RenderGrid::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition): Deleted.
        (WebCore::RenderGrid::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition): Deleted.
        * rendering/RenderGrid.h:
        * rendering/style/GridCoordinate.h:
        (WebCore::GridSpan::GridSpan):
        (WebCore::GridSpan::operator==):
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::adjustGridPositionForRowEndColumnEndSide): Deleted.
        (WebCore::GridPosition::adjustGridPositionForSide): Deleted.
        * rendering/style/GridResolvedPosition.cpp: Added.
        (WebCore::isColumnSide):
        (WebCore::isStartSide):
        (WebCore::explicitGridSizeForSide):
        (WebCore::GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition):
        (WebCore::gridLinesForSide):
        (WebCore::implicitNamedGridLineForSide):
        (WebCore::isNonExistentNamedLineOrArea):
        (WebCore::GridResolvedPosition::adjustGridPositionsFromStyle):
        (WebCore::GridResolvedPosition::resolveGridPositionsFromStyle):
        (WebCore::GridResolvedPosition::resolveNamedGridLinePositionFromStyle):
        (WebCore::GridResolvedPosition::resolveGridPositionFromStyle):
        (WebCore::GridResolvedPosition::resolveGridPositionAgainstOppositePosition):
        (WebCore::GridResolvedPosition::resolveNamedGridLinePositionAgainstOppositePosition):
        (WebCore::firstNamedGridLineBeforePosition):
        (WebCore::GridResolvedPosition::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
        (WebCore::GridResolvedPosition::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
        * rendering/style/GridResolvedPosition.h: Added.
        (WebCore::GridResolvedPosition::adjustGridPositionForRowEndColumnEndSide):
        (WebCore::GridResolvedPosition::adjustGridPositionForSide):
        (WebCore::GridResolvedPosition::GridResolvedPosition):
        (WebCore::GridResolvedPosition::operator++):
        (WebCore::GridResolvedPosition::operator==):
        (WebCore::GridResolvedPosition::operator<):
        (WebCore::GridResolvedPosition::operator>):
        (WebCore::GridResolvedPosition::operator<=):
        (WebCore::GridResolvedPosition::operator>=):
        (WebCore::GridResolvedPosition::toInt):
        (WebCore::GridResolvedPosition::next):

2014-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove all deprecated API from GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=133728

        Reviewed by Martin Robinson.

        Remove all deprecated symbols from the GObject DOM bindings,
        keeping the deprecation infraestructure for future API breaks.

        * PlatformGTK.cmake: Remove WebKitDOMDeprecated files from the
        build.
        * bindings/gobject/WebKitDOMDeprecated.cpp: Removed.
        * bindings/gobject/WebKitDOMDeprecated.h: Removed.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Removed.
        * bindings/gobject/webkitdom.symbols: Updated to the current API.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Remove exceptions for deprecated API.
        (GetFunctionDeprecationInformation): Ditto.
        (GetEffectiveFunctionName): Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event): Deleted.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.symbols:
        * dom/Element.idl: Remove GObject exception.

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

        Subpixel rendering: Make <input type=> and <button> elements' decoration subpixel aware.
        https://bugs.webkit.org/show_bug.cgi?id=133812
        <rdar://problem/17286309>

        Reviewed by Simon Fraser.

        Enable <input type=> and <button> decoration painting on subpixel positions.
        The theme size is still integral, but its position is snapped to device pixels.
        Theme's label, the InlineTextBox is already subpixel position aware.
        webkit.org/b/132005 tracks the rest of the themes.

        Not testable.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::boundingBoxForQuads): Keep integral snapping for now.
        * platform/Theme.h:
        (WebCore::Theme::paint):
        (WebCore::Theme::inflateControlPaintRect):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::inflateRect):
        (WebCore::configureToggleButton):
        (WebCore::sharedRadioCell):
        (WebCore::sharedCheckboxCell):
        (WebCore::paintToggleButton):
        (WebCore::setUpButtonCell):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::paintStepper):
        (WebCore::ThemeMac::inflateControlPaintRect):
        (WebCore::ThemeMac::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addVisualOverflowFromTheme): Keep integral snapping for now.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme): Keep integral snapping for now.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::adjustRepaintRect):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):

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

        [Win] Avoid fork bomb during build
        https://bugs.webkit.org/show_bug.cgi?id=133837
        <rdar://problem/17296034>

        Reviewed by Tim Horton.

        * WebCore.vcxproj/build-generated-files.sh: Use a reasonable
        default value when the 'num-cpus' script is not available.

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

        Add support for thread/WorkQueue QoS
        https://bugs.webkit.org/show_bug.cgi?id=130688

        Reviewed by Anders Carlson & Simon Fraser.

        WebCore's ScrollingThread should be UserInteractive.

        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::threadCallback):
            - ScrollingThread should be UserInteractive

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

        [Mac] Build fix after r169919.

        * WebCore.xcodeproj/project.pbxproj: The 'TileController.h' file must be a private header.

2014-06-12  Andy Estes  <aestes@apple.com>

        [Mac] Speculative build fix after r169921.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers):

2014-06-12  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Stop observing the sample buffer renderers when destroying them.
        https://bugs.webkit.org/show_bug.cgi?id=133831

        Reviewed by Beth Dakin.

        Release our retain on our AVSampleBufferDisplayLayer and AVSampleBufferAudioRenderer by stopping
        our observation of its properties when removing them from the SourceBufferPrivateAVFObjC object.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers):

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

        Correct file locations after r169914. These should have been
        in platform/graphics/ca.

        Rubberstamped by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/TileController.cpp: Copied from platform/graphics/ca/mac/TileController.cpp.
        * platform/graphics/ca/TileController.h: Copied from platform/graphics/ca/mac/TileController.h.
        * platform/graphics/ca/TileGrid.cpp: Copied from platform/graphics/ca/mac/TileGrid.cpp.
        * platform/graphics/ca/TileGrid.h: Copied from platform/graphics/ca/mac/TileGrid.h.
        * platform/graphics/ca/mac/TileController.cpp: Removed.
        * platform/graphics/ca/mac/TileController.h: Removed.
        * platform/graphics/ca/mac/TileGrid.cpp: Removed.
        * platform/graphics/ca/mac/TileGrid.h: Removed.

2014-06-12  Andy Estes  <aestes@apple.com>

        Fix the build after r169913.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):

2014-06-12  Alex Christensen  <achristensen@webkit.org>

        Collect correct web timing data from CFNetwork.
        https://bugs.webkit.org/show_bug.cgi?id=133824
        <rdar://problem/17273654>

        Reviewed by Simon Fraser.

        Covered by existing web timing tests.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getConnectionTimingData):
        Use _kCFNTimingDataFetchStart as the reference start time key.

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

        Convert TileController and TileGrid from ObjC to C++
        https://bugs.webkit.org/show_bug.cgi?id=133819
        <rdar://problem/17291841>

        Reviewed by Tim Horton.

        Convert TileGrid.mm and TileController.mm into C++ implementations. This required creating a 'frameForLayer'
        wrapper to call the 'frame' method of the CALayer object.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/mac/TileController.cpp: Copied from platform/graphics/ca/mac/TileController.mm.
        (WebCore::TileController::blankPixelCountForTiles):
        * platform/graphics/ca/mac/TileController.mm: Removed.
        * platform/graphics/ca/mac/TileGrid.cpp: Copied from platform/graphics/ca/mac/TileGrid.mm.
        * platform/graphics/ca/mac/TileGrid.h:
        * platform/graphics/ca/mac/TileGrid.mm: Removed.
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (WebCore::frameForLayer): Wrapper function to hide ObjC call from C++ compilation unit.

2014-06-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix crash on back/foward swipe
        https://bugs.webkit.org/show_bug.cgi?id=133826
        <rdar://problem/17032752>

        Reviewed by Tim Horton.

        AsyncScrollingCoordinator::frameViewForScrollingNode() would crash with a null root
        state node, because HistoryController::restoreScrollPositionAndViewState() tried
        to restore scroll position (via restoreViewState()) before hooking up the scrolling
        coordinator.
        
        Fix by doing the scrollingCoordinator->frameViewRootLayerDidChange() before
        calling restoreViewState().
        
        Also add a defensive null-check on the root state node in updateScrollPositionAfterAsyncScrollTimerFired().

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewForScrollingNode):

2014-06-12  Anders Carlsson  <andersca@apple.com>

        Add a space after the comma.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::add):

2014-06-12  Anders Carlsson  <andersca@apple.com>

        Move header value merging to HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=133815

        Reviewed by Andreas Kling.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::set):
        (WebCore::HTTPHeaderMap::add):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::addHTTPHeaderField):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeaderInternal):

2014-06-12  Anders Carlsson  <andersca@apple.com>

        Add ShapeValue.cpp and move ShapeValue::isImageValid() there
        https://bugs.webkit.org/show_bug.cgi?id=133809

        Reviewed by Antti Koivisto.

        This gets rid of CachedImage.h (and ResourceRequest and friends) from RenderStyle.h.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue):
        * css/CSSCrossfadeValue.cpp:
        * css/CSSFilterImageValue.cpp:
        * css/StyleResolver.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * rendering/ShapeValue.cpp: Added.
        (WebCore::ShapeValue::isImageValid):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::referenceBox):
        (WebCore::ShapeOutsideInfo::computedShape):
        (WebCore::ShapeOutsideInfo::isEnabledFor):
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::type):
        (WebCore::ShapeValue::setImage):
        (WebCore::ShapeValue::ShapeValue):
        (WebCore::ShapeValue::isImageValid): Deleted.

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

        Subpixel rendering: Make <select> element's decoration subpixel aware.
        https://bugs.webkit.org/show_bug.cgi?id=133781
        <rdar://problem/17272083>

        Reviewed by Simon Fraser.

        Enable <select> decoration painting on subpixel positions.
        The theme size is still integral, but its position is snapped to device pixels.
        Theme's label, the InlineTextBox is already subpixel position aware.
        webkit.org/b/132005 tracks the rest of the themes.

        Not testable.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMenuList):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::inflateRect):
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::progressBarRectForBounds):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::inflateRect): Deleted.

2014-06-12  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash in MediaSourcePrivateAVFObjC::naturalSize()
        https://bugs.webkit.org/show_bug.cgi?id=133789

        Reviewed by Eric Carlson.

        Add null-check to proctect against being queried for the naturalSize before we have a
        m_mediaSourcePrivate.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize):

2014-06-12  Alberto Garcia  <berto@igalia.com>

        [GTK] fails to build with --disable-webgl --disable-accelerated-compositing
        https://bugs.webkit.org/show_bug.cgi?id=131267

        Reviewed by Philippe Normand.

        Add missing headers needed for Float32Array::create().

        * Modules/webaudio/AudioBuffer.cpp:

2014-06-12  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] REGRESSION: application name is not correctly appended to the UA
        https://bugs.webkit.org/show_bug.cgi?id=133793

        Reviewed by Carlos Garcia Campos.

        We must use a blank to separate the default UA provided by WebKitGtk
        from the application name coming from the public API.

        Added an extra test case to the API tests to catch regressions.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent):

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

        WorkerRunLoop::Task::performTask should take in WorkerGlobalScope* to avoid downcasting
        https://bugs.webkit.org/show_bug.cgi?id=133616

        Reviewed by Andreas Kling.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::Task::performTask): Demand the context parameter to be a pointer
        to WorkerGlobalScope instead of ScriptExecutionContext, avoiding an unnecessary downcast.
        In the future this complete code path should use a reference to WorkerGlobalScope instead
        of a pointer.
        * workers/WorkerRunLoop.h:

2014-06-12  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Unsupported browser in www.icloud.com
        https://bugs.webkit.org/show_bug.cgi?id=133403

        Reviewed by Martin Robinson.

        We claim to be Safari (among others) to ensure maximum
        compatibility with existing web sites. Valid Safari UA strings do
        always (since Safari 3.0) contain the string "Version/X" before
        the "Safari/X" part. We were wrongly only adding it in very
        specific cases and we were placing it at the wrong position as it
        must precede the "Safari/X" part.

        From now on we unconditionally prepend the "Version/X" string to
        the "Safari/X" part as we always claim to be Safari. This makes
        the NeedsSafariVersion6 quirk invalid. This not only fixes
        "unsupported browser" issues in icloud.com, but also in
        globalforestwatch.com and live.com among many others.

        Apart from that I'm bumping the Safari Version in the UA to 8.0 as
        we're already claiming to be "Safari/538.35"" which corresponds to
        Safari 8 beta.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):
        (WebCore::standardUserAgentForURL):

2014-06-12  Pratik Solanki  <psolanki@apple.com>

        Avoid creating a CFData when checking if a resource is file backed
        https://bugs.webkit.org/show_bug.cgi?id=133783

        Reviewed by Andreas Kling.

        Export SharedBuffer::hasPlatformData().

        No new tests because no functional changes.

        * WebCore.exp.in:
        * platform/SharedBuffer.h:

2014-06-11  Myles C. Maxfield  <mmaxfield@apple.com>

        SVGGlyphToPathTranslator ASSERTs when encountering a missing glyph in an SVG font
        https://bugs.webkit.org/show_bug.cgi?id=133528

        Reviewed by Simon Fraser.

        Turns out this assertion is benign. We can take an early out of advance() (which
        is then handled properly by Font::dashesForIntersectionsWithRect()

        Test: svg/custom/skip-underline-missing-glyph.html

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect): Rather than skip partial results,
        don't skip anything at all to be consistent.
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGGlyphToPathTranslator::advance): Take an early out to avoid an ASSERT.

2014-06-11  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Give WebKitTestRunner a viewport configuration with initial scale=1 for testing
        https://bugs.webkit.org/show_bug.cgi?id=133779

        Reviewed by Benjamin Poulain.

        Add a "testing" viewport configuration with initial scale of 1.

        * WebCore.exp.in:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::testingParameters):
        * page/ViewportConfiguration.h:

2014-06-11  Pratik Solanki  <psolanki@apple.com>

        Keep CFDataRefs in SharedBuffer instead of merging them
        https://bugs.webkit.org/show_bug.cgi?id=133775

        Reviewed by Alexey Proskuryakov.

        Instead of merging the CFDataRefs into one buffer, save them in as CFDataRefs in
        SharedBuffer. They will get merged when code calls buffer() later on.

        No new tests because no functional changes.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::handleDataArray):

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

        editing/selection/selection-in-iframe-removed-crash.html or selection-invalid-offset.html crashes intermittently
        https://bugs.webkit.org/show_bug.cgi?id=111521
        <rdar://problem/15159351>

        Reviewed by Brady Eidson.

        Covered by existing tests.

        * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::commitData): Bail out if the
        load was canceled from under receivedFirstData(). Since this is where we commit the
        load, there are ample opportunities for scripts or clients to do anything.

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

        Subpixel rendering: RenderBox's content clipping should clip on device pixel boundary.
        https://bugs.webkit.org/show_bug.cgi?id=133767
        <rdar://problem/17272365>

        Reviewed by Simon Fraser.

        Push RenderBox's content clipping to device pixel boundaries. Integral snapping makes
        content cut off prematurely.

        Test: fast/inline-block/hidpi-margin-top-with-subpixel-value-and-overflow-hidden.html

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

2014-06-11  Anders Carlsson  <andersca@apple.com>

        Remove XHRReplayData::addHeader
        https://bugs.webkit.org/show_bug.cgi?id=133776

        Reviewed by Antti Koivisto.

        Just pass the HTTP header map to XHRReplayData::create directly.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willLoadXHR):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::XHRReplayData::create):
        (WebCore::XHRReplayData::XHRReplayData):
        (WebCore::XHRReplayData::addHeader): Deleted.
        * inspector/NetworkResourcesData.h:

2014-06-11  Andy Estes  <aestes@apple.com>

        Fix the Mac build.

        * WebCore.exp.in: Exported __ZN7WebCore19ResourceRequestBase15setHTTPReferrerERKN3WTF6StringE
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: Moved ivar declarations to @interface to account for the 32-bit legacy runtime.

2014-06-11  Simon Fraser  <simon.fraser@apple.com>

        Make FrameView 8 bytes smaller
        https://bugs.webkit.org/show_bug.cgi?id=133771

        Reviewed by Anders Carlsson.

        m_borderX and m_borderY were historical cruft.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        * page/FrameView.h:

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

        WindowFeatures arguments shoud ignore invalid characters in values
        <http://webkit.org/b/133703>
        <rdar://problem/17254118>

        Reviewed by Andy Estes.

        Test: fast/dom/Window/window-property-invalid-characters-ignored.html

        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::WindowFeatures): Set |length| based on
        |buffer|, not |features|.  Switch to using a for loop.  Switch
        to unsigned types since we are working with positive offsets
        into a String.

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

        Viewport arguments should ignore invalid characters in values
        <http://webkit.org/b/133555>
        <rdar://problem/17179650>

        Reviewed by Daniel Bates.

        Test: fast/viewport/viewport-warnings-7.html

        * dom/Document.cpp:
        (WebCore::Document::processArguments): Set |length| based on
        |buffer|, not |features|.  Switch to using a for loop.  Switch
        to unsigned types since we are working with positive offsets
        into a String.

2014-06-11  Anders Carlsson  <andersca@apple.com>

        Move some HTTP header field accessors to ResourceRequestBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=133773

        Reviewed by Andreas Kling.

        This will avoid having to include HTTPHeaderNames.h from ResourceRequestBase.h.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::httpContentType):
        (WebCore::ResourceRequestBase::setHTTPContentType):
        (WebCore::ResourceRequestBase::httpReferrer):
        (WebCore::ResourceRequestBase::setHTTPReferrer):
        (WebCore::ResourceRequestBase::httpOrigin):
        (WebCore::ResourceRequestBase::setHTTPOrigin):
        (WebCore::ResourceRequestBase::httpUserAgent):
        (WebCore::ResourceRequestBase::setHTTPUserAgent):
        (WebCore::ResourceRequestBase::httpAccept):
        (WebCore::ResourceRequestBase::setHTTPAccept):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::httpContentType): Deleted.
        (WebCore::ResourceRequestBase::setHTTPContentType): Deleted.
        (WebCore::ResourceRequestBase::httpReferrer): Deleted.
        (WebCore::ResourceRequestBase::setHTTPReferrer): Deleted.
        (WebCore::ResourceRequestBase::httpOrigin): Deleted.
        (WebCore::ResourceRequestBase::setHTTPOrigin): Deleted.
        (WebCore::ResourceRequestBase::httpUserAgent): Deleted.
        (WebCore::ResourceRequestBase::setHTTPUserAgent): Deleted.
        (WebCore::ResourceRequestBase::httpAccept): Deleted.
        (WebCore::ResourceRequestBase::setHTTPAccept): Deleted.

2014-06-11  Anders Carlsson  <andersca@apple.com>

        Remove some more unneeded member functions from HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=133768

        Reviewed by Simon Fraser.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::find): Deleted.
        (WebCore::HTTPHeaderMap::keys): Deleted.
        * platform/network/HTTPHeaderMap.h:

2014-06-11  Jer Noble  <jer.noble@apple.com>

        Unreviwed Mac release build fix; mark the keyPath parameter as unused.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):

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

        [Win] Avoid deadlock with AVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=133762
        <rdar://problem/17128248>

        Reviewed by Eric Carlson.

        Always invoke our notifications asynchronously so that we do not
        execute long-running code while holding the AVFWrapper map mutex
        lock. AVFoundationCF callbacks can deadlock if we call into AVF
        while holding this lock.


        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):

2014-06-11  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake] One more URTBF after r169826.

        * CMakeLists.txt: Generate files to the proper place.

2014-06-11  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake]URTBF after r169826.

        * CMakeLists.txt: Typo fix.

2014-06-11  Anders Carlsson  <andersca@apple.com>

        Get rid of an unneeded HTTPHeaderMap::remove overload
        https://bugs.webkit.org/show_bug.cgi?id=133763

        Reviewed by Andreas Kling.

        Change HTTPHeaderMap::remove to return whether an entry was removed or not and simplify
        ResourceRequestBase::clearHTTPAuthorization.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::remove):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::clearHTTPAuthorization):

2014-06-11  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] Propagate errors from AVSampleBufferDisplayLayer through to MSE
        https://bugs.webkit.org/show_bug.cgi?id=133747

        Reviewed by Eric Carlson.

        Abstract out the delivery of errors in MediaKeySession into its own method, which can be triggered by 
        CDMSession objects through the CDMSessionClient interface:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::keyRequestTimerFired):
        (WebCore::MediaKeySession::addKeyTimerFired):
        (WebCore::MediaKeySession::sendMessage):
        (WebCore::MediaKeySession::sendError):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveRenderingError):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivateClient.h:
        * platform/graphics/CDMSession.h:

        Add an Objective-C object which can listen for error KVO notifications:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        (WebCore::SourceBufferPrivateAVFObjCErrorClient::~SourceBufferPrivateAVFObjCErrorClient):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener initWithParent:WebCore::]):
        (-[WebAVSampleBufferErrorListener dealloc]):
        (-[WebAVSampleBufferErrorListener invalidate]):
        (-[WebAVSampleBufferErrorListener beginObservingLayer:]):
        (-[WebAVSampleBufferErrorListener stopObservingLayer:]):
        (-[WebAVSampleBufferErrorListener beginObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener stopObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (-[WebAVSampleBufferErrorListener layerFailedToDecode:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::registerForErrorNotifications):
        (WebCore::SourceBufferPrivateAVFObjC::unregisterForErrorNotifications):
        (WebCore::SourceBufferPrivateAVFObjC::layerDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::rendererDidReceiveError):

        Register for the new error notifications:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC): Moved to source file.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::CDMSessionMediaSourceAVFObjC): Register for error notifications.
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC): Unregister for error notifications.
        (WebCore::CDMSessionMediaSourceAVFObjC::layerDidReceiveError): Pass through to CDMSessionClient.
        (WebCore::CDMSessionMediaSourceAVFObjC::rendererDidReceiveError): Ditto.

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

        Don't force CharacterData to override getOwnPropertySlot.
        <https://webkit.org/b/133717>

        This was preventing us from taking the GetByVal fast path for Text nodes
        since they inherit from CharacterData and having a "length" attribute
        meant we gave them a custom getOwnPropertySlot, despite not actually
        needing it for anything.

        Reviewed by Anders Carlsson.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AttributeShouldBeOnInstance):

2014-06-11  Anders Carlsson  <andersca@apple.com>

        Add a script that generates a gperf hash for HTTP header names
        https://bugs.webkit.org/show_bug.cgi?id=133760

        Reviewed by Andreas Kling.

        This is the first step towards getting rid of AtomicString from HTTPHeaderMap.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/HTTPHeaderNames.in: Added.
        * platform/network/create-http-header-name-table: Added.
        (HTTPHeaderName):

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

        ROLLOUT: r153510: Broke Table borders on Wikipedia
        https://bugs.webkit.org/show_bug.cgi?id=132802
        <rdar://problem/16792562>

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::alignLeftRightBorderPaintRect): Deleted.
        (WebCore::RenderTableCell::alignTopBottomBorderPaintRect): Deleted.
        * rendering/RenderTableCell.h:

2014-06-11  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Empty headers in request response.
        https://bugs.webkit.org/show_bug.cgi?id=133483

        Reviewed by Brent Fulgham.

        When a request is taken from the cache, its cached response headers are empty, if the cache entry was created in the same session.
        It is only when the cache entry is loaded from disc, that the response headers are properly set.
        We need to set the cached response headers in both cases.
        There is also an issue if two jobs are loading the same url at the same time.
        Both jobs will then write to the cache content file, and create invalid content.
        This can be fixed by only letting the first request write to the content file.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::isLoading): Added method to check if cache entry is loading the content.
        (WebCore::CurlCacheEntry::saveResponseHeaders): Set the cached response headers when response is saved.
        (WebCore::CurlCacheEntry::invalidate): To be on the safe side, close content file when entry is invalidated.
        (WebCore::CurlCacheEntry::parseResponseHeaders): Made parameter const.
        * platform/network/curl/CurlCacheEntry.h: Keep track of which job is creating this cache entry.
        (WebCore::CurlCacheEntry::getJob):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::loadIndex): When cache entry is loaded from disc, there is no associated job.
        (WebCore::CurlCacheManager::didReceiveResponse): Bail out if cache entry is already currently loading,
        otherwise associate this job with the new cache entry.
        (WebCore::CurlCacheManager::didFinishLoading): Changed parameter type.
        (WebCore::CurlCacheManager::isCached): Don't report the url as cached if it's currently loading content.
        (WebCore::CurlCacheManager::didReceiveData): Don't write to the content file if the entry is not associated with the job.
        (WebCore::CurlCacheManager::didFail): Changed parameter type.
        * platform/network/curl/CurlCacheManager.h: Changed parameter type.
        * platform/network/curl/ResourceHandleManager.cpp: Ditto.
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):

2014-06-11  Sam Weinig  <sam@webkit.org>

        REGRESSION (r133705): Layout Test js/dom/webidl-type-mapping.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=133736

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Turns out we can't remove the HashTable yet after all, as JavaScriptCore
        relies on hasSetterOrReadonlyProperties bit to make put work correctly. We
        can, however, skip creating the table, and just use the value array during
        reification. 

2014-06-11  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: VoiceOver ignores input type = date in Safari on iOS7
        https://bugs.webkit.org/show_bug.cgi?id=133709

        Reviewed by Mario Sanchez Prada.

        The date field on iOS appears as a popup button, which is not a type we had encountered for <input> types.
        This returns an appropriate role in that case.

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

2014-06-11  Zan Dobersek  <zdobersek@igalia.com>

        Avoid FontGlyphsCacheKey copy in FontGlyphsCacheEntry constructor
        https://bugs.webkit.org/show_bug.cgi?id=133674

        Reviewed by Andreas Kling.

        * platform/graphics/Font.cpp:
        (WebCore::FontGlyphsCacheEntry::FontGlyphsCacheEntry): The FontGlyphsCacheKey
        variable is already passed-in as an rvalue reference, so it should be moved
        into the constructor of the corresponding member variable instead of copied.

2014-06-11  Andy Estes  <aestes@apple.com>

        Fix the build after after r169789 on platforms that build with -Wunused-const-variable

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashTable): Don't create the value array if it'll never be used.

2014-06-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a different user agent string depending on the site
        https://bugs.webkit.org/show_bug.cgi?id=132681

        Reviewed by Anders Carlsson.

        We have changed the user agent string several times to try to fix
        broken websites that require specific things in the UA string to
        properly work. But everytime we change the UA string to fix a
        website we break others. We could use different UA string
        depending on the website. UserAgentGtk code has also been cleaned
        up, using NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL
        and avoiding unneeded conversions to UTF-8.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::UserAgentQuirks::UserAgentQuirks): New helper private
        class to handle user agent quirks.
        (WebCore::UserAgentQuirks::add):
        (WebCore::UserAgentQuirks::contains):
        (WebCore::UserAgentQuirks::isEmpty):
        (WebCore::platformForUAString): Bring back this method that was
        removed to always pretend to be Macintosh.
        (WebCore::platformVersionForUAString): Return a different platform
        version depending on the actual platform.
        (WebCore::versionForUAString): Return the WebKit version.
        (WebCore::buildUserAgentString): Helper function to build the user
        agent taking into account the UserAgentQuirks received.
        (WebCore::standardUserAgentStatic): Standard user agent string
        when no quirks are present.
        (WebCore::standardUserAgent):
        (WebCore::standardUserAgentForURL): New method that returns the
        user agent string for the given URL.
        * platform/gtk/UserAgentGtk.h:

2014-06-11  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix.

        * platform/network/curl/ResourceRequest.h:
        Include missing PassOwnPtr.h.

2014-06-10  Sam Weinig  <sam@webkit.org>

        Actually only generate tables for History and Location.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2014-06-10  Sam Weinig  <sam@webkit.org>

        Attempt to fix the tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Keep generating HashTables for History and Location, since they use them in
        their custom getOwnPropertySlot delegates.

2014-06-10  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] ScrollingTreeOverflowScrollingNode does not use asynchronous touch dispatch
        https://bugs.webkit.org/show_bug.cgi?id=133702

        Reviewed by Simon Fraser.

        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeWillStartPanGesture):

2014-06-10  Benjamin Poulain  <benjamin@webkit.org>

        Reduce the overhead of updating the animatable style on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=133618

        Reviewed by Simon Fraser.

        While updating the style for animations, most of the time spent was pure calling overhead.

        This patch should reduce this a bit on ARMv7:
        1) Get the frame directly from the document instead of document->view->framview->frame.
        2) Inline RenderObject::animation(). This is just 3 loads, setting up the registers on the call
           site is more expensive than loading the values directly.
        3) Inline RenderElement::setAnimatableStyle(). It has only one call site and the call is mostly
           overhead.

        * css/CSSComputedStyleDeclaration.cpp:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setAnimatableStyle): Deleted.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setAnimatableStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        (WebCore::RenderObject::animation): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::animation):
        * rendering/RenderView.h:
        (WebCore::RenderObject::frame):

2014-06-10  Sam Weinig  <sam@webkit.org>

        Don't create a HashTable for JSObjects that use eager reification
        https://bugs.webkit.org/show_bug.cgi?id=133705

        Reviewed by Geoffrey Garen.

        It is unnecessary to create the CompactHashIndex or HashTable for JSObjects
        that use eager reification, since we will never look up properties directly.
        Instead, we can iterate the HashTableValue array directly during reification.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Only generate the value array for prototypes that use eager reification.

        (GenerateHashTableValueArray):
        Extract out into a helper.

        (GenerateHashTable):
        Add a parameter, $justGenerateValueArray, that if true, means we only
        should generate the value array. 

        * 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:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.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:

2014-06-10  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: Return the language for attributed text marker queries
        https://bugs.webkit.org/show_bug.cgi?id=133682

        Reviewed by Mario Sanchez Prada.

        Add language to the list of objects being returned for attributed text.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (AXAttributeStringSetLanguage):
        (AXAttributedStringAppendText):

2014-06-10  Dan Bernstein  <mitz@apple.com>

        WebCore part of [Cocoa] Handling authentication challenges should not require multiple delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=133697

        Reviewed by Anders Carlsson.

        * platform/network/AuthenticationClient.h: Declared new virtual member functions for
        requesting default handling of a challenge and rejecting a challenge.
        * platform/network/ResourceHandle.h: Override new AuthenticationClient functions.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::receivedRequestToPerformDefaultHandling): Added. Calls
        CFURLConnectionPerformDefaultHandlingForChallenge.
        (WebCore::ResourceHandle::receivedChallengeRejection): Added. Calls
        CFURLConnectionRejectChallenge.
        * platform/network/cf/SocketStreamHandle.h: Override new AuthenticationClient functions.
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::receivedRequestToPerformDefaultHandling): Added empty
        override.
        (WebCore::SocketStreamHandle::receivedChallengeRejection): Ditto.

2014-06-09  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r167962): Out of bounds read in JSC::StructureIDTable::get()
        https://bugs.webkit.org/show_bug.cgi?id=133463
        <rdar://problem/17098100>

        Reviewed by Geoffrey Garen.

        Revise MediaControllerHost implementation so that instead of holding its
        own pointer to the JS Controller object, it uses new properties added to
        the internal media controls DOM hierarchy. This allows the GC to see the
        needed lifecycle of the various media control objects and avoids the
        premature deallocation that caused this bug.
 
        * Modules/mediacontrols/MediaControlsHost.h:
        (WebCore::MediaControlsHost::controllerJSValue): Deleted.
        (WebCore::MediaControlsHost::setControllerJSValue): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controllerJSValue): Added convenience function
        to share logic for retrieving the controller object.
        (WebCore::HTMLMediaElement::updateCaptionContainer): Revise to use new method
        for accessing the controller.
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Connect the media
        elements JS wrapper object to the MediaControlsHost JS wrapper. Then connect
        the MediaControlsHost JS wrapper to the Controller JS object.
        (WebCore::HTMLMediaElement::pageScaleFactorChanged): Revise to use new method
        for accessing the controller.

2014-06-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Japanese text in Google search is rendered too low and clipped
        https://bugs.webkit.org/show_bug.cgi?id=133595

        Reviewed by Simon Fraser.

        This is a revert of r155324.

        By forcing line-height to be normal, r155324 was forcing WebKit to inspect font metrics
        to determine the height of a line. This means that if a fallback font was required to
        draw a line of text, and the fallback font had a higher ascent than the primary font,
        the entire line of text would be pushed down. If we don't force line-height to be normal,
        then we use the line-height value instead, which short circuits this mechanism, thereby
        not pushing text down.

        No new tests (because this is simply a revert)

        * css/html.css:
        (input): Deleted.

2014-06-10  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r167937): Do not use effective zoom factor while resolving media query's min-, max-(device)width/height values.
        https://bugs.webkit.org/show_bug.cgi?id=133681

        Reviewed by Simon Fraser.

        We lost the default multiplier(zoom) value of 1 with r167937 at template<typename T> T computeLength().
        Now MediaQueryEvaluator takes the current page zoom factor into account while resolving min-, max- width values.

        This patch explicitly sets the multiplier value to 1 to ensure zoom independent media query value resolving.

        Test: fast/media/media-query-with-scaled-content.html

        * css/CSSToLengthConversionData.cpp:
        (WebCore::CSSToLengthConversionData::viewportWidthFactor):
        (WebCore::CSSToLengthConversionData::viewportHeightFactor):
        * css/CSSToLengthConversionData.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * testing/Internals.cpp:
        (WebCore::Internals::setPageZoomFactor):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-06-10  Simon Fraser  <simon.fraser@apple.com>

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

        Revert the part of r169733 that caused this test to start failing.

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

2014-06-10  Timothy Horton  <timothy_horton@apple.com>

        Factor repeated CFRunLoopObserver code out
        https://bugs.webkit.org/show_bug.cgi?id=133690

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cf/RunLoopObserver.cpp: Added.
        (WebCore::RunLoopObserver::create):
        (WebCore::RunLoopObserver::~RunLoopObserver):
        (WebCore::RunLoopObserver::runLoopObserverFired):
        (WebCore::RunLoopObserver::schedule):
        (WebCore::RunLoopObserver::invalidate):
        * platform/cf/RunLoopObserver.h: Added.
        (WebCore::RunLoopObserver::isScheduled):
        (WebCore::RunLoopObserver::RunLoopObserver):
        Factor CFRunLoopObserver management code out of LayerFlushScheduler and WebKit2.

        * platform/graphics/ca/LayerFlushScheduler.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::LayerFlushScheduler::LayerFlushScheduler):
        (WebCore::LayerFlushScheduler::~LayerFlushScheduler):
        (WebCore::LayerFlushScheduler::layerFlushCallback):
        (WebCore::LayerFlushScheduler::schedule):
        (WebCore::LayerFlushScheduler::invalidate):
        (WebCore::LayerFlushScheduler::runLoopObserverCallback): Deleted.
        Make use of WebCore::RunLoopObserver.

2014-06-10  Simon Fraser  <simon.fraser@apple.com>

        Modernize loop code in scrolling tree code
        https://bugs.webkit.org/show_bug.cgi?id=133688

        Reviewed by Anders Carlsson.

        Use new loop syntax for walking children.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::cloneAndResetChildren):
        (WebCore::ScrollingStateNode::removeChild):
        (WebCore::ScrollingStateNode::willBeRemovedFromStateTree):
        (WebCore::ScrollingStateNode::dump):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::removeChild):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):

2014-06-10  Anders Carlsson  <andersca@apple.com>

        Add -[WKWebView evaluateJavaScript:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=133689
        <rdar://problem/17152685>

        Reviewed by Geoffrey Garen.

        * English.lproj/Localizable.strings:
        Add new localizable strings.

2014-06-10  Antti Koivisto  <antti@apple.com>

        Serialize ResourceRequests without platform request
        https://bugs.webkit.org/show_bug.cgi?id=133679

        Reviewed by Alexey Proskuryakov.

        We create platform requests in the web process just so we can serialize them. This is unnecessary work.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::encodingRequiresPlatformData):
        (WebCore::ResourceRequestBase::encodeWithoutPlatformData):
        (WebCore::ResourceRequestBase::decodeWithoutPlatformData):
        
            Add encoding and decoding functions here to avoid exposing internals.

        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::encodingRequiresPlatformData):
        
            Allow encoding without platform data if it hasn't been created yet and there is no request body.

2014-06-10  Brady Eidson  <beidson@apple.com>

        Send more context about text selection to telephone number scanner
        <rdar://problem/16874385> and https://bugs.webkit.org/show_bug.cgi?id=133684

        Reviewed by Enrica Casucci.

        * dom/Range.cpp:
        (WebCore::rangesOverlap):Add a utility to check if two ranges overlap.
        * dom/Range.h:
        
        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Create a range that is wider than the 
          actual selection to search for phone numbers that are not completely selected yet.

2014-06-10  Alex Christensen  <achristensen@webkit.org>

        [iOS] Another unreviewed build fix after r169746.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        Prevent another unused value error.

2014-06-10  Alex Christensen  <achristensen@webkit.org>

        [iOS] Unreviewed build fix after r169746.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        Protect startTime with !PLATFORM(IOS) to prevent a unused variable build error.

2014-06-10  Chris Fleizach  <cfleizach@apple.com>

        AX: WK2: iOS: text editing does not work
        https://bugs.webkit.org/show_bug.cgi?id=133666

        Reviewed by Mario Sanchez Prada.

        In WK2, all the text editing is handled by the WebProcess, so selectedTextRange and setSelectedTextRange
        need to be implemented, as well as posting the right value change notification.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper postValueChangedNotification]):
        (-[WebAccessibilityObjectWrapper _accessibilitySelectedTextRange]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetSelectedTextRange:]):

2014-06-10  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Stay in "memory pressure" mode until told otherwise.
        <https://webkit.org/b/133671>

        When we receive the first memory pressure signal, flip the flag in
        MemoryPressureHandler so that isUnderMemoryPressure() returns true
        from then on, until the system tells us pressure levels are back
        to normal.

        The hold-off mechanism is disabled for iOS, that wasn't actually
        needed in the first place, since the system is not going to spam
        you with tons of notifications.

        Also propagate the "critical" flag all the way from the system
        to the pressure handler. Note that we don't actually do anything
        differently based on the flag yet.

        Reviewed by Sam Weinig.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::setUnderMemoryPressure):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

2014-06-10  Simon Fraser  <simon.fraser@apple.com>

        Fix logging of sticky scrolling tree nodes
        https://bugs.webkit.org/show_bug.cgi?id=133670

        Reviewed by Sam Weinig.

        ScrollingStateStickyNode::dumpProperties() dumped stickyBoxRect() twice and
        didn't dump constrainingRectAtLastLayout(), so fix that.

        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::dumpProperties):

2014-06-05  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Simplify the named grid lines resolution algorithm
        https://bugs.webkit.org/show_bug.cgi?id=133543

        Reviewed by Darin Adler.

        Named grid lines resolution algorithm can be heavily simplified by
        inserting the implicit named grid lines generated by each grid
        area (<area-name>-{start|end} for rows and columns), into the list
        of user defined named grid lines. This way we would only have to
        deal with named grid lines and forget about the named grid areas
        (as described in the specs
        http://dev.w3.org/csswg/css-grid/#grid-placement-slot).

        As a nice side effect, we'll get for free the implementation of the
        use case described in section 5.2.2 Implicit Named Areas.

        Test: fast/css-grid-layout/named-grid-lines-with-named-grid-areas-dynamic-get-set.html

        * css/StyleResolver.cpp:
        (WebCore::createImplicitNamedGridLinesFromGridArea):
        (WebCore::StyleResolver::applyProperty):
        * rendering/RenderGrid.cpp:
        (WebCore::isStartSide):
        (WebCore::gridLinesForSide):
        (WebCore::implicitNamedGridLineForSide):
        (WebCore::isNonExistentNamedLineOrArea):
        (WebCore::RenderGrid::adjustGridPositionsFromStyle):
        (WebCore::RenderGrid::resolveNamedGridLinePositionFromStyle):
        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        (WebCore::RenderGrid::resolveNamedGridLinePositionAgainstOppositePosition):
        (WebCore::gridLineDefinedBeforeGridArea): Deleted.
        (WebCore::setNamedLinePositionIfDefinedBeforeArea): Deleted.
        (WebCore::RenderGrid::adjustNamedGridItemPosition): Deleted.

2014-06-10  Kiran  <kiran.guduru@samsung.com>

        [MediaStream] Add getTracks() support to MediaStream.
        https://bugs.webkit.org/show_bug.cgi?id=133641

        Reviewed by Eric Carlson.

        A new method named getTracks is proposed to retrieve all the tracks
        of a MediaStream irrespective of the type. This method has been implementd.

        Test: fast/mediastream/MediaStream-getTracks.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::getTracks):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:

2014-06-09  Simon Fraser  <simon.fraser@apple.com>

        Remove use of view() in RenderView code
        https://bugs.webkit.org/show_bug.cgi?id=133669

        Reviewed by Andreas Kling.

        view() in RenderView just returns *this, so no need to use it.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):

2014-06-09  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Wireless route picker control should use touch event handlers
        https://bugs.webkit.org/show_bug.cgi?id=133672

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Listen for touch events.
        (ControllerIOS.prototype.handleWirelessPickerButtonTouchStart): New, handle touch start.
        (ControllerIOS.prototype.handleWirelessPickerButtonTouchEnd): New, handle touch end.
        (ControllerIOS.prototype.handleWirelessPickerButtonTouchCancel): New, handle touch cancel.
        (ControllerIOS.prototype.handleWirelessPickerButtonClicked): Deleted.

2014-06-09  Benjamin Poulain  <benjamin@webkit.org>

        Do not use a mask when matching the return value of a function call on ARM
        https://bugs.webkit.org/show_bug.cgi?id=133614

        Reviewed by Andreas Kling.

        On ARM, we cannot have garbage on the top bits of booleans. It is faster to check the whole
        register for nullity.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::callAndBranchOnBooleanReturnValue):
        (WebCore::FunctionCall::callAndBranchOnCondition):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):

2014-06-09  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the bogus assertion that didn't even build.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberValue):

2014-06-09  Ryosuke Niwa  <rniwa@webkit.org>

        Commit the right fix.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberValue):

2014-06-09  Ryosuke Niwa  <rniwa@webkit.org>

        Debug build fix after r169731.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberValue):

2014-06-09  Simon Fraser  <simon.fraser@apple.com>

        Work towards having frames in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=133665

        Reviewed by Tim Horton.
        
        Optionally (based on Setting) create nodes in the scrolling tree for frames which
        contain async-scrollable content. This will be used on iOS/WK2 to support accelerated
        overflow-scroll in iframes. The setting allows for testing on OS X.
        
        The change breaks an assumption in ScrollingCoordinator/AsyncScrollingCoordinator
        that we're always dealing with the main frame, and changes logic in RenderLayerCompositor
        so that we can connect the scrolling tree across frame boundaries. RenderLayerCompositor
        maintains a m_subframeScrollLayersNeedReattach flag that gets set whenever we add or remove
        scroll-coordinated layers in the current frame. When set, after updating compositing
        layers we walk child frames, and, if they have scrolling nodes, re-attach them to the
        scrolling tree (which will find the new ancestor node).

        Tests: platform/mac-wk2/tiled-drawing/scrolling/frames/coordinated-frame-in-fixed.html
               platform/mac-wk2/tiled-drawing/scrolling/frames/coordinated-frame.html

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollLayerID): Use the new "for role" way of getting the node ID.
        * page/Settings.cpp:
        * page/Settings.in: Add scrollingTreeIncludesFrames.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged): Only set
        the region for the main frame.
        (WebCore::AsyncScrollingCoordinator::frameViewForScrollingNode): updateScrollPositionAfterAsyncScroll()
        needs to know which FrameView a given nodeID is hosted in; doing a walk of the frame tree for
        non-main frames seems to be the safest way.
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::syncChildPositions):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView): Consult the new setting.
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewFixedObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::setForceSynchronousScrollLayerPositionUpdates):
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously):
        (WebCore::ScrollingCoordinator::replaySessionStateDidChange):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously): Deleted.
        * rendering/RenderLayerBacking.h: Rather than separate functions to get the two scrolling
        node IDs, having one scrollingNodeIDForRole() makes calling code cleaner.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):  call reattachSubframeScrollLayers()
        after a compositing tree update.
        (WebCore::RenderLayerCompositor::isAsyncScrollableStickyLayer): Deals with the various configurations
        in which we can do async scrolling of sticky elements.
        (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer):
        (WebCore::useCoordinatedScrollingForLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::requiresCompositingForScrolling): Moved.
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange): This is a bug fix;
        we only need to notify child frames, not all descendant frames.
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):
        (WebCore::enclosingScrollingNodeID):
        (WebCore::scrollCoordinatedAncestorInParentOfFrame):
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayer):
        (WebCore::isStickyInAcceleratedScrollingLayerOrViewport): Deleted.
        (WebCore::isViewportConstrainedFixedOrStickyLayer): Deleted.
        (WebCore::isMainFrameScrollingOrOverflowScrolling): Deleted.
        (WebCore::nearestScrollCoordinatedAncestor): Deleted.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Added comment.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setScrollingTreeIncludesFrames):
        * testing/InternalSettings.h: Removed some useless parameter names.
        * testing/InternalSettings.idl: Added setScrollingTreeIncludesFrames() setting.

2014-06-09  Benjamin Poulain  <bpoulain@apple.com>

        Improve CSSPrimitiveValue::customCSSText for ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=133597

        Reviewed by Andreas Kling.

        On imgur, some script is updating some layout on timers and on scroll.

        It looks like CSSPrimitiveValue::customCSSText() is a little constrained
        by the instruction cache on ARMv7. This patch improve the situation a bit.

        First, the creation of the string itself is changed to go from two allocation to one.
        Previously, we would allocate a StringBuffer and adopt it. Now we allocate a StringImpl
        directly with the inline buffer.

        The second issue is that the compiler was generating a real copy constructor for every
        assignment of the "text" variable (likely because the variable span is so large).
        This was solved by moving the string creating into a separate function (to fix the span)
        and being careful with passing PassRef<StringImpl> around.

        Then there was the problem that the compiler was a little too aggressive with inlining
        which caused each "case" to repeat the same prologue and epilogue before formatValue().
        This was solved by adding formatNumberValue() with NEVER_INLINE to have the prologue/epilogue
        in a single place.

        On older device, that's about 3% improvement on style access. On modern ARM64/x86_64
        there is no noticeable difference.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberValue):
        (WebCore::CSSPrimitiveValue::formatNumberForcustomCSSText):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::formatNumber): Deleted.
        * css/CSSPrimitiveValue.h:

2014-06-09  Alex Christensen  <achristensen@webkit.org>

        [iOS WebGL] Fix EXT_shader_texture_lod.
        https://bugs.webkit.org/show_bug.cgi?id=133633

        Reviewed by Brady Eidson.

        Covered by the Khronos test (and in LayoutTests):
        conformance/extensions/ext-shader-texture-lod.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        Added shader texture lod name to match value from glGetString(GL_EXTENSIONS) on iOS.

2014-06-09  Benjamin Poulain  <bpoulain@apple.com>

        Document::updateStyleIfNeededForNode can get very expensive
        https://bugs.webkit.org/show_bug.cgi?id=133599

        Reviewed by Andreas Kling.

        When pages are querying their style, we first run through
        Document::updateStyleIfNeededForNode() to find if that particular node needs style recalc.

        The problem was that updateStyleIfNeededForNode() could get really expensive. For each node,
        it needs to check the whole parent chain to find if any needs style recalc.
        When web pages get a bunch of nodes and querying their style, we ended up going over a lot
        of nodes just to find there is nothing to do.

        This patch adds two tweaks to reduce the problem:
        First, before querying nodeOrItsAncestorNeedsStyleRecalc() we check if the Document is dirty at all.
        The other part is making nodeOrItsAncestorNeedsStyleRecalc() faster by removing useless elements check.

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

2014-06-09  Enrica Casucci  <enrica@apple.com>

        iOS WebKit: Crash in charactersAroundPosition.
        https://bugs.webkit.org/show_bug.cgi?id=133659
        <rdar://problem/17220870>

        Reviewed by Benjamin Poulain.

        Ensure that we stay within the vector boundaries
        when returning the characters around the position.

        * editing/VisibleUnits.cpp:
        (WebCore::charactersAroundPosition):

2014-06-09  Alexey Proskuryakov  <ap@apple.com>

        Properly reset UStringSearch object in SearchBuffer constructor.
        https://bugs.webkit.org/show_bug.cgi?id=133662
        <rdar://problem/17240136>

        Reviewed by Tim Horton.

        * editing/TextIterator.cpp: (WebCore::SearchBuffer::~SearchBuffer):

2014-06-09  Eric Carlson  <eric.carlson@apple.com>

        Automatic text track selection can select more than one track
        https://bugs.webkit.org/show_bug.cgi?id=133590

        Reviewed by Brent Fulgham.

        Test: media/video-trackmenu-selection.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrack): Consider the currently selected
            track, if any.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu): Drive-by change
            to make sure no non-visible text tracks are included in the track menu.

2014-06-09  Jer Noble  <jer.noble@apple.com>

        [Mac] Hang when painting media before compositing mode activated
        https://bugs.webkit.org/show_bug.cgi?id=133655

        Reviewed by Eric Carlson.

        When asked to paint(), MediaPlayerPrivateAVFoundationObjC should not create an image generator
        or a video output. These operations are synchronous, and will block the drawing thread and cause
        a spin. paint() as opposed to paintImageInContext() is only called when painting the layer tree
        and MediaPlayerPrivateAVFoundationObjC will paint by creating a AVPlayerLayer, not by painting
        frames directly into the tree.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint):

2014-06-09  Jer Noble  <jer.noble@apple.com>

        [Mac][MSE] Exception thrown from ~MediaPlayerPrivateMediaSourceAVFObjC().
        https://bugs.webkit.org/show_bug.cgi?id=133656

        Reviewed by Eric Carlson.

        AVSampleBufferRenderSynchronizer can't handle being passed a NULL observer, so only attempt
        to remove the time jumped or duration observer if one was actually created.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):

2014-06-09  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Pixelsnapping empty rounded rect results in NaN radii width/height.
        https://bugs.webkit.org/show_bug.cgi?id=133654

        Reviewed by Simon Fraser.

        Empty rounded rects don't need snapping.

        Not testable.

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting):

2014-05-21  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION: missing underline under CJK text
        https://bugs.webkit.org/show_bug.cgi?id=128145

        Reviewed by Darin Adler.

        This patch refactors the GlyphToPathTranslator which is used to find intersections of
        glyphs and underlines. It was modified to allow for querying these pieces of
        information:
        1) The extents of the glyph. This can be used to make the underlines skip an entire
        glyph, wholesale
        2) What kind of skipping behavior should be used
        3) The Path which represents the glyph
        There are three skipping behaviors:
        1) (SkipDescenders) The previous behavior
        2) (SkipGlyph) Make the underline skip over the entire glyph, using the extents() function
        3) (DrawOverGlyph) Make the underline plow through the glyph, ignoring any descenders

        Calculating which underlining behavior to use depends on what the base codepoint that
        originated that glyph is. This means that we have to map from glyphs to characters,
        something which is nontrivial to do. In order to solve this problem, this patch adds
        an optional vector to GlyphBuffer which represents the location in the original string
        from which a particular glyph originated. Then, when our WidthIterator code adds
        glyphs to the GlyphBuffer, we can include the extra information about where we are
        in the input string. Once this data is available, the GlyphPathTranslator can look up
        the base codepoint from which this glyph originates, and can run ICU functions on that
        codepoint.

        We can use the ICU ublock_getCode() function to find which Unicode block a particular
        codepoint comes from. If the codepoint comes from a CJK block, we will use
        DrawOverGlyph; otherwise, we will use SkipDescenders.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-cjk.html

        * platform/graphics/Font.cpp:
        (WebCore::sharedUnderlineType): Look up the base codepoint from which this glyph
        originates, call ublock_getCode to get its Unicode block, then return
        a GlyphUnderlineType accordingly. This code is shared between SVG and non-SVG.
        * platform/graphics/Font.h: New virtual functions in GlyphToPathTranslator, as well as
        function signatures for the above two functions.
        * platform/graphics/GlyphBuffer.h: Add an optional instance member for the location
        from within the original string from which a particular glyph originates.
        (WebCore::GlyphBuffer::clear): Updated for new member.
        (WebCore::GlyphBuffer::add): Ditto.
        (WebCore::GlyphBuffer::saveOffsetsInString): Opt-in to using the new variable
        (WebCore::GlyphBuffer::offsetInString): New variable accessor.
        * platform/graphics/TextRun.h: SVG needs the TextRun to use sharedUnderlineType.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal): Use GlyphBuffer's new variable (if present).
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance): Use GlyphBuffer's new variable (if present).
        * platform/graphics/mac/FontMac.mm: Implement new GlyphToPathTranslator functions.
        (WebCore::MacGlyphToPathTranslator::path):
        (WebCore::MacGlyphToPathTranslator::extents):
        (WebCore::MacGlyphToPathTranslator::underlineType): Calls sharedUnderlineType().
        (WebCore::MacGlyphToPathTranslator::moveToNextValidGlyph):
        (WebCore::MacGlyphToPathTranslator::increment):
        (WebCore::Font::dashesForIntersectionsWithRect): Ask the translator what kind of underline
        behavior should be used. React accordingly.
        (WebCore::MacGlyphToPathTranslator::nextPath): Deleted.
        (WebCore::MacGlyphToPathTranslator::incrementIndex): Deleted.
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): Update to new signature of GlyphBuffer::add()
        * rendering/svg/SVGTextRunRenderingContext.cpp: Implement new GlyphToPathTranslator functions.
        (WebCore::SVGGlyphToPathTranslator::SVGGlyphToPathTranslator):
        (WebCore::SVGGlyphToPathTranslator::getCurrentTransform):
        (WebCore::SVGGlyphToPathTranslator::path):
        (WebCore::SVGGlyphToPathTranslator::extents):
        (WebCore::MacGlyphToPathTranslator::underlineType): Calls sharedUnderlineType().
        (WebCore::SVGGlyphToPathTranslator::moveToNextValidGlyph):
        (WebCore::SVGGlyphToPathTranslator::increment):
        (WebCore::SVGTextRunRenderingContext::createGlyphToPathTranslator):
        (WebCore::SVGTextRunRenderingContext::drawSVGGlyphs):
        (WebCore::SVGGlyphToPathTranslator::nextPath): Deleted.
        (WebCore::SVGGlyphToPathTranslator::incrementIndex): Deleted.
        * rendering/svg/SVGTextRunRenderingContext.h: SVG needs the TextRun to use sharedUnderlineType.

2014-06-09  Alex Christensen  <achristensen@webkit.org>

        [iOS WebGL] Implement OES_vertex_array_object for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=133629

        Reviewed by Brady Eidson.

        Covered by the Khronos test (and in LayoutTests):
        conformance/extensions/oes-vertex-array-object.html

        * platform/graphics/ios/GraphicsContext3DIOS.h:
        Added OpenGL vertex array function renaming for iOS adding the OES suffix.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        Added isVertexArrayObjectSupported and support for iOS.
        (WebCore::Extensions3DOpenGL::supportsExtension):
        Added iOS name for GL_OES_vertex_array_object extension.
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        Added isVertexArrayObjectSupported for iOS.        

2014-06-09  Eric Carlson  <eric.carlson@apple.com>

        [Mac] caption size is not update immediately when system preferences change
        https://bugs.webkit.org/show_bug.cgi?id=133598

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::updateCaptionDisplaySizes): New.
        * Modules/mediacontrols/MediaControlsHost.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Tell the controls host to update sizes.

2014-06-09  Daniel Bates  <dabates@apple.com>

        [iOS] Amazon app: Cannot interact with product page after tapping on product image
        https://bugs.webkit.org/show_bug.cgi?id=133559
        <rdar://problem/16332749>

        Reviewed by Oliver Hunt.

        As a workaround for issues in the Amazon app, mark the attribute navigator.geolocation as
        replaceable so that we don't throw a JavaScript type error when assigning to an instance
        attribute that shadows it. At the time of writing the first such assignment to is ignored.
        See <https://bugs.webkit.org/show_bug.cgi?id=133648> for more details.

        When loading a product page in the Amazon app it overwrites the readonly property geolocation
        on an object that extends the Navigator object. In strict mode, this operation is not honored
        and is treated as a JavaScript type error, which stops JavaScript execution. Therefore, the
        product page does not behave as intended. In contrast, this operation would not be honored in
        non-strict mode and would not be treated as a JavaScript type error.

        Test: js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html

        * Modules/geolocation/NavigatorGeolocation.idl:

2014-06-09  Andreas Kling  <akling@apple.com>

        HTML*ListElement wrappers have custom getOwnPropertySlot()s for no good reason.
        <https://webkit.org/b/133653>

        The JavaScript bindings generator was a bit overzealous in forcing every
        interface with "List" in the name to have its attributes on the instance.
        This caused some elements (HTMLUListElement, etc.) to automatically opt out
        of eager prototype attribute reification.

        Reviewed by Mark Hahnenberg.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InterfaceRequiresAttributesOnInstance):

2014-06-09  Jer Noble  <jer.noble@apple.com>

        ASSERT(!m_inRemovedLastRefFunction) in Element::addShadowRoot while destroying a document
        https://bugs.webkit.org/show_bug.cgi?id=133450

        Reviewed by Eric Carlson.

        ensureUserAgentShadowRoot() is being called when a media element is removed from its document
        in HTMLMediaElement::removedFrom() because Node::removedFrom() has not yet run and removed the
        InDocument flag from the node.  Rather than calling configureMediaControls() at this point
        just expilictly remove the media controls if present.

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

2014-06-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rebaseline bindings tests after r169703

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectPrototype::finishCreation):
        (WebCore::JSTestActiveDOMObjectPrototype::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterPrototype::finishCreation):
        (WebCore::JSTestCustomNamedGetterPrototype::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorPrototype::finishCreation):
        (WebCore::JSTestEventConstructorPrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestEventConstructor::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetPrototype::finishCreation):
        (WebCore::JSTestEventTargetPrototype::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionPrototype::finishCreation):
        (WebCore::JSTestExceptionPrototype::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachablePrototype::finishCreation):
        (WebCore::JSTestGenerateIsReachablePrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestGenerateIsReachable::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfacePrototype::finishCreation):
        (WebCore::JSTestInterfacePrototype::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerPrototype::finishCreation):
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestMediaQueryListListener::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorPrototype::finishCreation):
        (WebCore::JSTestNamedConstructorPrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestNamedConstructor::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodePrototype::finishCreation):
        (WebCore::JSTestNodePrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestNode::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicPrototype::finishCreation):
        (WebCore::JSTestNondeterministicPrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestNondeterministic::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::JSTestObjPrototype::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsPrototype::finishCreation):
        (WebCore::JSTestOverloadedConstructorsPrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestOverloadedConstructors::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::finishCreation):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsPrototype::finishCreation):
        (WebCore::JSTestTypedefsPrototype::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributePrototype::finishCreation):
        (WebCore::JSattributePrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSattribute::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyPrototype::finishCreation):
        (WebCore::JSreadonlyPrototype::getOwnPropertySlot): Deleted.
        (WebCore::JSreadonly::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSreadonly.h:

2014-06-09  Simon Fraser  <simon.fraser@apple.com>

        Group the methods in InternalSettings.idl
        https://bugs.webkit.org/show_bug.cgi?id=133652

        Reviewed by Tim Horton.

        Group methods by topic.

        * testing/InternalSettings.idl:

2014-06-05  Mark Hahnenberg  <mhahnenberg@apple.com>

        Eagerly reify DOM prototype attributes
        https://bugs.webkit.org/show_bug.cgi?id=133558

        Reviewed by Oliver Hunt.

        No new tests.

        This allows us to get rid of a lot of the additional overhead of pushing DOM attributes up into the prototype. 
        By eagerly reifying the custom getters and setters into the actual JSObject we avoid having to override 
        getOwnPropertySlot for all of the DOM prototypes, which is a lot of the overhead of doing property lookups on 
        DOM wrappers.

        * bindings/scripts/CodeGeneratorJS.pm:
        (prototypeHashTableAccessor): Changed to pass along the VM.
        (AttributeShouldBeOnInstanceForCompatibility): We were being overly conservative in regard to touch events. 
        This caused us to store the touch event handler getters and setters on the JSElement instance, which caused
        us to override getOwnPropertySlot for every JSElement subclass.
        (InstanceOverridesGetOwnPropertySlot): This was being overly paranoid about generate a getOwnPropertySlot if
        there was going to be a "constructor" property, even though we handled this in another place already.
        (GenerateHeader): Generate a finishCreation for prototypes unless it's the JSDOMWindow. We can't correctly 
        handle the DOMWindow in this version of the patch because reifying the static properties requires a global object,
        which hasn't been created yet when the prototype for the window object is being created.
        (GenerateImplementation): Generate the finishCreation calls to reifyStaticProperties.

2014-06-09  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r169681): Three tests are broken
        https://bugs.webkit.org/show_bug.cgi?id=133646

        Reviewed by Tim Horton.

        r169681 removed platformFocusRingMaxWidth() override, which returned either 0 or 9
        on Mac. But the cross-platform default is 3, so this changed Mac behavior.

        I'm not entirely sure why the cross-platform default is 3 (it was also added in r168397),
        but restoring the override to return 0 fixes test cases.

        While at it, also added final/override, and removed some functions that were only
        needed by subclasses, which we now have none.

        * rendering/RenderThemeMac.h:
        (WebCore::RenderThemeMac::supportsControlTints): Deleted.
        (WebCore::RenderThemeMac::scrollbarControlSizeForPart): Deleted.
        (WebCore::RenderThemeMac::supportsSelectionForegroundColors): Deleted.
        (WebCore::RenderThemeMac::supportsClosedCaptioning): Deleted.
        (WebCore::RenderThemeMac::updateActiveState): Deleted.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformFocusRingMaxWidth):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2014-06-09  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Bound RasterShapeInterval size to int
        https://bugs.webkit.org/show_bug.cgi?id=133576

        Reviewed by Simon Fraser.

        Everything in the code assumes that the interval size will always fit
        in an int. However, to make sure there are no negatives, the
        RasterShapeInterval constructor takes an unsigned. This clamps that
        value to make sure we can't overflow an int later.

        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals):

2014-06-09  Zalan Bujtas  <zalan@apple.com>

        [iOS] Gaps below and to the right of the video controls on devour.com
        https://bugs.webkit.org/show_bug.cgi?id=133607

        Reviewed by Simon Fraser.

        Non-toplevel compositing layers are device pixel aligned. In order to render the content
        to the same position as if the layer was not aligned, the graphics layer needs to be translated.
        CALayer::bounds is set to compensate for the shifted layer. However, we should not change the layer's
        size as that stretches the content and results in overlaps/gaps/extra fuzziness.

        Test: compositing/contents-scale/hidpi-compositing-layer-positioned-on-scaled-context.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::computePixelAlignment): remove old epsilon adjustment code.
        * platform/graphics/ca/GraphicsLayerCA.h:

2014-06-09  Zalan Bujtas  <zalan@apple.com>

        [SVG] Subpixel rendering: Mask with transformed text does not render.
        https://bugs.webkit.org/show_bug.cgi?id=133626
        <rdar://problem/17123070>

        Reviewed by Simon Fraser.

        Replace IntRect::infiniteRect() with Layout::infiniteRect(). A transformed IntRect::infiniteRect()
        overflows and produces invalid repaint rect. -also remove IntRect::infiniteRect() as no one calls
        it anymore.

        Tests: svg/masking/mask-transformed-text-missing-expected.svg
               svg/masking/mask-transformed-text-missing.svg

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::infiniteRect): Deleted.
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer):

2014-06-08  Dean Jackson  <dino@apple.com>

        [Mac] checkboxes and radio buttons animate incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=133619
        <rdar://problem/16478676>

        Reviewed by Sam Weinig.

        As many people have noticed, the new checkboxes and radio
        buttons jump around during their animation. To fix this
        I've added yet another magic set of numbers to our
        native form positioning - this time the placement
        of the controls when rendering on the animated path.
        This is quite annoying, since there doesn't appear
        to be any pattern to the offsets (or margins) given
        a control size, and this case also needed a sub-pixel
        offset to display correctly on retina machines.

        * platform/mac/ThemeMac.mm:
        (WebCore::checkboxMargins): Add comment so I know what the values mean.
        (WebCore::checkboxOffsets): Add the magic translation values for animated states.
        (WebCore::radioMargins): Ditto.
        (WebCore::radioOffsets):
        (WebCore::paintToggleButton): Paint with these new offsets.

2014-06-07  Dean Jackson  <dino@apple.com>

        Regression r168397 - Form layout is incorrect on OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=133612
        <rdar://problem/16850492>
        <rdar://problem/17016914>

        Reviewed by Anders Carlson.

        Revision 168397 introduced a new animated style of form controls. Part of
        it included extending the margins for the controls to take into account the
        focus ring that animates in from a large radius to a small radius. This
        caused two problems:

        - the incorrect margins broke many layouts
        - despite increased margins, there were still some areas
          that did not repaint correctly.

        Restore the old margins and (temporarily) turn off focus ring animation.
        Bad layout is much worse than a missing animation. Another benefit
        of this is that we will use less memory.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::drawFocusRingToContextAtTime): Pass in a time far far far in the future to
        get the static rendering.
        * platform/mac/ThemeMac.mm:
        (WebCore::checkboxMargins): Restore correct margins.
        (WebCore::radioMargins): Ditto.
        (WebCore::drawCellFocusRing): New method that calls WKSI with a future time.
        (WebCore::paintToggleButton): Call the new wrapper.
        (WebCore::buttonMargins): Restore correct margins.
        (WebCore::paintButton): Call the new wrapper.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList): Use a future time.
        (WebCore::RenderThemeMac::platformFocusRingMaxWidth): Deleted. Use old outline value.

2014-05-29  Anders Carlsson  <andersca@apple.com>

        HTTPHeaderMap should not derive from HashMap
        https://bugs.webkit.org/show_bug.cgi?id=133392

        Reviewed by Darin Adler.

        Use a HashMap member variable instead.

        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        (WebCore::HTTPHeaderMap::adopt):
        (WebCore::HTTPHeaderMap::get):
        (WebCore::HTTPHeaderMap::set):
        (WebCore::HTTPHeaderMap::add):
        (WebCore::HTTPHeaderMap::contains):
        (WebCore::HTTPHeaderMap::find):
        (WebCore::HTTPHeaderMap::remove):
        (WebCore::HTTPHeaderMap::keys):
        * platform/network/HTTPHeaderMap.h:
        (WebCore::HTTPHeaderMap::isEmpty):
        (WebCore::HTTPHeaderMap::size):
        (WebCore::HTTPHeaderMap::clear):
        (WebCore::HTTPHeaderMap::begin):
        (WebCore::HTTPHeaderMap::end):
        (WebCore::HTTPHeaderMap::operator==):
        (WebCore::HTTPHeaderMap::operator!=):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        * platform/network/ResourceResponseBase.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2014-06-07  Zan Dobersek  <zdobersek@igalia.com>

        Use C++11 lambdas to construct FileThread::Task objects
        https://bugs.webkit.org/show_bug.cgi?id=133079

        Reviewed by Darin Adler.

        Have FileThread::Task constructor take in a std::function<void ()>-like object
        as the second parameter. Much like with ScriptExecutionContext::Task, the idea here
        is to use inlined C++11 lambdas in FileThread::postTask() calls. Because FileThread::Task
        also requires an instance pointer, a brace-init list is passed to these calls, passing
        in the instance pointer as the first parameter and the C++11 lambda as the second.

        FileThread::postTask() now takes in a FileThread::Task rvalue and moves it onto the heap
        and into the queue.

        In AsyncFileStream.cpp, calls to FileThread::postTask() are updated to use C++11 lambdas.
        Uses of MainThreadTask are also replaced by C++11 lambdas. This modernizes the code and
        removes a lot of helper functions.

        FileThread::Task doesn't use CrossThreadCopier anymore. Instead, we manually produce
        thread-safe copies as necessary. At the moment this approach produces another copy when
        passing the freshly-copied object into the lambda, but this will be avoidable once we
        make C++14 and the lambda capture expression support mandatory.

        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::create):
        (WebCore::AsyncFileStream::stop):
        (WebCore::AsyncFileStream::getSize):
        (WebCore::AsyncFileStream::openForRead):
        (WebCore::AsyncFileStream::openForWrite):
        (WebCore::AsyncFileStream::close):
        (WebCore::AsyncFileStream::read):
        (WebCore::AsyncFileStream::write):
        (WebCore::AsyncFileStream::truncate):
        (WebCore::didStart): Deleted.
        (WebCore::AsyncFileStream::startOnFileThread): Deleted.
        (WebCore::derefProxyOnMainThread): Deleted.
        (WebCore::AsyncFileStream::stopOnFileThread): Deleted.
        (WebCore::didGetSize): Deleted.
        (WebCore::AsyncFileStream::getSizeOnFileThread): Deleted.
        (WebCore::didOpen): Deleted.
        (WebCore::AsyncFileStream::openForReadOnFileThread): Deleted.
        (WebCore::AsyncFileStream::openForWriteOnFileThread): Deleted.
        (WebCore::AsyncFileStream::closeOnFileThread): Deleted.
        (WebCore::didRead): Deleted.
        (WebCore::AsyncFileStream::readOnFileThread): Deleted.
        (WebCore::didWrite): Deleted.
        (WebCore::AsyncFileStream::writeOnFileThread): Deleted.
        (WebCore::didTruncate): Deleted.
        (WebCore::AsyncFileStream::truncateOnFileThread): Deleted.
        * fileapi/AsyncFileStream.h:
        * fileapi/FileThread.cpp:
        (WebCore::FileThread::postTask):
        * fileapi/FileThread.h:
        (WebCore::FileThread::Task::Task):

2014-06-07  Zan Dobersek  <zdobersek@igalia.com>

        Pass C++11 lambdas to callOnMainThread() calls in IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=133374

        Reviewed by Darin Adler.

        Use C++11 lambads to inline the main thread tasks into the calling code,
        modernizing the look of the code and removing a few static methods and
        classes that were used as helpers.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::dispatchDidImportIconURLForPageURLOnMainThread):
        (WebCore::IconDatabase::dispatchDidImportIconDataForPageURLOnMainThread):
        (WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread):
        (WebCore::IconDatabase::dispatchDidFinishURLImportOnMainThread):
        (WebCore::IconDatabase::notifyPendingLoadDecisionsOnMainThread): Deleted.
        (WebCore::IconDatabase::performScheduleOrDeferSyncTimer): Deleted.
        (WebCore::IconDatabase::performScheduleOrDeferSyncTimerOnMainThread): Deleted.
        (WebCore::ClientWorkItem::ClientWorkItem): Deleted.
        (WebCore::ClientWorkItem::~ClientWorkItem): Deleted.
        (WebCore::ImportedIconURLForPageURLWorkItem::ImportedIconURLForPageURLWorkItem): Deleted.
        (WebCore::ImportedIconURLForPageURLWorkItem::~ImportedIconURLForPageURLWorkItem): Deleted.
        (WebCore::ImportedIconURLForPageURLWorkItem::performWork): Deleted.
        (WebCore::ImportedIconDataForPageURLWorkItem::ImportedIconDataForPageURLWorkItem): Deleted.
        (WebCore::ImportedIconDataForPageURLWorkItem::~ImportedIconDataForPageURLWorkItem): Deleted.
        (WebCore::ImportedIconDataForPageURLWorkItem::performWork): Deleted.
        (WebCore::RemovedAllIconsWorkItem::RemovedAllIconsWorkItem): Deleted.
        (WebCore::RemovedAllIconsWorkItem::performWork): Deleted.
        (WebCore::FinishedURLImport::FinishedURLImport): Deleted.
        (WebCore::FinishedURLImport::performWork): Deleted.
        (WebCore::performWorkItem): Deleted.
        * loader/icon/IconDatabase.h:

2014-06-07  Zan Dobersek  <zdobersek@igalia.com>

        Replace uses of CrossThreadTask in DefaultSharedWorkerRepository, WorkerMessagingProxy with C++11 lambdas
        https://bugs.webkit.org/show_bug.cgi?id=133375

        Reviewed by Darin Adler.

        Uses of CrossThreadTask in the two classes are replaced with C++11 lambdas.
        The necessary cross-thread copies are created manually and passed into the
        lambdas by value, removing the need for CrossThreadTask and its use of CrossThreadCopier.

        Remove the explicit use of this pointer in some lambdas -- it is captured automatically when
        capturing by value, so enforcing its capturing through explicit use is not necessary.

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        (WebCore::postExceptionTask): Deleted.
        (WebCore::postConsoleMessageTask): Deleted.
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        (WebCore::WorkerMessagingProxy::connectToInspector):
        (WebCore::WorkerMessagingProxy::disconnectFromInspector):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        (WebCore::WorkerMessagingProxy::confirmMessageFromWorkerObject):
        (WebCore::WorkerMessagingProxy::reportPendingActivity):
        (WebCore::postConsoleMessageTask): Deleted.
        (WebCore::WorkerMessagingProxy::workerObjectDestroyedInternal): Deleted.
        (WebCore::connectToWorkerGlobalScopeInspectorTask): Deleted.
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask): Deleted.
        (WebCore::dispatchOnInspectorBackendTask): Deleted.
        * workers/WorkerMessagingProxy.h:

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

        Scheme of content utils should be compared in an ASCII case-insensitive manner
        https://bugs.webkit.org/show_bug.cgi?id=133502

        Reviewed by Darin Adler.

        According to spec, scheme must be compared in an ASCII case-insensitive manner by user agents.

        Covered by existing tests.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::isProtocolWhitelisted):

2014-06-06  Andreas Kling  <akling@apple.com>

        Indexed getters should return values directly on the PropertySlot.
        <https://webkit.org/b/133586>

        Make indexed getters more efficient by using PropertySlot::setValue()
        to pass the value directly back through the slot, instead of giving it
        a function pointer that JSC would then immediately call back through
        to retrieve the value.

        The function pointer approach would make sense if we did inline caching
        of indexed getters but since we currently don't, this is pure overhead.

        Reviewed by Darin Adler.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertySlotDelegate):
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback): Deleted.
        (WebCore::cssPropertyGetterCallback): Deleted.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::indexGetter): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateHeader):
        (GetIndexedGetterExpression):
        (GenerateImplementation):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertySlotByIndex):
        (JSC::RuntimeArray::indexGetter): Deleted.
        * bridge/runtime_array.h:

2014-06-06  Brent Fulgham  <bfulgham@apple.com>

        GenericCueData elements prematurely removed
        https://bugs.webkit.org/show_bug.cgi?id=133588

        Reviewed by Eric Carlson.

        Add a 'removeCompletedCues' method instead of using the 'resetCueValues' method
        after processing new cues. We do not want to reset cue state if we have pending
        cues that are being extended by future updates (such as paint-on cues).

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue):  Call new 'removeCompletedCues' method.
        (WebCore::InbandTextTrackPrivateAVF::removeCompletedCues): Added.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

2014-06-06  Brady Eidson  <beidson@apple.com>

        Initialize a char* that needs to be initialized.
        <rdar://problem/15840022> and https://bugs.webkit.org/show_bug.cgi?id=133585

        Reviewed by Mark Rowe.

        r152134 (erroneously) removed this initialization.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare): tail should start out initialized to 0.

2014-06-06  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Support pasting HTML
        https://bugs.webkit.org/show_bug.cgi?id=133581
        <rdar://problem/17070305>

        Reviewed by Enrica Casucci.

        We can probably share a lot of code between Mac and iOS here, but for now, just
        implement the unimplemented functions.

        * editing/ios/EditorIOS.mm: (WebCore::Editor::WebContentReader::readHTML):
        Implemented based on WebArchive reading code above, and on Mac version of readHTML.
        Unlike on Mac, we don't need to support Microsoft CF_HTML format, as nothing
        generates it.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::supportedPasteboardTypes):
        Added HTML support, as the second preferred format after WebArchive.

2014-06-06  Alexey Proskuryakov  <ap@apple.com>

        Try to fix the build after http://trac.webkit.org/changeset/169655

        Unfortunately, the fix is very fragile, and will likely not work for some SDKs
        or possibly local headers - all OS versions have multiple SecBsse.h headers with
        different definitions for SecIdentityRef.

        We'll see.

        * WebCore.exp.in:

2014-06-06  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/17095692> [iOS] Client-certificate authentication isn’t working
        https://bugs.webkit.org/show_bug.cgi?id=133527

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported some Credential member functions.

2014-06-06  Dean Jackson  <dino@apple.com>

        [iOS WebGL] Float texture extension has a slightly different name
        https://bugs.webkit.org/show_bug.cgi?id=133580
        <rdar://problem/17113451>

        Reviewed by Brady Eidson.

        Floating point textures were not available on iOS, because we were
        looking for the wrong extension.

        Covered by the Khronos test (and in LayoutTests):
        conformance/extensions/oes-texture-float.html

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): Look for GL_OES_texture_float
        as well as GL_ARB_texture_float.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D): Increase the set of things skipped
        on PLATFORM(IOS) since they are supported natively there.

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

        REGRESSION: Hit testing of composited elements is broken in new multicolumn layout.
        https://bugs.webkit.org/show_bug.cgi?id=133522 (<rdar://problem/17060556>)
        
        Reviewed by Simon Fraser.

        Hit testing for the new columns doesn't care about compositing but does still
        need a pagination layer set to work. The old column code didn't care about this
        because it was top down (and wrong). The new code lets each layer paint and hit
        test its own fragments, so having a pagination layer set suddenly becomes relevant
        for composited layers.
    
        The solution is to cache whether or not the pagination layer crosses a compositing
        boundary, and then to force call sites of enclosingPaginationLayer to pass an argument
        indicating whether compositing layers should be included. Typically painting wants to
        exclude them but hit testing wants to include them.

        * page/FrameView.cpp:
        (WebCore::updateLayerPositionFlags):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updatePagination):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::enclosingPaginationLayerInSubtree):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2014-06-06  Kiran  <kiran.guduru@samsung.com>

        [MediaStream] 'get' prefix is missing for capabilities and constraints.
        https://bugs.webkit.org/show_bug.cgi?id=133573

        Reviewed by Eric Carlson.

        Modified the existing MediaStreamTrack.html to test the changes.

        As per the Media Capture and Streams spec method names constreaints and
        capabilities should be prefixed by 'get'. So updated the method names.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::getConstraints):
        (WebCore::MediaStreamTrack::getCapabilities):
        (WebCore::MediaStreamTrack::constraints): Deleted.
        (WebCore::MediaStreamTrack::capabilities): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:

2014-06-05  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(169440): Repro crash when playing a video with captions
        https://bugs.webkit.org/show_bug.cgi?id=133459
        <rdar://problem/17079081>

        Reviewed by Eric Carlson.

        The change I made in r169440 introduced a crash for paint-on captions. This
        resolves the problem as follows:
        1. No longer attempt to modify the start/endTime in the TextTrack implementation.
        2. Check for extensions to existing cues when we are about to add new arriving
           cues. If they extend a current pending cue, don't set an end-time for the
           pending cue, and throw away the new duplicate. Otherwise set the end time
           as previously and continue.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue): Remove 'doesExtendCue' case since this is
        no longer possible.
        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::doesExtendCueData): Added.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue): Check for cues extending
        other cues and handle appropriately.

2014-06-06  Brent Fulgham  <bfulgham@apple.com>

        ROLLOUT: r169630: Caused a retain cycle.
        https://bugs.webkit.org/show_bug.cgi?id=133463
        <rdar://problem/17098100>

        Rolling out this change as it introduced a retain cycle.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::setControllerJSObject): Deleted.
        * Modules/mediacontrols/MediaControlsHost.h:
        (WebCore::MediaControlsHost::controllerJSValue):
        (WebCore::MediaControlsHost::setControllerJSValue):
        (WebCore::MediaControlsHost::controllerJSObject): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-06-05  Dean Jackson  <dino@apple.com>

        StyleResolver doesn't compile without CSS_GRID_LAYOUT enabled
        https://bugs.webkit.org/show_bug.cgi?id=133568

        Reviewed by Tim Horton.

        * css/StyleResolver.cpp:
        (WebCore::isDisplayGridBox): Add UNUSED_PARAM.

2014-06-05  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Region box incorrectly overlaps floating box
        https://bugs.webkit.org/show_bug.cgi?id=133545

        Reviewed by David Hyatt.

        A region box creates a BFC and it should not overlap a floating box in the same formatting context: http://www.w3.org/TR/CSS21/visuren.html#bfc-next-to-float

        Test: fast/regions/region-as-bfc-avoids-float.html

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

2014-06-05  Yoav Weiss  <yoav@yoav.ws>

        Align srcset parser with recent spec changes
        https://bugs.webkit.org/show_bug.cgi?id=133504

        Reviewed by Darin Adler.

        New tests were added to fast/hidpi/image-srcset-invalid-descriptor.html

        The srcset parser changes align it with the spec:
        http://picture.responsiveimages.org/#parse-srcset-attr.
        The spec changes are meant to give the parser better future
        compatibility, and enable it to work well with the 'w' descriptor, the
        soon to be added 'h' descriptor and function descriptors (e.g.
        future-descriptor(a, b, c) ).

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setBestFitURLAndDPRFromImageCandidate):
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLImageElement.h:
        * html/parser/HTMLParserIdioms.h:
        (WebCore::isHTMLSpace):
        (WebCore::isComma):
        (WebCore::isHTMLSpaceOrComma):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::compareByDensity):
        (WebCore::appendDescriptorAndReset):
        (WebCore::appendCharacter):
        (WebCore::isEOF):
        (WebCore::tokenizeDescriptors):
        (WebCore::stringViewToFloat):
        (WebCore::stringViewToInt):
        (WebCore::parseDescriptors):
        (WebCore::parseImageCandidatesFromSrcsetAttribute):
        (WebCore::pickBestImageCandidate):
        (WebCore::bestFitSourceForImageAttributes):
        (WebCore::compareByScaleFactor): Deleted.
        (WebCore::parseImagesWithScaleFromSrcsetAttribute): Deleted.
        * html/parser/HTMLSrcsetParser.h:
        (WebCore::DescriptorParsingResult::DescriptorParsingResult):
        (WebCore::DescriptorParsingResult::hasDensity):
        (WebCore::DescriptorParsingResult::hasWidth):
        (WebCore::DescriptorParsingResult::hasHeight):
        (WebCore::DescriptorParsingResult::density):
        (WebCore::DescriptorParsingResult::resourceWidth):
        (WebCore::DescriptorParsingResult::resourceHeight):
        (WebCore::DescriptorParsingResult::setResourceWidth):
        (WebCore::DescriptorParsingResult::setResourceHeight):
        (WebCore::DescriptorParsingResult::setDensity):
        (WebCore::ImageCandidate::ImageCandidate):
        (WebCore::ImageCandidate::toString):
        (WebCore::ImageCandidate::url):
        (WebCore::ImageCandidate::setDensity):
        (WebCore::ImageCandidate::density):
        (WebCore::ImageCandidate::resourceWidth):
        (WebCore::ImageCandidate::srcOrigin):
        (WebCore::ImageCandidate::isEmpty):
        (WebCore::ImageWithScale::ImageWithScale): Deleted.
        (WebCore::ImageWithScale::imageURL): Deleted.
        (WebCore::ImageWithScale::scaleFactor): Deleted.
        * html/parser/ParsingUtilities.h: Renamed from Source/WebCore/html/track/ParsingUtilities.h.
        (skipExactly):
        (skipUntil):
        (skipWhile):
        (reverseSkipWhile):

2014-06-05 Wenson Hsieh  <wenson_hsieh@apple.com>

        Current media controls look different from previous media controls. Adjusted CSS to make media elements more similar by adding padding, adjusting hues/svg, resizing elements, etc.

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

        Reviewed by Eric Carlson.

        The main issues:
        - The widths between elements of both audio and video players are incorrect.
        - The hues of audio player elements are incorrect.
        - The hues of video player elements are content dependent (refer to full-screen mode), and this cannot be exactly replicated using just css. This patch only attempts to make them more similar.
        - The height of the audio player is incorrect.

        Test: platform/ios-sim/media/audio-width.html

        * Modules/mediacontrols/mediaControlsiOS.css: Updated style elements for audio/video elements.
        (::-webkit-media-controls): Enforce a minimum width on audio/video controls.
        (audio): Enforce a minimum width on audio elements.
        (audio::-webkit-media-controls): see below
        (audio::-webkit-media-controls-wireless-playback-picker-button): modified SVG, hue and width/height.
        (audio::-webkit-media-controls-panel): adjusted hue, added left/right padding.
        (audio::-webkit-media-controls-fullscreen-button): removed. There's no fullscreen for audio anyways.
        (audio::-webkit-media-controls-current-time-display): adjusted font size, added left padding.
        (audio::-webkit-media-controls-time-remaining-display): adjusted font size, added right padding.

        (video::-webkit-media-controls-panel): adjusted hue, added left/right padding.
        (video::-webkit-media-controls-current-time-display): added left padding.
        (video::-webkit-media-controls-time-remaining-display): added right padding.
        (video::-webkit-media-controls-wireless-playback-picker-button): modified SVG, hue, opacity and width/height.
        (video::-webkit-media-controls-fullscreen-button): modified SVG, hue, opacity, and width/height. In particular, made the svg seem sharper.
        (video::-webkit-media-controls-play-button): modified SVG, hue, opacity, and width/height.

2014-06-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r169570.
        https://bugs.webkit.org/show_bug.cgi?id=133565

        It breaks Baidu (Requested by benjaminp on #webkit).

        Reverted changeset:

        "[iOS] Start ignoring common bogus viewport parameters"
        https://bugs.webkit.org/show_bug.cgi?id=133466
        http://trac.webkit.org/changeset/169570

2014-06-05  Michael Timbrook  <timbrook@apple.com>

        AX: Add support for ARIA 1.1 'none' role
        https://bugs.webkit.org/show_bug.cgi?id=133367

        Reviewed by Chris Fleizach.

        Added support for the 'none' role by added a lookup for it to go to PresentationalRole
        Test: accessibility/aria-none-role.html

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

2014-06-05  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Children of tables and lists with role='presentation' should each be exposed as if they were div elements
        https://bugs.webkit.org/show_bug.cgi?id=133133

        Reviewed by Chris Fleizach.

        When a table or list has role='presentation', accessibility is "ignored"
        for that element, but not for the required children. The default roles
        for the children (CellRole and ListItemRole) do not make sense without
        the parent, therefore map them to DivRole in ATK if they inherit the
        presentational role.

        Test: accessibility/aria-inherits-presentational.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::inheritsPresentationalRole):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2014-06-05  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r167962): Out of bounds read in JSC::StructureIDTable::get() 
        https://bugs.webkit.org/show_bug.cgi?id=133463
        <rdar://problem/17098100>

        Reviewed by Dean Jackson.

        Revise MediaControllerHost implementation so that it holds a Strong
        reference to the JavaScript 'Controller' object it mirrors. The
        MediaControllerHost is constructed when we create an HTMLMediaElement,
        and is the logical place to retain ownership of the JS object so that
        it does not get garbage collected as long as HTMLMediaElement exists.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::setControllerJSObject): Create a strong
        reference to the JavaScript Controller object.
        * Modules/mediacontrols/MediaControlsHost.h: Use JSC::Strong to hold a
        JSObject, rather than a bare JSValue.
        (WebCore::MediaControlsHost::controllerJSObject): Change name to reflect
        that we are working with JSObjects, not JSValues.
        (WebCore::MediaControlsHost::controllerJSValue): Deleted.
        (WebCore::MediaControlsHost::setControllerJSValue): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Revise for changed method
        signature.

2014-06-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add device orientation
        https://bugs.webkit.org/show_bug.cgi?id=133530

        Reviewed by Tim Horton.

        Previously, WebCore was getting the orientation directly from the WebKit layer.
        This had to be done during the frame creation and was very fragile.

        Frame is changed to pull the value from the chrome client. That way we avoid races
        and we can maintain a single value for all frames.

        Sending the values to all the subframes is aslo done here so that we do not have to repeat
        it in both WebKit layers.

        * WebCore.exp.in:
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::orientationChanged):
        (WebCore::Frame::orientation):
        (WebCore::Frame::sendOrientationChangeEvent): Deleted.
        * page/Frame.h:
        (WebCore::Frame::orientation): Deleted.

2014-06-05  Timothy Horton  <timothy_horton@apple.com>

        Fix the !CACHE_SUBIMAGES build

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):

2014-06-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Clean up StackAllocator
        https://bugs.webkit.org/show_bug.cgi?id=133506

        Reviewed by Benjamin Poulain.

        Cleaning up CSS JIt StackAllocator code. Sharing push / pop code and
        using information provided by MacroAssembler more aggressively
        to drop ifdefs.

        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::allocateUninitialized):
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):
        (WebCore::StackAllocator::popAndDiscard):
        (WebCore::StackAllocator::popAndDiscardUpTo):
        (WebCore::StackAllocator::alignStackPreFunctionCall):
        (WebCore::StackAllocator::unalignStackPostFunctionCall):
        (WebCore::StackAllocator::stackUnitInBytes):

2014-06-05  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: border-radius painting falls back to rectangle when the snapped rounded rect becomes non-renderable.
        https://bugs.webkit.org/show_bug.cgi?id=133491

        Reviewed by Simon Fraser.

        Pixel snapping can change the rectangle's size when it is on a certain subpixel position. (usually it does not)
        This patch ensures that the snapped rect is still renderable by adjusting the radii as well.

        Test: fast/borders/hidpi-border-radius-with-subpixel-margin-not-renderable.html

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::scale):
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting):
        * platform/graphics/RoundedRect.h:

2014-06-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r169587.
        https://bugs.webkit.org/show_bug.cgi?id=133552

        Calls a pure virtual method, crashes (Requested by ap on
        #webkit).

        Reverted changeset:

        "WebKit should adopt journal_mode=wal for all SQLite
        databases."
        https://bugs.webkit.org/show_bug.cgi?id=133496
        http://trac.webkit.org/changeset/169587

2014-06-05  Frédéric Wang  <fred.wang@free.fr>

        Apply Character-level mirroring to stretchy operators in RTL mode.
        https://bugs.webkit.org/show_bug.cgi?id=130839

        Reviewed by Chris Fleizach.

        We add support for character-level mirroring for stretchy MathML operators in RTL mode.
        Glyph-level mirroring (via the rtlm OpenType feature) will be handled in bug 130840.

        Test: mathml/presentation/stretchy-rtl.html

        * rendering/mathml/RenderMathMLOperator.cpp: reorganize the Unicode stretchyCharacters table to make mirroring easy.
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths): pass the right boolean to glyphDataForCharacter.
        (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator): ditto
        (WebCore::RenderMathMLOperator::findStretchyData): ditto and change the index for the stretchyCharacters fallback.
        (WebCore::RenderMathMLOperator::updateStyle): pass the right boolean to glyphDataForCharacter.
        (WebCore::RenderMathMLOperator::paint): remove the FIXME comment.
        (WebCore::RenderMathMLOperator::paintVerticalGlyphAssembly): switch the leading/trailing space in RTL mode.

2014-06-05  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Buttons in default media controls shift vertically when controls fade in or out.
        https://bugs.webkit.org/show_bug.cgi?id=133488

        Reviewed by Simon Fraser.

        Filter effects are not subpixel aware yet. They paint to integrally sized image buffers.
        In order to ensure that the content is rendered to the the same position on the filter 
        source context as if there was no filter, the repaint rects need to be adjusted to match with
        the internal filter snapping (enclosingIntRect).
        This is a temporary change until after filter effects get subpixelized.

        However, this changeset regresses RenderNameFlow clipping when the content is on subpixel position
        and filter effect is present. Instead of adding the failing test cases to TestExpectations, I removed
        the video controls from the <video> to make the tests pass, when possible (they just happen to have <video>)
        and filed webkit.org/b/133523 to track the regression.

        Test: css3/filters/filter-is-on-subpixel-position.html

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

2014-06-05  Kiran  <kiran.guduru@samsung.com>

        [MediaStream] MediaStream.addTrack should not check for tracks ended state.
        https://bugs.webkit.org/show_bug.cgi?id=133510

        Reviewed by Eric Carlson.

        Adding and removing of tracks to a MediaStream should not have dependency
        on tracks state. So the check for MediaStreamTrack's ended state has been
        removed while adding a track in MediaStreamPrivate.cpp.

        Test: fast/mediastream/MediaStream-add-ended-tracks.html

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::addTrack):

2014-06-05  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Remove ScrollViewGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=133535

        Reviewed by Carlos Garcia Campos.

        Because GTK+ WK1 was removed, we don't have to consider special cases
        handled in ScrollViewGtk.cpp.

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

        * PlatformGTK.cmake:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollbarModes):
        (WebCore::ScrollView::visibleContentRectInternal):
        * platform/gtk/ScrollViewGtk.cpp: Removed.

2014-06-05  Frédéric Wang  <fred.wang@free.fr>

        MathML operators not stretched horizontally
        https://bugs.webkit.org/show_bug.cgi?id=72828

        Reviewed by Chris Fleizach.

        This patch adds basic horizontal stretching rules for operators inside
        an <munder>, <mover> or <munderover> elements. The stretchy operators
        in such an element stretch to cover the size of the non-stretchy
        operators. This only works when fonts that have an OpenType MATH table
        are used.

        Tests: mathml/opentype/horizontal-LatinModern.html
               mathml/opentype/opentype-stretchy-horizontal.html
               mathml/opentype/horizontal-LatinModern-munderover.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::MathMLOperatorDictionary::ExtractKeyHorizontal): We add an ordered list of operators that have horizontal stretch direction.
        (WebCore::RenderMathMLOperator::RenderMathMLOperator): init m_Vertical
        (WebCore::RenderMathMLOperator::SetOperatorProperties): set m_Vertical by checking whether the operator is in the horizontalOperators list.
        (WebCore::RenderMathMLOperator::stretchTo): We do not stretch vertically
        if the operator has horizontal direction.
        We also add a new version stretchTo(LayoutUnit width) for horizontal stretching only.
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths): Handle horizontal stretching: the maximumGlyphWidth is the maximum of
        the base size or of the stretch size.
        (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator): Add an ASSERT to ensure that this function is only called for vertical stretching.
        (WebCore::RenderMathMLOperator::findStretchyData): Add an ASSERT to ensure that this function is not called to get the maximum width of a horizontal stretchy operator.
        We take into account m_isVertical when calling getMathVariants or computing sizes.
        There is not any Unicode-only construction for horizontal stretching, so a MATH table is required for horizontal stretching.
        (WebCore::RenderMathMLOperator::updateStyle): Ignore some code paths specific to vertical stretching and take into account the m_Vertical parameters.
        For horizontal stretching, the m_stretch*Baseline parameters are now updated to match the metrics of the size variant or of the maximum of the parts in the glyph assembly.
        (WebCore::RenderMathMLOperator::computeLogicalHeight): logicalHeight is now explicitely the sum of m_stretchHeightAboveBaseline and m_stretchDepthBelowBaseline, since it can be different from the stretchSize() in horizontal stretching.
        (WebCore::RenderMathMLOperator::paintGlyph): handle trimming for horizontal stretching.
        (WebCore::RenderMathMLOperator::fillWithVerticalExtensionGlyph): rename the function and ensure it is only call for m_isVertical.
        (WebCore::RenderMathMLOperator::fillWithHorizontalExtensionGlyph): same as fillWithVerticalExtensionGlyph, but for horizontal stretching.
        (WebCore::RenderMathMLOperator::paint): For glyph assembly, choose between paintVerticalGlyphAssembly or paintHorizontalGlyphAssembly.
        (WebCore::RenderMathMLOperator::paintVerticalGlyphAssembly): rename the function and ensure it is only call for m_isVertical.
        (WebCore::RenderMathMLOperator::paintHorizontalGlyphAssembly): same as paintVerticalGlyphAssembly but for horizontal stretching.
        * rendering/mathml/RenderMathMLOperator.h: we add a m_isVertical member to indicate the stretch direction and a m_stretchWidth to indicate the width of the stretchy character.
        We define the horizontal counterparts of fillWith*ExtensionGlyph, paint*GlyphAssembly, GlyphPaintTrimming  StretchyData.
        Finally stretchSize() takes into account the stretch direction.
        * rendering/mathml/RenderMathMLUnderOver.cpp: We override the layout() function to stretch munderover children horizontally.
        (WebCore::RenderMathMLUnderOver::layout):
        * rendering/mathml/RenderMathMLUnderOver.h: we declare layout().

2014-06-04  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Image lifetime is not properly handled for gradient shapes
        https://bugs.webkit.org/show_bug.cgi?id=133414

        Reviewed by Simon Fraser.

        Refactor computedShape() and it's helpers to be able to properly
        manage the lifetime of the image returned from StyleImage.

        This is a port of a Blink patch by Hans Muller.

        Test: fast/shapes/shape-outside-floats/shape-outside-uncached-gradient.html

        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage): Properly handle the
            lifetime of the image. Changed to use StyleImage::image() to get
            the image in all cases there's no need to special case cached
            images.
        (WebCore::ShapeOutsideInfo::computedShape): Call createShapeForImage.
        (WebCore::getShapeImageAndRect): Deleted.
        * rendering/shapes/ShapeOutsideInfo.h:

2014-06-04  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Fix off by one in creating a RasterShape
        https://bugs.webkit.org/show_bug.cgi?id=133499

        Reviewed by Darin Adler.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-shape-margin-crash.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals):
            marginY1 is supposed to be an inclusive endpoint, however, maxY()
            is an exclusive endpoint. This simply changes marginY1 into an
            exclusive endpoint.

2014-06-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Restore the visual scroll position instead of the dom scroll position when restoring states from the history
        https://bugs.webkit.org/show_bug.cgi?id=133490

        Reviewed by Tim Horton.

        Expose the WebKit1 parameter "ScaleIsInitial". It is used for a similar concept in WebKit2 (userHasChangedPageScaleFactor).

        Add "exposedContentPosition", which is the scroll position of the exposed rect.

        * history/HistoryItem.h:
        (WebCore::HistoryItem::exposedContentPosition):
        (WebCore::HistoryItem::setExposedContentPosition):
        (WebCore::HistoryItem::setScaleIsInitial):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):

2014-06-04  Alex Christensen  <achristensen@webkit.org>

        Enable WebGL on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=133503

        Reviewed by Brent Fulgham.

        No new tests, but we should enable the webgl tests soon.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):
        Check if the context and RenderBox are accelerated to use accelerated code path.
        * html/canvas/WebGLRenderingContext.h:
        Disable accelerated compositing on WebGL canvases until that works.
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        Compile fix after r166563.

2014-06-04  Benjamin Poulain  <benjamin@webkit.org>

        Regression(r169547): Crash in WebCore::styleForFirstLetter() while loading http://thenextweb.com/apple/2014/02/21/apple-confirms-acquired-testflight-creator-burstly/
        https://bugs.webkit.org/show_bug.cgi?id=133500

        Reviewed by Antti Koivisto.

        Unlike the other tree marking optimization, adding HasPseudoStyle() on an element style
        during style resolution must be conservative and not set the flag unless every other filter
        matched first.

        After r169547, the SelectorChecker was setting flags on HasPseudoStyle() during the pseudo
        element matching. If that passed but the remaining filter did not match, the element style
        could have the flag "FIRST_LETTER" while not being able to resolve a style for "FIRST_LETTER".

        When the layout code was creating the renderer, it would find the FIRST_LETTER flag on the main style
        and try to get the specific style for FIRST_LETTER. Since no rule would resolve for FIRST_LETTER,
        the style would be null and the code would be crashing when accessing its parameters.

        This patch fixes the issue by moving the style marking for pseudo element at the end of the matching.

        Test: fast/css/first-letter-on-non-matching-selectors.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        (WebCore::SelectorChecker::matchRecursively):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::match): Deleted.

2014-06-04  Eric Carlson  <eric.carlson@apple.com>

        [iOS] allow UA to specify network interface
        https://bugs.webkit.org/show_bug.cgi?id=133396

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerInterfaceName): Return settings->networkInterfaceName.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::mediaPlayerNetworkInterfaceName): Pass through the media element.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerNetworkInterfaceName):

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): If the media player
            wants to use a specific netork interface name, pass it to the AVAsset allocator.

2014-06-03  Jon Honeycutt  <jhoneycutt@apple.com>

        Pasting multiple photos on iOS only pastes one photo

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

        Reviewed by Alexey Proskuryakov.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::pasteWithPasteboard):
        Create a WebContentReader. For each pasteboard item, get the document
        fragment for that item, and add it to the reader. If we fail to get
        the fragment from the delegate, fall back to using
        webContentFromPasteboard() as before.

2014-06-04  Myles C. Maxfield  <litherum@gmail.com>

        Use references instead of pointers for non-optional arguments during text layout
        https://bugs.webkit.org/show_bug.cgi?id=133501

        Reviewed by Tim Horton.

        This patch applies some cleanup to InlineBox layout functions to take
        references instead of pointers where appropriate.

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

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights): Make the function take a
        reference to the RootInlineBox instead of a pointer. This function does some
        rounding.
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow): Make the function take a
        reference to the InlineTextBox instead of a pointer.
        (WebCore::InlineFlowBox::computeOverflow): Update call to addTextBoxVisualOverflow
        to pass a reference instead of a pointer.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection): Update call to
        computeLogicalBoxHeights to pass a reference instead of a pointer.
        (WebCore::RootInlineBox::ascentAndDescentForBox): Make the function take a
        reference to the InlineBox instead of a pointer.
        (WebCore::RootInlineBox::includeLeadingForBox): Make the function take a reference
        instead of a pointer.
        (WebCore::RootInlineBox::includeFontForBox): Ditto.
        (WebCore::RootInlineBox::includeGlyphsForBox): Ditto.
        (WebCore::RootInlineBox::includeMarginForBox): Ditto.
        * rendering/RootInlineBox.h: Move functions that are not externally called into
        a private: section. In addition, update function signatures to take references
        instead of pointers.

2014-05-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Lists styled with SVG fonts are not rendered as expected
        https://bugs.webkit.org/show_bug.cgi?id=133198

        Reviewed by Simon Fraser.

        There were a couple places in RenderListMarker and RenderMenuList that were
        implicitly creating TextRuns by passing a String to a function which
        expected a TextRun. Because TextRun has a constructor which takes a single
        String and isn't marked explicit, TextRuns were being created without
        any of the associated code that initializes the TextRun (such as creating
        a RenderingContext if necessary).

        There is currently one more client of this code that needs to be fixed.
        This is in RenderThemeIOS::adjustMenuListButtonStyle(). However, fixing
        this will be a somewhat large change, and is out of scope for this patch.
        I will submit a follow-up patch that fixes this permanently. Once this is
        fixed, I can mark TextRun's constructors as explicit.

        Test: svg/custom/list-items-with-svg-font-family.html

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Mark constructors as explicit.
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Call
        RenderBlock::constructTextRun.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Ditto.
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::updateOptionsWidth): Ditto.
        * rendering/RenderThemeIOS.mm:
        (WebCore::adjustInputElementButtonStyle): Instead of crashing, mark
        form controls rendered with SVG fonts as having 0 width. This isn't
        perfect, but fixing this is out of scope for this patch.

2014-06-04  Andreas Kling  <akling@apple.com>

        WebKit should adopt journal_mode=wal for all SQLite databases.
        <https://webkit.org/b/133496>
        <rdar://problem/15600186>

        We already had code to enable write-ahead logging, but it didn't work
        since calling SQLiteStatement::step() without first calling prepare()
        is a no-op.

        Converted it to use into a simple executeCommand() instead.

        Reviewed by Brady Eidson.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):

2014-06-04  Radu Stavila  <stavila@adobe.com>

        REGRESSION: [CSS Regions] Regions with overflow:auto generate scrollbars even if the content flows into the following regions and as such, should not be scrolled
        https://bugs.webkit.org/show_bug.cgi?id=133481

        Reviewed by Antti Koivisto.

        When enlarging the layout overflow of a scrollable region, the portion of the content that flows
        in the region must be taken into consideration. If the content continues to flow into the next
        region, the layout overflow of the current region must not be enlarged.

        Test: fast/regions/scrollable-first-region.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):

2014-06-03  Benjamin Poulain  <benjamin@webkit.org>

        Fix some corner cases of :hover and :active in quirks mode
        https://bugs.webkit.org/show_bug.cgi?id=133493

        Reviewed by Andreas Kling.

        Previously, the quirks mode of :hover and :active were evaluated from the SelectorFragment
        in fragmentOnlyMatchesLinksInQuirksMode(). There were two problems with that approach:
        1) The FragmentGenerator optimizes out some filter when they always match or can never match.
           Those fragment should still qualify :hover and :active, but they were lost
           for fragmentOnlyMatchesLinksInQuirksMode().
        2) Explicitely listing every attribute of SelectorFragment in fragmentOnlyMatchesLinksInQuirksMode()
           was extremly fragile. When :not() and :-webkit-any() were added, we forgot to update the quirks
           exceptions.

        This patch moves the quirks mode exception code from the code generator to the Fragment generator.
        The useless filters are no longer ignored for the quirks, and we don't need to update the quirks mode detection
        with every change of SelectorFragment.

        It is inefficient and ugly, but that is how that quirks is defined. It is only a problem for compilation,
        execution time remains unchanged.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::pseudoClassOnlyMatchesLinksInQuirksMode):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSpecialFailureInQuirksModeForActiveAndHoverIfNeeded):
        (WebCore::SelectorCompiler::fragmentOnlyMatchesLinksInQuirksMode): Deleted.

2014-06-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Need to check invalid scheme in navigator content utils 
        https://bugs.webkit.org/show_bug.cgi?id=133296

        Reviewed by Darin Adler.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::verifyProtocolHandlerScheme): Just fix a wrong typo.

2014-06-03  Timothy Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Zoom): Can show unpainted regions when zoom-pinching-out
        https://bugs.webkit.org/show_bug.cgi?id=133472
        <rdar://problem/15686848>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:

2014-06-03  Yoav Weiss  <yoav@yoav.ws>

        Refactor the srcset parser into its own file
        https://bugs.webkit.org/show_bug.cgi?id=133480

        Reviewed by Andreas Kling.

        No new tests, since this patch doesn't change the parser's behavior.

        This patch moves the srcset parser into its own file,
        in order to prepare the code for alignment with recent spec changes.

        * CMakeLists.txt:
        * html/HTMLImageElement.cpp:
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::compareByScaleFactor): Deleted.
        (WebCore::parseDescriptors): Deleted.
        (WebCore::parseImagesWithScaleFromSrcsetAttribute): Deleted.
        (WebCore::bestFitSourceForImageAttributes): Deleted.
        * html/parser/HTMLParserIdioms.h:
        (WebCore::ImageWithScale::ImageWithScale): Deleted.
        (WebCore::ImageWithScale::imageURL): Deleted.
        (WebCore::ImageWithScale::scaleFactor): Deleted.
        * html/parser/HTMLPreloadScanner.cpp:
        * html/parser/HTMLSrcsetParser.cpp: Added.
        (WebCore::compareByScaleFactor):
        (WebCore::parseDescriptors):
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        (WebCore::bestFitSourceForImageAttributes):
        * html/parser/HTMLSrcsetParser.h: Added.
        (WebCore::ImageWithScale::ImageWithScale):
        (WebCore::ImageWithScale::imageURL):
        (WebCore::ImageWithScale::scaleFactor):

2014-06-03  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] accessibility/textarea-selected-text-range.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=133479

        Reviewed by Chris Fleizach.

        Implement atk_text_set_caret_offset() in terms of
        atk_text_set_selection() for zero-length selections.

        No new tests needed, the following test should just start
        passing again now: accessibility/textarea-selected-text-range.html.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextSetCaretOffset): Reimplemented this function
        in terms of webkitAccessibleTextSetSelection().

2014-06-03  Alex Christensen  <achristensen@webkit.org>

        Corrected arm64 assertion in css jit.

        Rubber stamped by Benjamin Poulain.

        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::pop):
        Changed assertion from incorrectly matching x86_64 to using the correct minimum offset,
        taking into account that a stackUnitInBytes is used for two registers on arm64
        except the last stack unit, which could only be used for one register if there are
        an odd number of registers.

2014-06-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS] Start ignoring common bogus viewport parameters
        https://bugs.webkit.org/show_bug.cgi?id=133466
        <rdar://problem/16203396>

        Reviewed by Sam Weinig.

        Incorrect viewports are spreading really quickly lately. We have to start ignoring
        some combinations of arguments as they are almost always used incorrectly, causing
        a poor user experience on those websites.

        * dom/ViewportArguments.cpp:
        (WebCore::finalizeViewportArguments):

2014-06-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: add support for the "any" pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=133473

        Reviewed by Benjamin Poulain.

        Add support for the :any pseudo class.

        Test: fast/selectors/pseudo-class-any.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesAnyPseudoClass):

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

        Update PlatformTimeRanges to use MediaTime rather than doubles for time values.
        https://bugs.webkit.org/show_bug.cgi?id=133454

        Reviewed by Eric Carlson.

        PlatformTimeRanges will now use MediaTime, so operations at the platform level won't
        lose precision when converting to and from doubles and rational time values like CMTime.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::currentTimeFudgeFactor):
        (WebCore::SourceBuffer::hasCurrentTime):
        (WebCore::SourceBuffer::hasFutureTime):
        (WebCore::SourceBuffer::canPlayThrough):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/TimeRanges.cpp:
        (WebCore::TimeRanges::TimeRanges):
        (WebCore::TimeRanges::start):
        (WebCore::TimeRanges::end):
        (WebCore::TimeRanges::add):
        (WebCore::TimeRanges::contain):
        (WebCore::TimeRanges::find):
        (WebCore::TimeRanges::nearest):
        (WebCore::TimeRanges::totalDuration):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekable):
        * platform/graphics/PlatformTimeRanges.cpp:
        (WebCore::PlatformTimeRanges::create):
        (WebCore::PlatformTimeRanges::PlatformTimeRanges):
        (WebCore::PlatformTimeRanges::invert):
        (WebCore::PlatformTimeRanges::start):
        (WebCore::PlatformTimeRanges::end):
        (WebCore::PlatformTimeRanges::add):
        (WebCore::PlatformTimeRanges::contain):
        (WebCore::PlatformTimeRanges::find):
        (WebCore::PlatformTimeRanges::nearest):
        (WebCore::PlatformTimeRanges::totalDuration):
        * platform/graphics/PlatformTimeRanges.h:
        (WebCore::PlatformTimeRanges::Range::Range):
        (WebCore::PlatformTimeRanges::Range::isPointInRange):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extraMemoryCost):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformBufferedTimeRanges):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered): Deleted.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::buffered):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime):

2014-06-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Align the highlight rects with device pixels
        https://bugs.webkit.org/show_bug.cgi?id=133464

        Reviewed by Enrica Casucci.

        Add utility functions to pixel align points and rects.

        * WebCore.exp.in:
        * platform/graphics/FloatPoint.h:
        (WebCore::flooredToDevicePixels):
        (WebCore::ceiledToDevicePixels):
        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosingRectExtendedToDevicePixels):
        * platform/graphics/FloatRect.h:

2014-06-03  Timothy Horton  <timothy_horton@apple.com>

        Prepopulated tiles may never be unparented from TileGrids with aggressive tile retention on
        https://bugs.webkit.org/show_bug.cgi?id=133471

        Reviewed by Simon Fraser.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileGrid.h:
        (WebCore::TileGrid::TileCohortInfo::TileCohortInfo):
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::TileCohortInfo::timeUntilExpiration):
        (WebCore::TileGrid::cohortRemovalTimerFired):
        Factor timeUntilExpiration() out of cohortRemovalTimerFired().

        (WebCore::TileGrid::revalidateTiles):
        Ensure that secondary tiles that never touch the primary coverage rect
        are still unparented eventually (after 2 seconds, the same lifetime we use
        for cohorts in non-aggressive retention).
        Schedule another revalidateTiles if we left parented secondary tiles behind.

2014-06-03  Timothy Horton  <timothy_horton@apple.com>

        TileGrid::prepopulateRect populates the wrong tiles if scale != 1
        https://bugs.webkit.org/show_bug.cgi?id=133470

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::requestScrollPositionUpdate):
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::prepopulateRect):
        (WebCore::TileGrid::revalidateTiles):
        prepopulateRect takes rects in "content" coordinates, but when later passed to
        ensureTilesForRect, they're expected to be in the same coordinate space as the layer's
        visible rect, and are scaled up. So, apply the inverse scale to counter that.

2014-06-03  Timothy Horton  <timothy_horton@apple.com>

        Minor TileCoverageMap refinements
        https://bugs.webkit.org/show_bug.cgi?id=133468

        Reviewed by Simon Fraser.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setContentsScale):
        * platform/graphics/ca/mac/TileCoverageMap.h:
        * platform/graphics/ca/mac/TileCoverageMap.mm:
        (WebCore::TileCoverageMap::TileCoverageMap):
        (WebCore::TileCoverageMap::setDeviceScaleFactor):
        Keep the TileCoverageMap's contentsScale at the device scale factor, so that it
        looks sharp on non-1x displays.

        (WebCore::TileCoverageMap::update):
        Decrease the height available for the TileCoverageMap by the topContentInset;
        it's already being vertically offset by the topContentInset, but the height was
        not adjusted, so it would run off the bottom of the window.

        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::drawTileMapContents):
        If using aggressive tile retention (and thus not coloring tiles based on age),
        dim tiles that aren't in the visible cohort.

2014-06-03  Timothy Horton  <timothy_horton@apple.com>

        Fix a typo, TileGrid::updateTilerLayerProperties
        https://bugs.webkit.org/show_bug.cgi?id=133474

        Reviewed by Anders Carlsson.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setAcceleratesDrawing):
        (WebCore::TileController::setTilesOpaque):
        (WebCore::TileController::setTileDebugBorderWidth):
        (WebCore::TileController::setTileDebugBorderColor):
        * platform/graphics/ca/mac/TileGrid.h:
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::updateTileLayerProperties):
        (WebCore::TileGrid::updateTilerLayerProperties):
        s/updateTilerLayerProperties/updateTileLayerProperties/g

2014-06-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] ResourceLoadTiming.responseStart is always 0
        https://bugs.webkit.org/show_bug.cgi?id=133469

        Reviewed by Sergio Villar Senin.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback): Record the responseStart time.

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

        [iOS] WebCore fails to build: platform/network/mac/ResourceHandleMac.mm:729:62: error: use of undeclared identifier '_CFURLConnectionCopyTimingData'
        <http://webkit.org/b/133445>
        <rdar://problem/17090035>

        Reviewed by Alexey Proskuryakov.

        * platform/network/mac/ResourceHandleMac.mm: Attempt to fix the
        build by including a private header and local declaration.

2014-05-31  Anders Carlsson  <andersca@apple.com>

        Change DeferrableOneShotTimer to use std::function instead of being a class template
        https://bugs.webkit.org/show_bug.cgi?id=133423

        Reviewed by Antti Koivisto.

        Also, add a new constructor to DeferrableOneShotTimer that takes an std::function. Change the callback
        to not pass a DeferrableOneShotTimer& anymore. Change the delay parameter to use std::chrono::milliseconds.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::CachedGeneratedImage):
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::evictionTimerFired):
        * css/CSSImageGeneratorValue.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired):
        * html/HTMLPlugInImageElement.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::deadDecodedDataDeletionIntervalForResourceType):
        (WebCore::CachedResource::destroyDecodedDataIfNeeded):
        (WebCore::CachedResource::decodedDataDeletionTimerFired):
        * loader/cache/CachedResource.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::MemoryCache):
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::setDeadDecodedDataDeletionInterval):
        (WebCore::MemoryCache::deadDecodedDataDeletionInterval):
        * platform/Timer.h:
        (WebCore::Timer::Timer):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        (WebCore::SubimageCacheWithTimer::invalidateCacheTimerFired):
        * platform/graphics/cg/SubimageCacheWithTimer.h:

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

        Make pseudo element matching for style resolution more JIT friendly
        https://bugs.webkit.org/show_bug.cgi?id=133441

        Reviewed by Antti Koivisto.

        Sharing pseudo elements is a complicated mess shared between the SelectorChecker
        and the RuleCollector.

        For compiling pseudo element matching, it would be best if all the complexity could
        be moved to compile time instead of runtime. It is also preferable to keep the compiler
        independant of the RuleCollector implementation's detail.

        This patch is a first step toward that goal. The main objective here is to make
        "dynamicPseudo" completely internal to the SelectorChecker.
        This is mostly a mechanical change, it is likely PseudoElement matching could be simplified
        further but that is not attempted here.

        Test: fast/css/style-sharing-empty-rule-modification.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        The condition regarding pseudo element matching has been moved into SelectorChecker::match().

        This creates an extra cost for querySelector(), but that should be fine since the vast majority
        of selectors are JIT compiled and never use SelectorChecker in the first place.

        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        The loop is changed such that the tree marking (Style::setHasPseudoStyle) could be moved
        to SelectorChecker.

        The conditions about the security origin for getMatchedCSSRules() and the empty style rules
        are moved prior to the call to ElementRuleCollector::ruleMatches(). This ensure we keep the same
        behavior of not adding the pseudo style for empty rules (this could also help with tree marking
        in general but empty rules are probably uncommon).

        There is one behavior change from making this loop simpler: the SharingRules and StyleInvalidation
        modes now update their ruleRange. It is useless but it is simpler.

        * css/ElementRuleCollector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        The tree marking has been moved here.

        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::match):
        The pseudo element matching has been moved here.

        * css/StyleResolver.h:
        (WebCore::checkRegionSelector):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches):

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

        Send external playback properties to fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=133366

        Reviewed by Simon Fraser.

        Refactor property updates in WebVideoFullscreenModelMediaElement and update
        setExternalPlayback on webkitcurrentplaybacktargetiswirelesschangedEvent.

        * WebCore.exp.in: Add export for setExternalPlayback.
        * platform/ios/WebVideoFullscreenInterface.h: add setExternalPlayback
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: add setExternalPlayback
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController isPlayingOnExternalScreen]): added
        (+[WebAVPlayerController keyPathsForValuesAffectingPlayingOnExternalScreen]): added
        (WebVideoFullscreenInterfaceAVKit::setExternalPlayback): added
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): added
        * platform/ios/WebVideoFullscreenModelMediaElement.h: add updateForEventName
        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::setMediaElement): refactor property changes into updateForEventName()
        (WebVideoFullscreenModelMediaElement::handleEvent): refactor property changes into updateForEventName()
        (WebVideoFullscreenModelMediaElement::updateForEventName): remove duplicate code, implement for setExternalPlayback

2014-06-02  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        WebCore build fix for webreplay
        https://bugs.webkit.org/show_bug.cgi?id=133401

        Reviewed by Darin Adler.

        * replay/MemoizedDOMResult.cpp:
        (WebCore::MemoizedDOMResultBase::createFromEncodedResult):
        Add a default nullptr return in order to avoid a gcc warning.
        The warning is because of a non-void method that has a case which doesn't return.
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::setForceDeterministicSettings):
        Guard the ScrollingCoordinator with the appropriate #ifdef.
        * replay/SerializationMethods.cpp:
        Guard the KeypressCommand with COCOA as it is only present there.

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

        Further unreviewed GTK build fix after r169536.

        Update the m_duration contructor in MediaSourceGStreamer.

        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer):

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

        Unreviewed GTK build fix after r169536.

        Update MediaSourceGStreamer to match new duration parameters.

        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::setDuration): Ditto.
        * platform/graphics/gstreamer/MediaSourceGStreamer.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:

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

        [MSE][Mac] Media does not generate 'ended' event when playing to duration.
        https://bugs.webkit.org/show_bug.cgi?id=133452

        Reviewed by Eric Carlson.

        Add a boundaryTimeObserver to the AVSampleBufferRenderSynchronizer to detect when
        playback crosses the duration boundary, and pause in that event. Also refuse to begin
        playback if the currentTime is beyond the duration. Also, pause playback if duration
        becomes less than currentTime.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentMediaTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationChanged):

        Update MediaSource::duration() and ::setDuration() to take and give MediaTimes rather than doubles:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::duration): double -> MediaTime.
        (WebCore::MediaSource::setDuration): Ditto.
        (WebCore::MediaSource::streamEndedWithError): Ditto.
        * platform/graphics/MediaSourcePrivate.h: Ditto.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC): Ditto.
        (WebCore::MediaSourcePrivateAVFObjC::duration): Ditto.
        (WebCore::MediaSourcePrivateAVFObjC::setDuration): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::MockMediaPlayerMediaSource): Ditto.
        (WebCore::MockMediaPlayerMediaSource::maxTimeSeekableDouble): Ditto.
        (WebCore::MockMediaPlayerMediaSource::durationDouble): Ditto.
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime): Ditto.
        (WebCore::MockMediaPlayerMediaSource::updateDuration): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate): Ditto.
        (WebCore::MockMediaSourcePrivate::duration): Ditto.
        (WebCore::MockMediaSourcePrivate::setDuration): Ditto.
        * platform/mock/mediasource/MockMediaSourcePrivate.h:

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

        Rename ImagePaintingContext to ImagePaintingOptions.
        https://bugs.webkit.org/show_bug.cgi?id=133451

        Reviewed by Simon Fraser.

        No change in functionality.

        * WebCore.exp.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/GraphicsContext.h:
        (WebCore::ImagePaintingOptions::ImagePaintingOptions):
        (WebCore::ImagePaintingContext::ImagePaintingContext): Deleted.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):

2014-05-31  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r154622): Borders disappear when hovering over cells in table
        https://bugs.webkit.org/show_bug.cgi?id=133057
        <rdar://problem/15922359>

        Reviewed by Tim Horton.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders): Revert recent
        non-edge collapsed border optimization due to drawing
        regressions.

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

        Provide better encapsulation for image related painting properties.
        https://bugs.webkit.org/show_bug.cgi?id=133434

        Reviewed by Darin Adler.

        Image related drawing property list keeps growing for the functions below and results in
        multiple overloadings with seemingly random default parameters.
        
        GraphicsContext::drawImage()
        GraphicsContext::drawTiledImage()
        GraphicsContext::drawImageBuffer()
        
        This patch provides encapsulation for the image drawing properties. Encapsulation ensures that
        introducing a new property does not result in yet another overloaded function.

        No change in functionality.

        * WebCore.exp.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/GraphicsContext.h:
        (WebCore::ImagePaintingContext::ImagePaintingContext):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::endShadowLayer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):

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

        Unreviewed, rolling out r169529.
        https://bugs.webkit.org/show_bug.cgi?id=133447

        caused assert in drawImage() (Requested by zalan on #webkit).

        Reverted changeset:

        "Provide better encapsulation for image related painting
        properties."
        https://bugs.webkit.org/show_bug.cgi?id=133434
        http://trac.webkit.org/changeset/169529

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

        Provide better encapsulation for image related painting properties.
        https://bugs.webkit.org/show_bug.cgi?id=133434

        Reviewed by Darin Adler.

        Image related drawing property list keeps growing for the functions below and results in
        multiple overloadings with seemingly random default parameters.
        
        GraphicsContext::drawImage()
        GraphicsContext::drawTiledImage()
        GraphicsContext::drawImageBuffer()
        
        This patch provides encapsulation for the image drawing properties. Encapsulation ensures that
        introducing a new property does not result in yet another overloaded function.

        No change in functionality.

        * WebCore.exp.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/GraphicsContext.h:
        (WebCore::ImagePaintingContext::ImagePaintingContext):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::endShadowLayer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):

2014-06-02  Kiran  <kiran.guduru@samsung.com>

        Add mock DTMFSender support.
        https://bugs.webkit.org/show_bug.cgi?id=133298

        Reviewed by Eric Carlson.

        Implemented mock implementation for RTCPeerConnectionHandler. Now creating
        RTCDTMFSenderHandlerMock and returning while creating DTMFSender instead of
        returning null.
       
        Test: fast/mediastream/RTCPeerConnection-dtmf.html.

        * CMakeLists.txt:
        * platform/mock/RTCDTMFSenderHandlerMock.cpp: Added.
        (WebCore::RTCDTMFSenderHandlerMock::RTCDTMFSenderHandlerMock):
        (WebCore::RTCDTMFSenderHandlerMock::setClient):
        (WebCore::RTCDTMFSenderHandlerMock::insertDTMF):
        * platform/mock/RTCDTMFSenderHandlerMock.h: Added.
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createDTMFSender):

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

        [GTK] media controls should prevent 'click' events from reaching the page
        https://bugs.webkit.org/show_bug.cgi?id=133402

        Reviewed by Eric Carlson.

        When handling events, we events we need to return true in order
        that the superclass gets the value and prevents the execution of
        the default event handler in the page.

        Test: media/media-controls-cancel-events.html

        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.handleMuteButtonMouseOver):
        (ControllerGtk.prototype.handleVolumeBoxMouseOut):
        (ControllerGtk.prototype.handleCaptionButtonClicked):
        (ControllerGtk.prototype.handleCaptionButtonMouseOver):
        (ControllerGtk.prototype.handleCaptionButtonShowMenu):
        (ControllerGtk.prototype.handleCaptionButtonMouseOut):
        (ControllerGtk.prototype.handleCaptionMouseOut): Return true to
        prevent forwarding the event execution.

2014-06-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: add support for the "not" pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=133314

        Reviewed by Benjamin Poulain.

        Add :not pseudo class support to CSS JIT. Current implementation
        doesn't support visitedMatchType. So when link pseudo class appears in
        :not sub fragment, fallback to the non-JIT implementation.

        Tests: fast/selectors/not-active-hover-quirks.html
               fast/selectors/not-active-hover-strict.html
               fast/selectors/pseudo-class-not.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        (WebCore::SelectorCompiler::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::fragmentOnlyMatchesLinksInQuirksMode):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesNotPseudoClass):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation): Deleted.

2014-06-01  Jer Noble  <jer.noble@apple.com>

        [MSE] Appends of overlapping sample data do not clear existing samples properly.
        https://bugs.webkit.org/show_bug.cgi?id=133435

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-overlapping-append.html

        The MSE spec has a spec error in how it removes overlapping frames. The intention seems to be
        to check for overlapping samples only when the incoming sample increases the highest presentation time
        field. But due to a mismatch in the range of a sample, defined as [start, end), and the check, which 
        treats the end as inclusive, the overlapping check is almost never run.

        Add the sample comparison logic to match [start, end) ranges, and rename the existing check to differentiate
        it from the new one:
        * Modules/mediasource/SampleMap.cpp:
        (WebCore::SamplePresentationTimeIsInsideRangeComparator::operator()):
        (WebCore::SamplePresentationTimeIsWithinRangeComparator::operator()):
        (WebCore::SampleMap::findSamplesBetweenPresentationTimes):
        (WebCore::SampleMap::findSamplesWithinPresentationRange):
        * Modules/mediasource/SampleMap.h:

        Update the overlapping check to occur whenever the highest presentation time increases, and update the
        logic within that check to catch all overlapping frames.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::bufferedSamplesForTrackID):
        * Modules/mediasource/SourceBuffer.h:
        * WebCore.exp.in:

        Add a dump method to MediaSample so that samples can be easily converted to a string for testing.
        * platform/MediaSample.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::presentationSize):
        (WebCore::MediaSampleAVFObjC::dump):

        Update the Mock MSE implementation to pass along a "generation" field, to aid in testing.
        * platform/mock/mediasource/MockBox.cpp:
        (WebCore::MockSampleBox::MockSampleBox):
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::dump):

        Add a method to internals to dump the buffered samples to string.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::bufferedSamplesForTrackID):
        * Modules/mediasource/SourceBuffer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::bufferedSamplesForTrackID):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-06-01  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        getBBox() returns (0,0) when width or height is zero.
        https://bugs.webkit.org/show_bug.cgi?id=93290

        Reviewed by Philip Rogers.

        The SVG spec states that a width or height of zero for  rects, circles and
        ellipses is valid but disables rendering of that shape.
        In this case, getBBox() should return the actual bounding box of the element.
        Previously, WebKit always returned (0,0,0,0) rather than the
        correct bounding box. This patch fixes that. 

        Rects and ellipses both now follow the same behaviour where
        the fall-back code path is only used when the shape will render (e.g. not
        when a dimension <= 0).
  
        This necessitates calling calculateRadiiAndCenter for ellipses even
        when the calculated values will be discarded in the fall back code path.
        But calculateRadiiAndCenter is cheap and this avoids making changes 
        elsewhere to stop CG drawing a zero width (or height) ellipse.  

        Tests: svg/custom/getBBox-js-circle-zerodimension.html
               svg/custom/getBBox-js-ellipse-zerodimension.html
               svg/custom/getBBox-js-rect-zerodimension.html

        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::updateShapeFromElement):
        Only follow fall-back code path when shape renders. 
        width||height==0 is not an error case so calculate bounding box.        

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        Only follow fall-back code path when shape renders. 
        rx||ry==0 is not an error case so calculate bounding box.        

2014-06-01  Simon Fraser  <simon.fraser@apple.com>

        Don't scroll to non-integral scroll offsets
        https://bugs.webkit.org/show_bug.cgi?id=133436
        <rdar://problem/17088336>

        Reviewed by Darin Adler.

        With the gradual migration of scroll offsets to floating point, we ended
        up with a fully floating point code path been event scroll deltas and
        setting scroll positions in the scrolling tree.
        
        With some input devices (e.g. Logitech scrollwheel mice), the scroll deltas
        come in with non-integral values, and that caused the scroll offset to be non-integral,
        resulting in fuzzy layer contents. So round the scroll position.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):

2014-05-31  Anders Carlsson  <andersca@apple.com>

        Add a LazyNeverDestroyed class template and use it
        https://bugs.webkit.org/show_bug.cgi?id=133425

        Reviewed by Darin Adler.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::guidMutex):
        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::registryMutex):
        * inspector/WorkerDebuggerAgent.cpp:
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlResponseHeaderWhitelist):
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::networkStateNotifier):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::DefaultSharedWorkerRepository::instance):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/WorkerThread.cpp:
        (WebCore::threadSetMutex):
        * xml/XMLHttpRequest.cpp:
        (WebCore::staticData):

2014-06-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Selection gap produces a pixel line overlap on inline boxes.
        https://bugs.webkit.org/show_bug.cgi?id=133429

        Reviewed by Simon Fraser.

        Do not floor logical right/left values when selection gap is calculated for RenderBlocks.
        It produces overlapping line/gap because the floored value is intersecting/too far from the
        non-floored content selection rect.

        Tests: fast/inline/hidpi-selection-gap-and-inline-selection-have-gap-rtl.html
               fast/inline/hidpi-selection-gap-overlaps-inline-selection.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):

2014-05-31  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r169412): Garbage pixels when vertical rubber-banding on http://yvoschaap.com/pmarca/
        https://bugs.webkit.org/show_bug.cgi?id=133418
        <rdar://problem/17065494>

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * platform/graphics/FloatPoint.h:
        (WebCore::toFloatPoint):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        The manual tiling code previously adjusted the initial
        tiling source rect so that if the pattern was out of phase,
        the first row and column would paint only the necessary part
        of the tile. However, it did not also adjust the destination rect,
        so the tile was painted in entirely the wrong place.
        Additional testing (by enabling manual tiling mode for all patterned
        images and running all of the layout tests) exposed another bug
        where the last row and column would paint too much, which
        was resolved by clipping to the outer image's destination rect.

2014-05-31  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT cleanup: move two utility functions out of the properties-matcher section
        https://bugs.webkit.org/show_bug.cgi?id=133427

        Reviewed by Andreas Kling.

        Just move the code, no other modification.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::jumpIfNoPreviousAdjacentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::jumpIfNoNextAdjacentElement):

2014-05-31  Darin Adler  <darin@apple.com>

        Viewport percentage tests that resize the viewport are flaky
        https://bugs.webkit.org/show_bug.cgi?id=133351

        Reviewed by Anders Carlsson.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect): Removed code that explicitly sends a resize event here.
        The resize event will be sent as a side effect of layout instead.
        (WebCore::FrameView::sendResizeEventIfNeeded): Don't send a resize event until layout is done,
        since this is what propagates the new geometry in so the JavaScript code can detect it. Also
        simplified the logic and streamlined a little, and added a FIXME about the bad idea here where
        the code enqueues an event for an unknown time in the future. Removed the unneeded code that
        passes in the DOM window as the target to dispatchWindowEvent, since that gets filled in as the
        target by default.

2014-05-31  Anders Carlsson  <andersca@apple.com>

        Don't use std::mutex::try_lock to check if we own a mutex
        https://bugs.webkit.org/show_bug.cgi?id=133421

        Reviewed by Dan Bernstein.

        According the C++ standard, calling try_lock on a mutex that's already owned by the current thread
        is undefined behavior, so don't do that.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::guidForOriginAndName):

2014-05-30  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): space space to insert period doesn't work in web forms.
        https://bugs.webkit.org/show_bug.cgi?id=133413
        <rdar://problem/16948333>

        Reviewed by Benjamin Poulain.

        Adding utility functions and their exports.

        * WebCore.exp.in:
        * editing/TextIterator.cpp:
        (WebCore::plainTextReplacingNoBreakSpace):
        * editing/TextIterator.h:
        * editing/VisibleUnits.cpp:
        (WebCore::charactersAroundPosition):
        (WebCore::characterBeforePosition): Deleted.
        * editing/VisibleUnits.h:

2014-05-30  Zalan Bujtas  <zalan@apple.com>

        Cleanup temporary setting of image interpolation quality in GraphicsContext::drawImage*
        https://bugs.webkit.org/show_bug.cgi?id=133407

        Reviewed by Darin Adler.

        Add helper class to set/reset image interpolation quality value.

        No change in functionality.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::InterpolationQualityMaintainer::InterpolationQualityMaintainer):
        (WebCore::InterpolationQualityMaintainer::~InterpolationQualityMaintainer):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):

2014-05-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Support -apple-system-font on OS X
        https://bugs.webkit.org/show_bug.cgi?id=133382

        Addressing post-review comments.

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]):

2014-05-30  Prashant Hiremath  <hiremathprashants@gmail.com>

        Remove repetitive header in HTMLInputElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=133376

        Reviewed by Anders Carlsson.

        It is just removal repeative headers hence no test needed.

        * html/HTMLInputElement.cpp:

2014-05-30  Zalan Bujtas  <zalan@apple.com>

        Remove redundant GraphicsContext::drawImage() function.
        https://bugs.webkit.org/show_bug.cgi?id=133347

        Reviewed by Simon Fraser.

        There are 2 GraphicsContext::drawImage functions with very similar parameter list. This looks
        to be a source of confusion and results in passing unneeded parameters.

        No change in functionality.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::drawImageToContext):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2014-05-29  Alex Christensen  <achristensen@webkit.org>

        Prepare css jit for arm64 and other architectures.
        https://bugs.webkit.org/show_bug.cgi?id=133394

        Reviewed by Benjamin Poulain.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::swapArguments):
        * cssjit/RegisterAllocator.h:
        Use a designated temporary register on arm64 to prevent using a deallocated argument register to swap argument registers in.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        Added assertion to make sure there are enough registers.

2014-05-29  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: add support for the pseudo classes :hover and :active
        https://bugs.webkit.org/show_bug.cgi?id=133295

        Reviewed by Andreas Kling.

        This patch adds compilation support for :hover and :active. The code generation of both of them is trivial,
        most of the patch is improving the infrastructure and safety.

        The document compatibility mode is moved to its own typed enum. This ensure the values are exclusives and
        the native type is known (unsigned char here). The values are changes to binary flags to take advantage of
        test-and-branch on ARM64 (not used explicitely, it is automatically generated by the MacroAssembler).

        The other important refactoring is the code updating the flags on RenderStyle::NonInheritedFlags.
        The code was duplicated in some places so it is move into its own function addFlagToElementStyleFromContext().

        The generators themself are very simple. First we check the quirks-mode exceptions, that is generally excluded
        at compile time because the conditions are almost never met, even in strict mode.
        Then we have two cases: style resolution and query selector. Almost everything is just function calls.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::addFlagToElementStyleFromContext):
        (WebCore::SelectorCompiler::fragmentOnlyMatchesLinksInQuirksMode):
        (WebCore::SelectorCompiler::getDocument):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSpecialFailureInQuirksModeForActiveAndHoverIfNeeded):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::elementIsActive):
        (WebCore::SelectorCompiler::elementIsActiveForStyleResolution):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        (WebCore::SelectorCompiler::elementIsHovered):
        (WebCore::SelectorCompiler::elementIsHoveredForStyleResolution):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLastChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsOnlyChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setCompatibilityMode):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::cloneDataFromDocument):
        * dom/Document.h:
        (WebCore::Document::compatibilityModeMemoryOffset):
        (WebCore::Document::inQuirksMode):
        (WebCore::Document::inLimitedQuirksMode):
        (WebCore::Document::inNoQuirksMode):
        (WebCore::Document::compatibilityMode): Deleted.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * html/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::setDefaultCompatibilityMode):
        (WebCore::HTMLConstructionSite::setCompatibilityMode):
        (WebCore::HTMLConstructionSite::setCompatibilityModeFromDoctype):
        (WebCore::HTMLConstructionSite::insertDoctype):
        * html/parser/HTMLConstructionSite.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::SinkDocument):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::initWithSimpleHTMLDocument):
        * rendering/style/RenderStyle.h:

2014-05-28  Jon Honeycutt  <jhoneycutt@apple.com>

        Roll r168668 back in.

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

        Reviewed by Brent Fulgham.

        Tests: fast/events/beforeload-assertion.html
               fast/events/beforeload-iframe-crash.html
               fast/events/beforeload-input-time-crash.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        * dom/Document.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateEmbeddedObjectsTimerFired):
        (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-05-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Support -apple-system-font on OS X
        https://bugs.webkit.org/show_bug.cgi?id=133382

        Reviewed by Simon Fraser.

        Guard on both family names: "-apple-system-font" and "-webkit-system-font"

        Test: platform/mac/fast/text/systemFont.html

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]):

2014-05-29  Alexey Proskuryakov  <ap@apple.com>

        Loading <object> from WebArchive crashes
        https://bugs.webkit.org/show_bug.cgi?id=133386
        <rdar://problem/13345509>

        Reviewed by Brady Eidson.

        Test: webarchive/loading/object.html

        This (a) fixes the crash, and (b) avoids the crash.

        * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::continueAfterContentPolicy):
        Some types of substitute data - such as WebArchive - don't contain HTTP result codes,
        so let's not drop to <object> fallback content when status is 0.
        And if the load somehow failed anyway, don't crash by trying to deliver substitute data
        to a finished loader.

2014-05-29  Alex Christensen  <achristensen@webkit.org>

        [iOS WebGL] Fix depth buffer clearing issue.
        https://bugs.webkit.org/show_bug.cgi?id=133388

        Reviewed by Dean Jackson.

        No new tests, but this fixes webgl/1.0.1/conformance/canvas/buffer-preserve-test.html.

        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer display]):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture):
        Moved marking the layer as composited from the mac-only prepareTexture to
        the end of [WebGLLayer display] which is called by mac and iOS.

2014-05-29  Jeremy Jones  <jeremyj@apple.com>

        Perserve caption selection in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=133350

        Reviewed by Eric Carlson.

        Use the logic from the inline player to calculate the selected caption index.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaControlsHost):
        Expose mediaControlsHost() for use by WebVideoFullscreenModelMediaElement.

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::updateLegibleOptions):
        Use logic from buildCaptionsMenu from mediaControlsApple.js.

2014-05-29  Jeremy Jones  <jeremyj@apple.com>

        Use correct version of requiresFullscreenForVideoPlayback().
        https://bugs.webkit.org/show_bug.cgi?id=133331

        Reviewed by Eric Carlson.

        Test: media/video-fullscreeen-only-controls.html

        Update the last place not yet using m_mediaSession->requiresFullscreenForVideoPlayback.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        switch to media session version for requriesFullscreenForVideoPlayback.

2014-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for HiDPI icons
        https://bugs.webkit.org/show_bug.cgi?id=133377

        Reviewed by Martin Robinson.

        Use the GTK+ missing icon at 16 or 32 size depending on the device
        scale factor.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::loadMissingImageIconFromTheme):
        (WebCore::Image::loadPlatformResource):

2014-05-29  Owen Taylor  <otaylor@redhat.com>

        [GTK] Add HighDPI support for non-accelerated compositing contents
        https://bugs.webkit.org/show_bug.cgi?id=131562

        Reviewed by Anders Carlsson.

        No new tests. This will be tested once we have the proper dependencies in the WebKit testing
        JHBuild.

        * platform/cairo/WidgetBackingStore.h:
        (WebCore::WidgetBackingStore::WidgetBackingStore): Accept a device scale argument.
        * platform/cairo/WidgetBackingStoreCairo.cpp: Use the device scale argument to make the surface the proper size and set the surface device scale.
        * platform/cairo/WidgetBackingStoreCairo.h: Accept a device scale argument.
        * platform/graphics/cairo/CairoUtilities.cpp: Add a new helper to set the device scale if Cairo built against is new enough.
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/gtk/GtkVersioning.h: Add the HAVE_GTK_SCALE_FACTOR macro.
        * platform/gtk/WidgetBackingStoreGtkX11.cpp: Use the device scale argument to make the surface the proper size and set the surface device scale.
        * platform/gtk/WidgetBackingStoreGtkX11.h: Accept a device scale argument.

2014-05-28  Brent Fulgham  <bfulgham@apple.com>

        Captions during HLS playback flash/are difficult to readily
        https://bugs.webkit.org/show_bug.cgi?id=133365
        <rdar://problem/16584132>

        Reviewed by Eric Carlson.

        Correct two problems:
        1. Add new logic to handle cues that are identical to existing cues, except
           that they cover a slightly later moment in playback. For example, a cue
           encoding device might emit a cue at 24 fps, with many of the cues containing
           the same content but covering only 1/24th of a second.
           
           Rather than hiding and displaying our cues at the cue encoding rate, we should
           simply continue to display the same cue as long as the content is unchanged.
        2. The cue "isEqual" logic for TextTrackCueGeneric improperly short-circuited the
           VTTCue isEqual logic. This was done to avoid a false failure due to the cue
           type being 'generic' rather than 'vtt', but incorrectly treated cues with
           non-matching text as equal.

        * html/track/DataCue.cpp:
        (WebCore::DataCue::cueContentsMatch): Move cue comparison code to new method that
        doesn't check that the 'type' of the cue is identical.
        (WebCore::DataCue::isEqual): Modified to use new 'cueContentsMatch' method.
        (WebCore::DataCue::isStartOfCue): Confirms cues match except for start and end times.
        * html/track/DataCue.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue): Modify to check if a new cue is simply a continuation
        of an existing cue.
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::cueContentsMatch): New method containing the equality code
        that used to live in 'isEqual'.
        (WebCore::TextTrackCue::isEqual): Modified to use new 'cueContentsMatch' method.
        (WebCore::TextTrackCue::isStartOfCue): Confirms cues match except for start and
        end times.
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::cueContentsMatch): New method containing the equality
        code that used to live in 'isEqual'.
        (WebCore::TextTrackCueGeneric::isEqual): Modified to use new 'cueContentsMatch' method.
        (WebCore::TextTrackCueGeneric::isStartOfCue): Confirms cues match except for start and
        end times.
        * html/track/TextTrackCueGeneric.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::cueContentsMatch): New method containing the equality code that
        used to live in 'isEqual'.
        (WebCore::VTTCue::isEqual): Modified to use new 'cueContentsMatch' method.
        (WebCore::VTTCue::isStartOfCue): Confirms cues match except for start and end times.
        * html/track/VTTCue.h:

2014-05-28  Oliver Hunt  <oliver@apple.com>

        Whoops, update bindings tests results.

2014-05-28  Oliver Hunt  <oliver@apple.com>

        Make DOM properties exposed as instance properties use the base object instead of |this|
        https://bugs.webkit.org/show_bug.cgi?id=133353

        Reviewed by Geoffrey Garen.

        Make the bindings generator emit code that uses the base object for
        a property, rather than the this object. This means that attributes
        that we need to be treated as instance properties will match their old
        instance-based behaviour.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InterfaceRequiresAttributesOnInstanceForCompatibility):
        (InterfaceRequiresAttributesOnInstance):
        (GetCastingHelperForBaseObject):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionName):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceImplementsStr3):
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::setJSTestNondeterministicNondeterministicWriteableAttr):
        (WebCore::setJSTestNondeterministicNondeterministicExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicGetterExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicSetterExceptionAttr):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsConstructorTestSubObj):
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):

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

        [iOS WK2] Improve behavior of position:fixed inside accelerated overflow-scroll
        https://bugs.webkit.org/show_bug.cgi?id=133352

        Reviewed by Tim Horton.

        When adjusting layers inside accelerated overflow-scroll, pass a delta
        down to descendant nodes. Fix behavior of sticky nodes inside fixed nodes
        inside overflow scroll (sticky should only be affected if the parent node
        is a scrolling node).

        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange): Just remove
        some .get()
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange): Remove .get()s.
        We never care about the cumulative delta here, because sticky nodes only respond to
        changes in their direct scrolling ancestors. Only adjust the layer if the parent
        is a scrolling node.

2014-05-27  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit does not recognize ARIA 1.1 tables
        https://bugs.webkit.org/show_bug.cgi?id=133163

        Reviewed by Darin Adler.

        The AXObjectCache code that determines which object to create based on the role needs to be token fallback aware.

        Test: accessibility/table-fallback-roles-expose-element-attributes.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):

2014-05-28  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r168046): Invalid layout in multicol
        https://bugs.webkit.org/show_bug.cgi?id=133322

        Reviewed by Antti Koivisto.

        In some situations, deleting the line boxes of a multicol element causes the line to region
        link to become invalid.

        Test: fast/multicol/newmulticol/multicol-inside-multicol.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::clearLinesToRegionMap):
        (WebCore::RenderFlowThread::deleteLines):
        (WebCore::RenderFlowThread::willBeDestroyed):
        * rendering/RenderFlowThread.h:

2014-05-28  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove DocumentThreadableLoaderClient.h
        https://bugs.webkit.org/show_bug.cgi?id=133341

        Reviewed by Gyuyoung Kim.

        DocumentThreadableLoaderClient is not used anymore.

        * WebCore.order:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        * loader/DocumentThreadableLoaderClient.h: Removed.
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::isDocumentThreadableLoaderClient): Deleted.

2014-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings symbols file after r169017.

        * bindings/gobject/webkitdom.symbols: Add webkit_dom_navigator_get_hardware_concurrency.

2014-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r168868): [GTK] Element.offset* client* scroll* API changed
        https://bugs.webkit.org/show_bug.cgi?id=133313

        Reviewed by Philippe Normand.

        Keep old API that uses long also for GObject bindings.

        * dom/Element.idl:

2014-05-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r169400.
        https://bugs.webkit.org/show_bug.cgi?id=133338

        Broke the iOS build in
        LocalizedDateCache::calculateMaximumWidth() (Requested by smfr
        on #webkit).

        Reverted changeset:

        "SVG TextRuns do not always get RenderingContexts"
        https://bugs.webkit.org/show_bug.cgi?id=133198
        http://trac.webkit.org/changeset/169400

2014-05-27  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (Margin tiles): Background gradient on dom.spec.whatwg.org is very slow to render
        https://bugs.webkit.org/show_bug.cgi?id=133335
        <rdar://problem/17011392>

        Reviewed by Simon Fraser.

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        Make cross-platform and use some iOS code which avoids patterned drawing when the pattern buffer
        would be very large. Instead, it calls draw() repeatedly over the pattern space, avoiding the allocation
        of a huge (in the case of bug 133335, nearly 2GB) buffer.

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

        [iOS WK2] Fix behavior of position:sticky inside accelerated overflow-scroll
        https://bugs.webkit.org/show_bug.cgi?id=133334
        <rdar://problem/16462535>

        Reviewed by Tim Horton.

        When the scroll position changes in an accelerated overflow-scroll element, we have
        to update child nodes in the scrolling tree for position:sticky. That requires a
        more generic ability to update the scrolling tree after some arbitrary zoom or
        scroll. To do this, we need to know the current fixed position rect, rather than
        having it passed in.
        
        So make the fixed position rect available from ScrollingTree, and make it possible
        to get the current scrollPosition() from any ScrollingTreeScrollingNode.
        
        Also, implement updateLayersAfterDelegatedScroll() in ScrollingTreeOverflowScrollingNodeIOS,
        and have it update descendant layers.
        
        Finally, fix ScrollingTreeOverflowScrollingNode to use the correct rectangle for its
        constraints math, using the scroll position of the parent node if appropriate.

        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::fixedPositionRect):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange):

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

        Do some renaming in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=133333

        Reviewed by Tim Horton.

        Rename ScrollingTreeNode::parentScrollPositionDidChange() to updateLayersAfterAncestorChange()
        since this goes deep and to indicate that it's about layer updating.
        
        Also rename the "viewportRect" parameter to "fixedPositionRect", since on iOS
        this is the custom fixed-position rect that changes on zooming.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterViewportChange):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll):
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):
        (WebCore::ScrollingTreeFixedNode::parentScrollPositionDidChange): Deleted.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange):
        (WebCore::ScrollingTreeStickyNode::parentScrollPositionDidChange): Deleted.

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

        Instantiate a ScrollingTreeMac on Mac
        https://bugs.webkit.org/show_bug.cgi?id=133332

        Reviewed by Tim Horton.

        Mac previously instantiated a ThreadedScrollingTree, but this has no platform
        knowledge. To support future expansion, create a ScrollingTreeMac subclass and
        instantiate that on Mac.
        
        Also protect ScrollingCoordinatorMac in PLATFORM(MAC) #ifdefs and remove it from the
        EXCLUDED_SOURCE_FILE_NAMES list in the xcconfig file, following general trends.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::create): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        * page/scrolling/mac/ScrollingTreeMac.cpp: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        (ScrollingTreeMac::create):
        (ScrollingTreeMac::ScrollingTreeMac):
        * page/scrolling/mac/ScrollingTreeMac.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.

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

        Prepare for position:sticky support inside accelerated overflow-scroll with WK2
        https://bugs.webkit.org/show_bug.cgi?id=133329

        Reviewed by Tim Horton.

        RenderLayerCompositor::computeStickyViewportConstraints() was always using
        the viewport rect as the constraining rect for sticky position. This is not
        correct when inside overflow:scroll.
        
        Refactor code in RenderBoxModelObject to make getting the rect easy, and use
        it to compute the constraints.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::constrainingRectForStickyPosition):
        (WebCore::RenderBoxModelObject::stickyPositionOffset):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

2014-05-27  Bem Jones-Bey  <bjonesbe@adobe.com>

        vw/vh units used as font/line-height values don't scale with the viewport
        https://bugs.webkit.org/show_bug.cgi?id=87846

        Reviewed by Darin Adler.

        This patch moves the resolution of viewport units to style recalc
        time. Currently viewport units are left unresolved during style
        recalcs, which leads to many problems with viewport units. Moving the
        resolution will fix these problems, as well as reduce the plumbing
        that goes on.

        This patch touches a lot of files since the valueForLength functions
        no longer need a RenderView. The interesting changes are in:

        - CSSToLengthConversionData -> CSSPrimitiveValue: for moving
            resolution to style recalc time.
        - Length / LengthFunctions: no longer needs to know about viewport
            units.
        - FrameView -> Document -> StyleResolver: for scheduling style recalcs
            upon resize

        Note that getComputedStyle will now return pixel values when viewport
        units are used. This behavior matches Firefox and the css3-cascade
        spec.

        This is based on a Blink patch by timloh@chromium.org.

        Tests: css3/viewport-percentage-lengths/viewport-percentage-lengths-anonymous-block.html
               css3/viewport-percentage-lengths/viewport-percentage-lengths-calc.html
               css3/viewport-percentage-lengths/viewport-percentage-lengths-percent-size-child.html
               css3/viewport-percentage-lengths/viewport-percentage-lengths-relative-font-size.html
               css3/viewport-percentage-lengths/viewport-percentage-lengths-resize.html

        * WebCore.exp.in: Remove RenderView argument to floatValueForLength.
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp: 
        (getAttributeSetForAccessibilityObject): Remove RenderView argument.
        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLength): Ditto.
        (WebCore::floatValueForCenterCoordinate): Ditto.
        * css/BasicShapeFunctions.h: Ditto.
        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory): Remove special handling for viewport units,
            as they get resolved to pixels.
        (WebCore::createCSS): Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue): Remove RendewView argument.
        (WebCore::getBorderRadiusCornerValues): Remove handling of viewport
            units, as they are already resolve to pixels here.
        (WebCore::getBorderRadiusCornerValue): Remove RenderView argument.
        (WebCore::getBorderRadiusShorthandValue): Ditto.
        (WebCore::specifiedValueForGridTrackBreadth): Remove handling of
            viewport units, as they are already resolved to pixels here.
        (WebCore::specifiedValueForGridTrackSize): Remove RenderView argument.
        (WebCore::valueForGridTrackList): Ditto.
        (WebCore::lineHeightFromStyle): Ditto.
        (WebCore::ComputedStyleExtractor::propertyValue): Ditto.
        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::createGradient): Pass RenderView to
            CSSToLengthConversionData constructor.
        (WebCore::CSSRadialGradientValue::createGradient): Ditto.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::unitCategory): Remove handling of
            viewport units, as they get resolved to pixels.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Ditto.
        (WebCore::CSSPrimitiveValue::init): Ditto.
        (WebCore::CSSPrimitiveValue::computeLengthDouble): Resolve viewport
            units to pixels.
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory): Remove
        handling of viewport units, since they get resolved to pixels.
        (WebCore::CSSPrimitiveValue::viewportPercentageLength): Deleted.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isLength): Remove special handling of
            viewport units, since they get resolved to pixels.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength): Ditto.
        * css/CSSToLengthConversionData.cpp:
        (WebCore::CSSToLengthConversionData::viewportWidthFactor): Caclulate
            conversion factor for viewport units to pixels. Note this does not
            set hasViewportUnits on the RenderStyle if computing the font
            size, because in the font size case, the RenderStyle is the
            parent's style, not the current renderer's style.
        (WebCore::CSSToLengthConversionData::viewportHeightFactor): Ditto.
        (WebCore::CSSToLengthConversionData::viewportMinFactor): Ditto.
        (WebCore::CSSToLengthConversionData::viewportMaxFactor): Ditto.
        * css/CSSToLengthConversionData.h:
        (WebCore::CSSToLengthConversionData::CSSToLengthConversionData): Add
            RenderView parameter, and make RenderStyle non-const so that
            hasViewportUnits can be set on the Style..
        (WebCore::CSSToLengthConversionData::style): style is now non-const.
        (WebCore::CSSToLengthConversionData::copyWithAdjustedZoom): Handle
            RenderView argument.
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillXPosition): Remove handling of
            viewport units, as they are already resolved to pixels here.
        (WebCore::CSSToStyleMap::mapFillYPosition): Ditto.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLength::applyValue): Ditto.
        (WebCore::ApplyPropertyBorderRadius::applyValue): Ditto.
        (WebCore::ApplyPropertyComputeLength::applyValue): Ditto.
        (WebCore::ApplyPropertyFontSize::applyValue): Ditto.
        (WebCore::ApplyPropertyLineHeight::applyValue): Ditto.
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyValue): Ditto.
        (WebCore::ApplyPropertyWordSpacing::applyValue): Ditto.
        (WebCore::ApplyPropertyVerticalAlign::applyValue): Ditto.
        (WebCore::ApplyPropertyTextIndent::applyValue): Ditto.
        * css/LengthFunctions.cpp:
        (WebCore::minimumIntValueForLength): Remove RenderView argument.
        (WebCore::intValueForLength): Remove RenderView argument and
            roundPecentages.
        (WebCore::minimumValueForLength): Remove RenderView argument, and
            special handling of viewport units.
        (WebCore::valueForLength): Ditto.
        (WebCore::floatValueForLength): Ditto.
        (WebCore::floatSizeForLengthSize): Remove RenderView argument.
        * css/LengthFunctions.h: Ditto.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval): Add RenderView argument for
            CSSToLengthConversionData constuctor.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear): Change to 0 arg constructor
            for CSSToLengthConversionData.
        (WebCore::StyleResolver::State::updateConversionData): In order to get
            the RenderView, we need to have a valid Element set on the state.
            Since this means that we need to set the conversion data in more
            places, move the contruction of conversion data into this helper
            method.
        (WebCore::StyleResolver::State::initElement): Make sure conversion
            data is up to date.
        (WebCore::StyleResolver::State::initForStyleResolve): Ditto.
        (WebCore::StyleResolver::State::setStyle): When the style is set, we
            need to make sure to update the conversion data.
        (WebCore::StyleResolver::styleForElement): If the style has viewport
            units, flage the document so that we can make sure to recalc the
            viewport unit values when the viewport is resized.
        (WebCore::StyleResolver::pseudoStyleForElement): Ditto.
        (WebCore::StyleResolver::updateFont): Make sure the font having
            viewport units updates the style.
        (WebCore::StyleResolver::convertToIntLength): Remove handling of
        viewport units, as they are resolved to pixels.
        (WebCore::StyleResolver::convertToFloatLength): Ditto.
        (WebCore::StyleResolver::clearCachedPropertiesAffectedByViewportUnits):
            Invalidate the matched properties cache for styles with viewport
            units when the viewport is resized.
        (WebCore::createGridTrackBreadth): Remove handling of viewport units,
            as they are resolved to pixels.
        (WebCore::StyleResolver::applyProperty): Ditto.
        (WebCore::StyleResolver::hasMediaQueriesAffectedByViewportChange):
            Rename to be less confusing, since it has nothing to do with
            viewport units.
        (WebCore::StyleResolver::createFilterOperations): Remove handling of
            viewport units, as they are resolved to pixels.
        (WebCore::StyleResolver::affectedByViewportChange): Deleted.
        (WebCore::StyleResolver::viewportPercentageValue): Deleted.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::State): C++11 cleanup: 0 -> nullptr.
        (WebCore::StyleResolver::State::setFontSizeHasViewportUnits): Set if
            the font size is specified in viewport units.
        (WebCore::StyleResolver::State::fontSizeHasViewportUnits): Ditto.
        (WebCore::StyleResolver::State::setStyle): Deleted.
        * css/TransformFunctions.cpp:
        (WebCore::convertToFloatLength): Remove handling of viewport units,
            since they are resolved to pixels.
        * dom/Document.cpp:
        (WebCore::Document::Document): Add flag to determine if some style in
            the document has viewport units.
        (WebCore::Document::pageSizeAndMarginsInPixels): Remove RenderView
            argument.
        (WebCore::Document::updateViewportUnitsOnResize): Mark elements with
            viewport units for style recalc when the viewport size has
            changed.
        * dom/Document.h:
        (WebCore::Document::setHasStyleWithViewportUnits): Flag to determine
            if some style in the document has viewport units.
        (WebCore::Document::hasStyleWithViewportUnits): Ditto.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion): Remove RenderView argument.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): When the viewport is resized, call
            updateViewportUnitsOnResize on the document.
        * platform/Length.h:
        (WebCore::Length::isSpecified): Remove handling of viewport units,
            since they are now resolved to pixels.
        (WebCore::Length::viewportPercentageLength): Deleted.
        (WebCore::Length::isViewportPercentage): Deleted.
        * rendering/ClipPathOperation.h:
        (WebCore::ShapeClipPathOperation::pathForReferenceRect): Remove
            RenderView argument.
        (WebCore::BoxClipPathOperation::pathForReferenceRect): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateBlockChildDirtyBitsBeforeLayout): Remove
            handling of viewport units, since they get updated by
            updateViewportUnitsOnResize when the viewport is resized.
        (WebCore::RenderBlock::nodeAtPoint): Remove RenderView argument.
        (WebCore::RenderBlock::lineHeight): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations): Remove RenderView argument.
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
            Remove handling of viewport units, as they are resolved to pixels.
        (WebCore::RenderBox::computePercentageLogicalHeight): Ditto.
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing): Ditto.
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing): Ditto.
        (WebCore::RenderBox::hasViewportPercentageLogicalHeight): Deleted.
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect): Remove
            RenderView argument.
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Remove
            handling of viewport units, as they are resolved to pixels.
        (WebCore::computeBorderImageSide): Remove RenderView argument.
        (WebCore::RenderBoxModelObject::paintNinePieceImage): Ditto.
        (WebCore::RenderBoxModelObject::paintBorder): Ditto.
        (WebCore::RenderBoxModelObject::paintBoxShadow): Ditto.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded): Ditto.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::valueForLength): Remove unused
            roundPercentages argument.
        (WebCore::RenderElement::minimumValueForLength): Remove unused
            RoundPercentages and RenderView arguments.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems): Remove handling of viewport
            units as they are resolved to pixels.
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin): Ditto.
        (WebCore::RenderInline::lineHeight): Remove RenderView argument.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Ditto.
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::lineHeight): Ditto.
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::calcScrollbarThicknessUsing): Ditto.
        (WebCore::RenderScrollbarPart::computeScrollbarWidth): Ditto.
        (WebCore::RenderScrollbarPart::computeScrollbarHeight): Ditto.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
            Remove handling of viewport units, since they are resolved to
            pixels.
        (WebCore::RenderTable::computePreferredLogicalWidths): Now that
            viewport unit values are resolved to pixels at style recalc time,
            no special checking is needed to handle them, so update the
            comment to reflect that.
        * rendering/RenderThemeIOS.mm:
        (WebCore::applyCommonButtonPaddingToStyle): Add RenderView argument to
            CSSToLengthConversionData constructor.
        (WebCore::RenderThemeIOS::adjustButtonStyle): Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): Remove
            RenderView argument.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout): Remove handling of viewport units,
            since they are resolved to pixels.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox): Remove RenderView
            argument.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Remove RenderView argument.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computedShape): Ditto.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::floatValueForRadiusInBox): Ditto.
        (WebCore::BasicShapeCircle::path): Ditto.
        (WebCore::BasicShapeEllipse::floatValueForRadiusInBox): Ditto.
        (WebCore::BasicShapeEllipse::path): Ditto.
        (WebCore::BasicShapePolygon::path): Ditto.
        (WebCore::floatSizeForLengthSize): Ditto.
        (WebCore::BasicShapeInset::path): Ditto.
        * rendering/style/BasicShapes.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor): Ditto.
        (WebCore::RenderStyle::getRoundedBorderFor): Ditto.
        (WebCore::RenderStyle::computedLineHeight): Remove handling of
            viewport units since they are resolved to pixels.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setHasViewportUnits): Set if this style has
        a property set with viewport units.
        (WebCore::RenderStyle::hasViewportUnits): Ditto.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::resolveLengthAttributeForSVG): Remove RenderView argument.
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth): Ditto.
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight): Ditto.
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent): Ditto.

2014-05-27  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] serialization of the computed value should omit the default radii
        https://bugs.webkit.org/show_bug.cgi?id=132747

        Reviewed by Darin Adler.

        We should omit closest-side value, whereever is possible. Specification:
        http://www.w3.org/TR/2014/CR-css-shapes-1-20140320/#basic-shape-computed-values 
        This change aligns the behavior to the specification.

        Added new test cases for the shape-outside parsing tests.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeEllipse::cssText):

2014-05-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r169399.
        https://bugs.webkit.org/show_bug.cgi?id=133326

        Causes assertion failures in tests.  See
        http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/r169399%20(5622)/results.html
        (Requested by mlam on #webkit).

        Reverted changeset:

        "Caret's screen position does not update during an overflow
        scroll"
        https://bugs.webkit.org/show_bug.cgi?id=133256
        http://trac.webkit.org/changeset/169399

2014-05-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Lists styled with SVG fonts are not rendered as expected
        https://bugs.webkit.org/show_bug.cgi?id=133198

        Reviewed by Simon Fraser.

        There were a couple places in RenderListMarker and RenderMenuList that were
        implicitly creating TextRuns by passing a String to a function which
        expected a TextRun. Because TextRun has a constructor which takes a single
        String and isn't marked explicit, TextRuns were being created without
        any of the associated code that initializes the TextRun (such as creating
        a RenderingContext if necessary).

        This patch marks the aforementioned constructor as "explicit" to discourage
        such behavior in the future.

        Test: svg/custom/list-items-with-svg-font-family.html

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Mark constructors as explicit.
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Call
        RenderBlock::constructTextRun.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Ditto.
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::updateOptionsWidth): Ditto.

2014-05-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Caret's screen position does not update during an overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=133256

        Reviewed by Simon Fraser.

        During a scroll, we set a flag which caret position is gated on, but we never
        actually invalidate the caret's position. This patch does so.

        Test: editing/input/caret-position-during-scroll.html

        * editing/FrameSelection.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):

2014-05-27  Timothy Horton  <timothy_horton@apple.com>

        Turn on the LayerPool for iOS
        https://bugs.webkit.org/show_bug.cgi?id=133299

        Reviewed by Antti Koivisto.

        * Configurations/WebCore.xcconfig:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::createTileLayer):
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::removeTiles):
        Turn on the LayerPool for iOS.
        We've used this on Mac for a long time, and the WebKit1
        ("legacy") iOS TileCache also had a similar pool.
        This helps a good bit with flashiness while scrolling.

2014-05-27  David Hyatt  <hyatt@apple.com>

        REGRESSION: Audio volume scrubber does not show volume level thumb
        <rdar://problem/16902004>
        https://bugs.webkit.org/show_bug.cgi?id=133310

        Reviewed by Dean Jackson.

        This was just a silly mistake on my part with the setting of the pagination
        layers. Layers inside transforms are supposed to clear out their pagination
        status based off their ancestor containing block layers, and not off the
        enclosing pagination layer.
        
        Added fast/multicol/pagination/nested-transforms.html

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

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

        [Mac] media controls should prevent 'click' events from reaching the page
        https://bugs.webkit.org/show_bug.cgi?id=133268

        Reviewed by Jer Noble.

        Test: media/media-controls-cancel-events.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleEvent): Allow event handler to cancel event default action.
        (Controller.prototype.handleRewindButtonClicked): Cancel event default.
        (Controller.prototype.handlePlayButtonClicked): Ditto.
        (Controller.prototype.handleMuteButtonClicked): Ditto.
        (Controller.prototype.handleMinButtonClicked): Ditto.
        (Controller.prototype.handleCaptionButtonClicked): Ditto.
        (Controller.prototype.handleFullscreenButtonClicked): Ditto.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handlePlayButtonTouchEnd): Ditto.
        (ControllerIOS.prototype.handlePlayButtonTouchCancel): Ditto.
        (ControllerIOS.prototype.handleFullscreenTouchEnd): Ditto.
        (ControllerIOS.prototype.handleFullscreenTouchCancel): Ditto.
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd): Ditto.
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchCancel): Ditto.
        (ControllerIOS.prototype.handleWirelessPickerButtonClicked): Ditto.

2014-05-27  Jon Lee  <jonlee@apple.com>

        Fix Mavericks bots from r169383.
        https://bugs.webkit.org/show_bug.cgi?id=133311

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h: Update #ifdef to check for ENABLE(MEDIA_SOURCE).
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm: Ditto.

2014-05-27  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r168046): Incorrect handling of multicol spanner
        https://bugs.webkit.org/show_bug.cgi?id=133249

        Reviewed by David Hyatt.

        When removing the child of an object, the removeChild method should return the next element
        following the one being deleted. This will ensure that proper iteration and destruction of
        an object's children is possible.

        No new tests added. This is because the test that triggers this issue also triggers
        another assertion, in RenderMultiColumnSet::requiresBalancing(). However, that is a totally
        separate problem and will be handled in a separate bug: https://bugs.webkit.org/show_bug.cgi?id=133309

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::removeChild):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::removeChild):
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeChild):
        (WebCore::RenderElement::removeChildInternal):
        * rendering/RenderElement.h:
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::removeChild):
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):
        * rendering/RenderRubyRun.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::removeChildInternal):
        (WebCore::RenderMathMLScripts::removeChild):
        (WebCore::RenderMathMLScriptsWrapper::removeChildInternal):
        (WebCore::RenderMathMLScriptsWrapper::removeChild):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::removeChild):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::removeChild):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::removeChild):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::removeChild):
        * rendering/svg/RenderSVGText.h:

2014-05-27  Jon Lee  <jonlee@apple.com>

        Update ENABLE(MEDIA_SOURCE) on Mac
        https://bugs.webkit.org/show_bug.cgi?id=133141

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2014-05-27  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove BLOB guards
        https://bugs.webkit.org/show_bug.cgi?id=132863

        Reviewed by Csaba Osztrogonác.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        (WebCore::WebSocketChannel::abortOutgoingFrameQueue):
        * Modules/websockets/WebSocketChannel.h:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/js/JSFileReaderCustom.cpp:
        * dom/DOMExceptions.in:
        * dom/EventTargetFactory.in:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::publicURLManager):
        * dom/ScriptExecutionContext.h:
        * fileapi/AsyncFileStream.cpp:
        * fileapi/AsyncFileStream.h:
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        * fileapi/Blob.h:
        (WebCore::Blob::slice):
        * fileapi/Blob.idl:
        * fileapi/FileError.h:
        * fileapi/FileError.idl:
        * fileapi/FileException.cpp:
        * fileapi/FileException.h:
        * fileapi/FileException.idl:
        * fileapi/FileReader.cpp:
        * fileapi/FileReader.h:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:
        * fileapi/FileReaderLoaderClient.h:
        * fileapi/FileReaderSync.cpp:
        * fileapi/FileReaderSync.h:
        * fileapi/FileReaderSync.idl:
        * fileapi/FileThread.cpp:
        * fileapi/FileThread.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerFileBlobURL): Deleted.
        (WebCore::ThreadableBlobRegistry::registerBlobURL): Deleted.
        (WebCore::ThreadableBlobRegistry::registerBlobURLForSlice): Deleted.
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL): Deleted.
        (WebCore::ThreadableBlobRegistry::blobSize): Deleted.
        (WebCore::ThreadableBlobRegistry::getCachedOrigin): Deleted.
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * fileapi/WebKitBlobBuilder.h:
        * html/DOMURL.cpp:
        * html/DOMURL.h:
        * html/DOMURL.idl:
        * html/PublicURLManager.cpp:
        * html/PublicURLManager.h:
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::createBlobRegistry):
        * loader/LoaderStrategy.h:
        * page/DOMWindow.idl:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::shouldUseInnerURL):
        (WebCore::getCachedOrigin):
        * platform/FileStream.cpp:
        * platform/FileStream.h:
        * platform/FileStreamClient.h:
        * platform/SchemeRegistry.cpp:
        (WebCore::canDisplayOnlyIfCanRequestSchemes):
        * platform/network/BlobRegistry.cpp:
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/BlobResourceHandle.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::deepCopy):
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendBlob):
        (WebCore::FormData::appendKeyValuePairItems):
        (WebCore::FormData::resolveBlobReferences):
        (WebCore::encodeElement):
        (WebCore::decodeElement):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::operator==):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::closeCurrentStream):
        (WebCore::advanceCurrentStream):
        (WebCore::formCreate):
        (WebCore::formRead):
        (WebCore::setHTTPBody):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::getFormElementsCount):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::addEncodedBlobToSoupMessageBody):
        (WebCore::addFormElementsToSoupMessage):
        * workers/WorkerGlobalScope.idl:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::createRequest):

2014-05-27  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Allow building CMake based ports with WEB_REPLAY
        https://bugs.webkit.org/show_bug.cgi?id=133154

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt:

2014-05-27  Adrian Perez de Castro  <aperez@igalia.com>

        [GStreamer] Add missing <wtf/MathExtras.h> header
        https://bugs.webkit.org/show_bug.cgi?id=133236

        Reviewed by Philippe Normand.

        In some configurations, not including <wtf/MathExtras.h> will cause
        errors about undefined functions. In particular, this happens in
        Linux with glibc 2.19 and compiling with Clang. Having the header
        included is the correct thing to do anyway.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        Include <wtf/MathExtras.h>

2014-05-27  Manuel Rego Casasnovas  <rego@igalia.com>

        Setting up OrderIterator shouldn't require an extra Vector
        https://bugs.webkit.org/show_bug.cgi?id=119061

        Reviewed by Darin Adler.

        From Blink r153971 by <jchaffraix@chromium.org>

        This patches reuse the OrderIterator's Vector. It provides a helper class OrderIteratorPopulator, used for
        manipulating the Vector directly. Which allows to consolidate the code into a single implementation across
        flexbox and grid.

        No new tests, already covered by current tests.

        * rendering/OrderIterator.cpp:
        (WebCore::OrderIteratorPopulator::~OrderIteratorPopulator): Reset OrderIterator and call
        removeDuplicatedOrderValues().
        (WebCore::OrderIteratorPopulator::removeDuplicatedOrderValues): Sorts the Vector and removes the duplicated
        order values.
        (WebCore::OrderIteratorPopulator::collectChild): Collect order value information from child.
        (WebCore::OrderIterator::setOrderValues): Deleted.
        * rendering/OrderIterator.h:
        (WebCore::OrderIteratorPopulator::OrderIteratorPopulator): Add helper class to manipulate OrderValues Vector.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Remove unneeded code related to old OrderValues vector.
        (WebCore::RenderFlexibleBox::prepareOrderIteratorAndMargins): Populate OrderIterator using collectChild().
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): Deleted.
        * rendering/RenderFlexibleBox.h: Rename computeMainAxisPreferredSizes() to prepareOrderIteratorAndMargins().
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Populate OrderIterator using collectChild().

2014-05-26  Tim Horton  <timothy_horton@apple.com>

        [wk2] RemoteLayerBackingStore front buffers should be purgeable when unparented
        https://bugs.webkit.org/show_bug.cgi?id=133020
        <rdar://problem/16521736>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::willAddSurface):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::releaseGraphicsContext):
        Rename clearGraphicsContext to releaseGraphicsContext for clarity.

2014-05-26  Philip Rogers  <pdr@google.com>

        Remove special case for transparent SVG root layers
        https://bugs.webkit.org/show_bug.cgi?id=116856

        Reviewed by Dirk Schulze.

        This patch removes a special case from RenderLayer for root SVG layers
        with opacity. Instead of checking whether a composited layer exists in
        SVGRenderingContext::prepareToRenderSVGContent we now exclude the root
        SVG renderobject from the opacity checks in prepareToRenderSVGContent.

        This is a merge of https://src.chromium.org/viewvc/blink?view=rev&revision=174102
        by Philip Rogers <pdr@chromium.org>.

        No new tests as this is covered by svg/custom/composited-svg-with-opacity.html.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent): Deleted.
        * rendering/RenderLayer.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
            The opacity case for root svg renderers is now handled by
            RenderLayer.

2014-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Fix build error raised when CSS_SELECTOR_JIT_DEBUGGING is 1
        https://bugs.webkit.org/show_bug.cgi?id=133266

        Reviewed by Benjamin Poulain.

        When CSS_SELECTOR_JIT_DEBUGGING is 1, build erros occur on x86_64.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateEpilogue):

2014-05-26  Benjamin Poulain  <benjamin@webkit.org>

        Fix the quirks mode selector matching of the pseudo classes :hover and :active
        https://bugs.webkit.org/show_bug.cgi?id=133063

        Reviewed by Antti Koivisto.

        Our implementation of the quirks mode of :active and :hover was very wrong. The only
        thing it was doing is verify the pseudo class is not the first selector of a fragment
        (which was conveniently the only thing that was tested :)).

        Since those pseudo class were only checking for the order of the filters, something like
            #target:hover
        would succeed because :hover is not the first simple selector, while
            :hover#target
        would fail.

        That behavior is also a problem for the CSS JIT as it is an implementation detail of SelectorChecker
        and compiling something like that with our out-of-order matching would be nonsense.

        This patch update the implementation to follow http://quirks.spec.whatwg.org/#the-:active-and-:hover-quirk
        Basically, the only cases that do not work in quirks mode are selectors composed only of "*, :hover and :active".

        To implement this behavior, I needed to be able to inspect a complete selector fragment, including
        what is before and after :hover/:active.
        To do that, I replaced the boolean isSubSelector by a pointer to the first selector of the fragment.
        When we need to match :active/:hover in quirks mode, we just go over all the selectors in the fragment
        to find one of the qualifying match type.

        Tests: fast/selectors/active-hover-quirks.html
               fast/selectors/active-quirks.html
               fast/selectors/hover-quirks.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::canMatchHoverOrActiveInQuirksMode):
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):

2014-05-26  Zalan Bujtas  <zalan@apple.com>

        Split the call to adjustForLocalZoom out into a separate expression.
        https://bugs.webkit.org/show_bug.cgi?id=133286

        Reviewed by Darin Adler.

        This patch ensures that adjustForLocalZoom() always gets called before we look at
        zoomFactor's value. (and not rely on the undefined behavior of the order of function argument evaluation)

        * dom/Element.cpp:
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):

2014-05-26  Darin Adler  <darin@apple.com>

        Class name matching should use ASCII case-insensitive matching, not Unicode case folding
        https://bugs.webkit.org/show_bug.cgi?id=133292

        Reviewed by Anders Carlsson.

        Tests: fast/dom/getElementsByClassName/ASCII-case-insensitive.html
               fast/dom/getElementsByClassName/case-sensitive.html

        * dom/SpaceSplitString.cpp:
        (WebCore::hasNonASCIIOrUpper): Deleted.
        (WebCore::tokenizeSpaceSplitString): Use a for loop instead of while.
        (WebCore::spaceSplitStringTable): Renamed from sharedDataMap; the new name is supposed
        to help us see the analogy with the atomic string table.
        (WebCore::SpaceSplitString::set): Removed unneeded special case for null and preflight
        since AtomicString::convertToASCIILowercase now handles both of those. Changed to call
        convertToASCIILowercase instead of foldCase, since we don't want to fold non-ASCII.
        (WebCore::SpaceSplitString::spaceSplitStringContainsValue): Ditto.
        (WebCore::SpaceSplitStringData::create): Marked this inline since it's only called in
        one place and that place is in this file. Also used auto a bit and used get instead of
        find since the value type is a simple pointer.
        (WebCore::SpaceSplitStringData::destroy): Removed unneeded check for null. We never
        create any SpaceSplitStringData with empty strings, and a null is a kind of empty string.

        * dom/SpaceSplitString.h: Removed some unneeded includes and some unneeded uses of the
        inline keyword. Changed types from size_t to unsigned in a couple places; we had a mix
        of the types and there was no reason to use size_t there.

2014-05-26  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Implementation of the "grid" shorthand.
        https://bugs.webkit.org/show_bug.cgi?id=132122

        Reviewed by Darin Adler.

        The grid property is a shorthand that sets all of the explicit
        grid properties (grid-template-rows, grid-template-columns, and
        grid-template-areas) as well as all the implicit grid properties
        (grid-auto-rows, grid-auto-columns, and grid-auto-flow) in a
        single declaration

        Notice that either explicit or implicit grid can be specified,
        assigning the initial values to the omitted properties.

        Test: fast/css-grid-layout/grid-shorthand-get-set.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridShorthand):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitGridShorthand):
        * css/StylePropertyShorthand.h:

2014-05-26  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Legacy Element.offset* client* return values are invalid in certain cases.
        https://bugs.webkit.org/show_bug.cgi?id=133272

        Reviewed by Simon Fraser.

        Element.offset* client* functions applied various rounding strategies on the return values before r168868.
        (for example, offsetLeft/Top either floored through implicit integer arithmetics or rounded explicitly depending
        whether the zoom scale was 1. see http://trac.webkit.org/changeset/168868/trunk/Source/WebCore/dom/Element.cpp for details)
        This patch mimics the legacy behavior by either rounding or flooring the return value.

        Not testable (legacy switch is not exposed)

        * dom/Element.cpp:
        (WebCore::adjustForLocalZoom):
        (WebCore::convertToNonSubpixelValueIfNeeded):
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):

2014-05-26  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Input fields and text areas are not rendered correctly after r167771
        https://bugs.webkit.org/show_bug.cgi?id=133181

        Reviewed by Gyuyoung Kim.

        r167771 changed arguments of RenderTheme two virtual method arguments which were not reflected
        in changes in derived classes, which caused parent method to be called. Arguments in derived class
        were updated, also 'override' specifiers were added to all virtual methods to prevent similar errors.

        Already covered by fast/forms/textarea-placeholder-wrapping.html

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintTextField):
        (WebCore::RenderThemeEfl::paintTextArea):
        * platform/efl/RenderThemeEfl.h:
        (WebCore::RenderThemeEfl::supportsHover):
        (WebCore::RenderThemeEfl::supportsControlTints):

2014-05-20  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Children of grid containers must be turned into grid items
        https://bugs.webkit.org/show_bug.cgi?id=132991

        Reviewed by Darin Adler.

        From Blink r150472 by <jchaffraix@chromium.org>

        According to specs each child of a grid container must become a
        grid item meaning that grid items are grid level boxes and thus,
        do not participate in the block formatting context but in the grid
        formatting one.

        This change updates the grid items' 'display' property after style
        resolution so that we match the specification (see section 4. Grid
        Items). The spec basically instructs us to compute the value of
        'display' by applying the table in CSS2.1 Chapter 9.7
        http://www.w3.org/TR/CSS2/visuren.html#dis-pos-flo

        Test: fast/css-grid-layout/grid-item-display.html

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

2014-05-26  Zan Dobersek  <zdobersek@igalia.com>

        Remove Vector copies in ShorthandPropertyWrapper implementation and use
        https://bugs.webkit.org/show_bug.cgi?id=133265

        Reviewed by Simon Fraser.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::ShorthandPropertyWrapper::ShorthandPropertyWrapper): Move the passed-in Vector
        into the member variable instead of using Vector<>::swap().
        (WebCore::ShorthandPropertyWrapper::propertyWrappers): Return a const reference of the member
        variable instead of a const value.
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Move the Vector
        object into the ShorthandProperthyWrapper constructor.
        (WebCore::gatherEnclosingShorthandProperties): Deploy a range-based for-loop.

2014-05-26  Tanay C  <tanay.c@samsung.com>

        [EFL] Fix build error in blob.cpp after r168435
        https://bugs.webkit.org/show_bug.cgi?id=132678

        Reviewed by Alexey Proskuryakov.

        * fileapi/Blob.cpp:
        (WebCore::Blob::size): Using isInBound to check range of local var
        actualsize to resolve build error

2014-05-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove TileCairo and TiledBackingStoreBackendCairo
        https://bugs.webkit.org/show_bug.cgi?id=133274

        Reviewed by Gyuyoung Kim.

        Now, TiledBackingStore is only used for CoordinatedGraphics and the EFL port.
        CoordinatedGraphics does not use TileCairo and TiledBackingStoreBackendCairo.

        This patch removed them and refactored related files.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore): Deleted.
        * platform/graphics/TiledBackingStore.h:
        * platform/graphics/TiledBackingStoreBackend.h:
        * platform/graphics/cairo/TileCairo.cpp: Removed.
        * platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp: Removed.

2014-05-25  Jinwoo Song  <jinwoo7.song@samsung.com>

        setData() of DataTransfer has a void return type
        https://bugs.webkit.org/show_bug.cgi?id=133108

        Reviewed by Alexey Proskuryakov.

        According to HTML5 spec, setData() of DataTranfer interface does not return value.
        http://www.w3.org/TR/html/editing.html#the-datatransfer-interface

        Test: editing/pasteboard/set_data_typeof_return.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setData):
        * dom/DataTransfer.h:
        * dom/DataTransfer.idl:
        * platform/Pasteboard.h:
        * platform/efl/PasteboardEfl.cpp:
        (WebCore::Pasteboard::writeString):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeString):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writeString):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeString):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeString):

2014-05-25  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Use ScrollView's scrollOffset as the unobscuredContentRect
        https://bugs.webkit.org/show_bug.cgi?id=133262

        Reviewed by Simon Fraser.

        Since VisibleContentRect was fixed, we were no longer sending scroll events when updating the scrollOffset
        when updating the visible content rects. The reason is that the scrollOffset was defined as the top left of the
        VisibleContentRect, and as such was already at the end position after updating the unobscured rect.

        This patch split the unobscuredContentRect in unobscuredContentSize (updated live on zoom) and the position defined
        by the ScrollView's scrollOffset (updated when scrolling).

        * WebCore.exp.in:
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::unobscuredContentRect):
        (WebCore::ScrollView::setUnobscuredContentSize):
        (WebCore::ScrollView::setUnobscuredContentRect): Deleted.

2014-05-25  David Kilzer  <ddkilzer@apple.com>

        Add type-checked casts for TransformOperations
        <http://webkit.org/b/133217>

        Reviewed by Simon Fraser.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::validateTransformOperations):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::getTransformFunctionValue):
        - Switch to type-checked casts.

        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TranslateTransformOperation.h:
        - Add 'final' to class declaration.
        - Add 'override' to overridden methods.
        - Add type-checked cast via TRANSFORMOPERATION_TYPE_CASTS macro.
        - Move implementation of operator==(const TransformOperation&)
          from header to source file so it is able to use a type-checked
          cast, and switch back to using a reference instead of a
          pointer.
        - Add or update ASSERT in private constructor to check for
          correct OperationType in classes that represent multiple
          types.

        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==): Added.

        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==): Added.
        (WebCore::MatrixTransformOperation::blend):
        - Switch to type-checked casts and use a reference.

        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==): Added.
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==): Added.
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==): Added.
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==): Added.
        (WebCore::SkewTransformOperation::blend):
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==): Added.
        (WebCore::TranslateTransformOperation::blend):
        - Switch to type-checked casts.

        * platform/graphics/transforms/TransformOperation.h:
        (WebCore::TransformOperation::isRotateTransformOperationType):
        (WebCore::TransformOperation::isScaleTransformOperationType):
        (WebCore::TransformOperation::isSkewTransformOperationType):
        (WebCore::TransformOperation::isTranslateTransformOperationType):
        - Add type-checking methods used in constructors and type-checked
          casts.
        - Define TRANSFORMOPERATION_TYPE_CASTS macro used by subclasses.

2014-05-25  David Kilzer  <ddkilzer@apple.com>

        Crash in WebCore::TextResourceDecoder::checkForCSSCharset
        <http://webkit.org/b/133257>
        <rdar://problem/17027109>

        Reviewed by Alexey Proskuryakov.

        Test: fast/encoding/css-charset-missing-semi-colon-and-newline.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForCSSCharset): Add early
        return.

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

        [Mac] preload AVAssetTrack properties before asking for them
        https://bugs.webkit.org/show_bug.cgi?id=133240

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::assetTrackMetadataKeyNames): Add preferredTransform and naturalSize to the list
            of properties we preload.

2014-05-24  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Remove one of the CSSProperty constructor
        https://bugs.webkit.org/show_bug.cgi?id=131094

        Reviewed by Darin Adler.

        Remove one of the CSSProperty constructor, because it is obsolete.

        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty): Deleted.
        * css/StyleProperties.h:
        (WebCore::StyleProperties::PropertyReference::toCSSProperty):

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

        Rename ScrollingTreeScrollingNode's m_scrollPosition to make it clear that it's the value committed from the state tree
        https://bugs.webkit.org/show_bug.cgi?id=133254

        Reviewed by Tim Horton.

        Make ScrollingTreeScrollingNode::scrollPosition() pure virtual, and rename
        the member variable and associated getter to make it clear that they relate
        to the last committed scroll position.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::lastCommittedScrollPosition):
        (WebCore::ScrollingTreeScrollingNode::scrollPosition): Deleted.

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

        Share some more ScrollingTreeScrollingNode code
        https://bugs.webkit.org/show_bug.cgi?id=133248

        Reviewed by Sam Weinig.

        Push scrollBy(), scrollByWithoutContentEdgeConstraints() and setScrollPosition()
        down to ScrollingTreeFrameScrollingNode.
        
        This requires that scrollPosition() return the right thing for each class, so make
        it virtual. Future patches will reduce the confusion between the committed scroll
        position and the one derived from layers.

        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::scrollBy):
        (WebCore::ScrollingTreeFrameScrollingNode::scrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNode::setScrollPosition):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollPosition):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPosition): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollBy): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollByWithoutContentEdgeConstraints): Deleted.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollBy):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollBy): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollByWithoutContentEdgeConstraints): Deleted.

2014-05-24  Chris Fleizach  <cfleizach@apple.com>

        AX: fix coordinate mapping for iOS accessibility
        https://bugs.webkit.org/show_bug.cgi?id=133188

        Reviewed by Sam Weinig.

        Make WebCore aware of the accessibility point/rect conversion methods.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]):
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::accessibilityScreenToRootView):
        (WebCore::Chrome::rootViewToAccessibilityScreen):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:

2014-05-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Non-compositing transforms with subpixel coordinates paint to wrong position.
        https://bugs.webkit.org/show_bug.cgi?id=133184
        <rdar://problem/16745606>

        Reviewed by Simon Fraser.

        Snapping relative negative coordinate values should produce the same position as if they were
        positive absolute coordinates.
        When a child box gets positioned off of its containers towards top/left, its relative coordinates
        become negative. Pixel snapping those negative values should produce the same
        final painting position as if the child box was fixed positioned with positive coordinates.
        Since halfway values always round away from zero, negative and positive halfway values
        produce opposite rounding direction.
        This patch ensures that negative halfway values round to the direction as if they were positive.  

        Test: fast/layers/hidpi-floor-negative-coordinate-values-to-maintain-rounding-direction.html

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):

2014-05-24  Frédéric Wang  <fred.wang@free.fr>

        Use size variants and glyph assembly from the MATH data.
        https://bugs.webkit.org/show_bug.cgi?id=130322

        Reviewed by Chris Fleizach.

        This patch modifies the RenderMathMLOperator code to use the MATH table
        when one is provided in the current font on the <math> tag. More
        precisely, the MathVariants table is used to draw a size variant or
        a glyph assembly. The displaystyle attribute is not supported yet, so
        for now large operators are always assumed to be in display style. The
        MATH support does not work well with all platforms+fonts, so at the
        moment the default font-family on the <math> is not changed.

        Tests: mathml/opentype/large-operators-LatinModern.html
               mathml/opentype/opentype-stretchy.html
               mathml/opentype/vertical-LatinModern.html

        * css/mathml.css: We only specify the default font-family on the math root, so that people can easily style the mathematics.
        For now, old fonts without the MATH table are still used as the default.
        (math):
        (math, mfenced > *): Deleted.
        (mo, mfenced): Deleted.
        * platform/graphics/SimpleFontData.cpp: don't return the math data if the font is loading.
        (WebCore::SimpleFontData::mathData):
        * platform/graphics/opentype/OpenTypeMathData.cpp: update #ifdef so that disabling ENABLE_OPENTYPE_MATH won't lead to errors with unused parameters.
        (WebCore::OpenTypeMathData::OpenTypeMathData):
        (WebCore::OpenTypeMathData::getMathConstant):
        (WebCore::OpenTypeMathData::getItalicCorrection):
        (WebCore::OpenTypeMathData::getMathVariants):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::boundsForGlyph):
        (WebCore::RenderMathMLOperator::heightForGlyph):
        (WebCore::RenderMathMLOperator::advanceForGlyph):
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths): We handle preferred width of size variants.
        (WebCore::RenderMathMLOperator::shouldAllowStretching): This function now only returns whether the operator will stretch and no longer has side effect.
        (WebCore::RenderMathMLOperator::getGlyphAssemblyFallBack): We add a function to convert from the MathVariant table data to the format supported by RenderMathMLOperator.
        (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator): We add a function to get the glyph that will be used for large operators in display style.
        (WebCore::RenderMathMLOperator::findStretchyData): We make this function handle size variants.
        (WebCore::RenderMathMLOperator::updateStyle): We handle size variants.
        (WebCore::RenderMathMLOperator::paint): We handle size variants.
        * rendering/mathml/RenderMathMLOperator.h:

2014-05-23  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (iOS WebKit2): requestAnimationFrame fires more than once between layer tree commits
        https://bugs.webkit.org/show_bug.cgi?id=132794
        <rdar://problem/16877909>

        Reviewed by Simon Fraser.

        Virtualize DisplayRefreshMonitor so that WebKit2 can implement its own DisplayRefreshMonitor for UI-side compositing views.
        This allows the synchronization of requestAnimationFrame callbacks with UI-side compositing painting.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        
        * page/ChromeClient.h:
        (WebCore::ChromeClient::graphicsLayerFactory):
        (WebCore::ChromeClient::createDisplayRefreshMonitor):
        * platform/graphics/DisplayRefreshMonitorFactory.h: Added.
        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::createDisplayRefreshMonitor):
        * platform/graphics/GraphicsLayerUpdater.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::createDisplayRefreshMonitor):
        * rendering/RenderLayerCompositor.h:
        Give the ChromeClient a chance to provide us with a custom DisplayRefreshMonitor.
        If it does not, we'll fall back to making a DisplayRefreshMonitorMac or
        DisplayRefreshMonitorIOS depending on the platform.

        * dom/ScriptedAnimationController.cpp:
        * dom/ScriptedAnimationController.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/DisplayRefreshMonitorClient.cpp: Added.
        * platform/graphics/DisplayRefreshMonitorClient.h: Added.
        * platform/graphics/DisplayRefreshMonitorManager.cpp: Added.
        * platform/graphics/DisplayRefreshMonitorManager.h: Added.
        Split DisplayRefreshMonitor.cpp into one file per class.
        Use references in a few places.
        Remove some useless comments.

        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        Use takeAny() and remove a FIXME about it not existing.

        * platform/graphics/DisplayRefreshMonitorClient.cpp: Added.
        (WebCore::DisplayRefreshMonitorClient::fireDisplayRefreshIfNeeded):
        Use an early return instead of having the whole function body in an if().

        * platform/graphics/ios/DisplayRefreshMonitorIOS.h: Added.
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        * platform/graphics/mac/DisplayRefreshMonitorMac.h: Added.
        Virtualize DisplayRefreshMonitorIOS and DisplayRefreshMonitorMac,
        and move things specific to each of them out of DisplayRefreshMonitor itself.

2014-05-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Apply backtracking optimization to adjacent backtracking
        https://bugs.webkit.org/show_bug.cgi?id=132951

        Reviewed by Benjamin Poulain.

        Apply the backtracking optimization to the adjacent backtracking.
        This optimization is already done for the descendant backtracking.
        We apply this to the adjacent backtracking similarly.

        Test: fast/selectors/backtracking-adjacent-optimized.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::solveAdjacentBacktrackingActionForDirectAdjacent):
        (WebCore::SelectorCompiler::solveBacktrackingAction):
        (WebCore::SelectorCompiler::computeBacktrackingStartOffsetInChain):
        (WebCore::SelectorCompiler::computeBacktrackingHeightFromDescendant):
        (WebCore::SelectorCompiler::computeBacktrackingWidthFromIndirectAdjacent):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures):
        (WebCore::SelectorCompiler::computeBacktrackingStartHeightFromDescendant): Deleted.

2014-05-23  Alex Christensen  <achristensen@webkit.org>

        Make CSS JIT run on ARM64.
        https://bugs.webkit.org/show_bug.cgi?id=133156

        Reviewed by Benjamin Poulain.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::saveAllocatedRegisters):
        (WebCore::FunctionCall::restoreAllocatedRegisters):
        Use StackAllocator's new push and pop functions to push and pop a vector instead of iterating it.
        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::reserveCalleeSavedRegisters):
        (WebCore::RegisterAllocator::restoreCalleeSavedRegisters):
        Return a vector of registers to allocate instead of doing the allocation to make the RegisterAllocator
        not need to know about the StackAllocator and to use the new vector push and pop functions.
        (WebCore::RegisterAllocator::~RegisterAllocator):
        Store RegisterIDs instead of StackReferences to avoid needing to know about the stack.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        Removed the requirement for assert to be disabled to print disassembly when debugging css jit.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateEpilogue):
        Added to correctly push the link register and frame pointer.
        This is required if the jit code calls a function on arm64 and helpful for debugging tools on x86_64.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        Generate the prologue and epilogue which respectively push and pop
        the link register, frame pointer, and callee saved registers if needed.
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):
        Added new vector push and pop functions to use stp and ldb instructions on arm64.

2014-05-23  Jeremy Jones  <jeremyj@apple.com>

        Hide fullscreen immediately when switching tabs.
        https://bugs.webkit.org/show_bug.cgi?id=133239

        Reviewed by Eric Carlson.

        This change allows fullscreen to disappear immediately while still cleaning
        up fullscreen normally.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        renamed function to requestHideAndExitFullscreen

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        renamed function to requestHideAndExitFullscreen

        (-[WebVideoFullscreenController requestHideAndExitFullscreen]):
        rename of requestExitFullscreen that also hides.

        (-[WebVideoFullscreenController requestExitFullscreen]): Deleted.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: declare requestHideAndExitFullscreen()
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
        this hides the window before requesting exitfullscreen from the model.

2014-05-23  Tim Horton  <timothy_horton@apple.com>

        [iOS] WKPDFView should have a page indicator
        https://bugs.webkit.org/show_bug.cgi?id=133109
        <rdar://problem/16383003>

        Reviewed by Anders Carlsson.

        * English.lproj/Localizable.strings:

2014-05-23  Enrica Casucci  <enrica@apple.com>

        Remove invalid ASSERT in wordRangeForPosition.
        https://bugs.webkit.org/show_bug.cgi?id=133232

        Reviewed by Ryosuke Niwa.

        In WK2 for iOS this function is called on every selection change.
        The selection could be set by Javascript in an element that is not visible.
        In that case we won't be able to create a VisiblePosition therefore wordRangeForPosition
        should not ASSERT that the VisiblePosition is not null, but rather
        perform an early return if it is null.

        * editing/VisibleUnits.cpp:
        (WebCore::wordRangeFromPosition):

2014-05-23  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Use gridRowCount() and gridColumnCount() when possible
        https://bugs.webkit.org/show_bug.cgi?id=133213

        Reviewed by Sergio Villar Senin.

        Use gridRowCount() and gridColumnCount() instead of m_grid.size() and
        m_grid[0].size() to make the code more descriptive and easier to
        understand.

        No new tests (No change in behavior).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::growGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):

2014-05-23  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r153917): Chart for the Category Explorer within Quicken Essentials
        does not draw until you force a redraw
        https://bugs.webkit.org/show_bug.cgi?id=133228
        <rdar://problem/15221231>

        Reviewed by Simon Fraser.

        * platform/RuntimeApplicationChecks.cpp: (WebCore::applicationIsQuickenEssentials):
        * platform/RuntimeApplicationChecks.h:
        Added a check for Quicken Essentials.

        * platform/mac/WidgetMac.mm: (WebCore::Widget::paint): Don't do an early return
        for Quicken Essentials, it depends on drawing to update its layer.

2014-05-23  Mihnea Ovidenie  <mihnea@adobe.com>

        REGRESSION(r169105): fast/regions/cssom/region-range-for-box-crash.html is more crashy than before
        https://bugs.webkit.org/show_bug.cgi?id=133124

        Reviewed by David Hyatt.

        When adjusting the end points of a subtree selection in the case of a document
        with named flows, we have to make sure that we pass the computed end
        points to the visible selection algorithm only if the end points are
        part of the same subtree, otherwise assume a selection clear behavior.

        The test fast/regions/cssom/region-range-for-box-crash.html is used to
        test this behavior.

        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::adjustForVisibleSelection):
        (WebCore::SelectionSubtreeRoot::selectionStartEndPositions): Moved to header file.
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::selectionStartEndPositions):

2014-05-23  Jeremy Jones  <jeremyj@apple.com>

        reset m_havePreparedToPlay when changing media engines.
        https://bugs.webkit.org/show_bug.cgi?id=133199

        Reviewed by Eric Carlson.

        If a play request comes in before the media player is created, m_havePreparedToPlay
        is set to true. But when the player is created, this prevents the new player from
        getting the prepare call.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated): set m_havePreparedToPlay false.

2014-05-23  Oliver Hunt  <oliver@apple.com>

        Navigator object needs to have properties directly on the instance object
        https://bugs.webkit.org/show_bug.cgi?id=133221

        Reviewed by Mark Lam.

        Flag the Navigator object as requiring properties to be on the instance
        as there were a few compatibility issues when on the prototype.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InterfaceRequiresAttributesOnInstance):

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

        Switch CSSGradientValue to use more references
        https://bugs.webkit.org/show_bug.cgi?id=133206

        Reviewed by Andreas Kling.

        Switch from pointers to references in various places.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        (WebCore::CSSGradientValue::addStops):
        (WebCore::positionFromValue):
        (WebCore::CSSGradientValue::computeEndPoint):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::resolveRadius):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSGradientValue.h:

2014-05-23  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make webkit-box-shadow painting subpixel aware.
        https://bugs.webkit.org/show_bug.cgi?id=133201
        <rdar://problem/16072830>

        Reviewed by Simon Fraser.

        This patch enables webkit-box-shadow to be painted on a subpixel position. However, we
        still truncate -webkit-box-shadow property values. Tracked here: http://webkit.org/b/133202

        Test: fast/box-shadow/hidpi-webkit-box-shadow-subpixel-position.html

        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::inflateWithRadii): same as in from RoundedRect.
        (WebCore::FloatRoundedRect::adjustRadii): same as in from RoundedRect.
        * platform/graphics/FloatRoundedRect.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2014-05-22  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Crash when exceeding maximum cache limit.
        https://bugs.webkit.org/show_bug.cgi?id=133185

        Reviewed by Brent Fulgham.

        When the maximum cache limit is exceeded, I get a crash.
        This happens when deleting cache entries, because a reference to the url string object in the LRU list
        is used as a parameter to invalidateCacheEntry(), when called from makeRoomForNewEntry().
        When the string is removed from the LRU list in makeRoomForNewEntry(), the string is deleted.
        Next, the string is accessed again to remove the url from the index, and we crash.

        This can be fixed by removing the string from the LRU list after it is removed from the index.

        Fixing the crash also revealed an infinite loop problem.
        If the url for some reason only exist in the LRU list, and not in the index,
        we will inifitely loop in makeRoomForNewEntry(), trying to remove this url from the cache, but never succeeding.
        This can be fixed by removing the url from the LRU list, also when it's not in the index.

        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::makeRoomForNewEntry): Avoid infinite loop by checking if there are more cache entries to remove.
        (WebCore::CurlCacheManager::invalidateCacheEntry): Avoid crash and infinite loop by removing url from LRU list last.

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

        Make viewport units work in CSS gradients
        https://bugs.webkit.org/show_bug.cgi?id=133204
        <rdar://problem/17012259>
        
        Reviewed by Tim Horton.
        
        Make viewport percentage lengths work in gradients.

        Test: fast/gradients/viewport-units-gradient.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSGradientValue.h:

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add support for minimal-ui viewports
        https://bugs.webkit.org/show_bug.cgi?id=133162

        Reviewed by Simon Fraser.

        Add support for minimal-ui directly into the Viewport configuration.

        ViewportConfiguration knows about two kinds of layout size in scrollview coordinates:
        -normal size
        -minimal ui size.

        Initially, the page is initialized with resetMinimalUI() and starts with a normal layout.

        At any time before the main resource is loaded, the Web page can update its viewport meta tag
        to include minimal-ui. The viewport configuration is updated immediately to reflect the minimal-ui
        layout size. Any layout after that takes minimal-ui into account.

        * WebCore.exp.in:
        * css/LengthFunctions.cpp:
        (WebCore::minimumValueForLength):
        (WebCore::floatValueForLength):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::viewportPercentageValue):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::operator==):
        * page/FrameView.cpp:
        (WebCore::FrameView::setViewportSizeForCSSViewportUnits):
        (WebCore::FrameView::viewportSizeForCSSViewportUnits):
        (WebCore::FrameView::setViewportSize): Deleted.
        (WebCore::FrameView::viewportSize): Deleted.
        * page/FrameView.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::setMinimumLayoutSize):
        (WebCore::ViewportConfiguration::setMinimumLayoutSizeForMinimalUI):
        (WebCore::ViewportConfiguration::activeMinimumLayoutSizeInScrollViewCoordinates):
        (WebCore::ViewportConfiguration::resetMinimalUI):
        (WebCore::ViewportConfiguration::pageWillRenderFirstFrame):
        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::minimumScale):
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::ViewportConfiguration::layoutWidth):
        (WebCore::ViewportConfiguration::layoutHeight):
        (WebCore::ViewportConfiguration::description):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::minimumLayoutSizeForMinimalUI):
        (WebCore::ViewportConfiguration::usesMinimalUI):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewportSizeForCSSViewportUnits):
        (WebCore::RenderView::viewportSize): Deleted.
        * rendering/RenderView.h:

2014-05-22  Ryosuke Niwa  <rniwa@webkit.org>

        Can't type in status in facebook.com on iOS Safari because keyboard disappears
        https://bugs.webkit.org/show_bug.cgi?id=133196

        Reviewed by Geoffrey Garen.

        Fixed the bug by rolling out r156252.

        When the user taps on the status on facebook.com, the page focuses a textarea,
        which is then made momentarily invisible by setting display:none.
        The page then removes display:none later and expects the textarea to be still focused.

        With r156252, the focus is removed after the page sets display:none and the keyboard disappears.
        Since the focus is never reset on the textarea, the user can never type in anything.

        The specification may need to change here given that this (rather odd) behavior/expectation exists
        on one of the most popular websites on the Web.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateLayout):
        (WebCore::Document::resetHiddenFocusElementSoon): Deleted.
        (WebCore::Document::resetHiddenFocusElementTimer): Deleted.
        * dom/Document.h:

2014-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        http/tests/security/xss-DENIED-xsl-document-redirect.xml fails with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=132523

        Reviewed by Alexey Proskuryakov.

        We should not manufacture a response in the event of an error during a
        synchronous XHR. In addition, this test removes two places that are
        sensitive to such a manufactured response.

        Updates test expectations.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest): Don't inspect a
        loader response if there is an error
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Do not
        manufacture a response
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Do not
        manufacture a response
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc): Only use the response's URL if no error
        occurred.

2014-05-22  Myles C. Maxfield  <litherum@gmail.com>

        Unreviewed typo fix.

        Reviewed by NOBODY.

        No new tests.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect): Accidentally said run.length() instead of glyphBuffer.size().

2014-05-22  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Web process should try to shrink its memory footprint when going into background.
        <https://webkit.org/b/133197>
        <rdar://problem/17011561>

        Make releaseMemory() public so we can call it from the process-will-suspend callback.

        Reviewed by Gavin Barraclough.

        * WebCore.exp.in:
        * platform/MemoryPressureHandler.h:

2014-05-22  Andreas Kling  <akling@apple.com>

        Hook up a setting for showing detailed logging during memory pressure relief.
        <https://webkit.org/b/133194>

        Make the pressure relief logger opt-in. Also make it flush memory back to the
        OS (for both malloc and FastMalloc) to get more accurate numbers at each step.

        Reviewed by Gavin Barraclough.

        * WebCore.exp.in:
        * platform/MemoryPressureHandler.cpp:
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::ReliefLogger::ReliefLogger):
        (WebCore::MemoryPressureHandler::ReliefLogger::~ReliefLogger):
        (WebCore::MemoryPressureHandler::ReliefLogger::setLoggingEnabled):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):

2014-05-22  Brady Eidson  <beidson@apple.com>

        Don't scan for phone numbers in editable regions
        <rdar://problem/16949846> and https://bugs.webkit.org/show_bug.cgi?id=133192

        Reviewed by Enrica Casucci.

        No new tests (Currently untested WK2-only feature)

        * editing/Editor.cpp:
        (WebCore::Editor::scanRangeForTelephoneNumbers): Skip the range if the Node is editable.

2014-05-22  Jeremy Jones  <jeremyj@apple.com>

        Captions layout incorrectly in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=133175

        Reviewed by Eric Carlson.

        When doing layout for fullscreen, geometry should be absolute so it is not influenced
        by the rest of the page. This change adds style for CSSPropertyPosition, CSSPropertyLeft,
        and CSSPropertyTop.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        Refactor style changes into updateStyleForTextTrackRepresentation().
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        Refactor style changes into updateStyleForTextTrackRepresentation().
        (WebCore::MediaControlTextTrackContainerElement::clearTextTrackRepresentation):
        Refactor style changes into updateStyleForTextTrackRepresentation().
        (WebCore::MediaControlTextTrackContainerElement::updateStyleForTextTrackRepresentation):
        Consolidate style changes here. Include the two existing and three new style changes.
        * html/shadow/MediaControlElements.h:
        Declare updateStyleForTextTrackRepresentation().

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

        REGRESSION (r155977): Very stuttery 3D css animation on jtechcommunications.com
        https://bugs.webkit.org/show_bug.cgi?id=133179
        <rdar://problem/16864666>

        Reviewed by Dean Jackson.

        Revert code added in r155977 to try to pick a good contentsScale for layers
        based on a root-relative transform. This resulted in pages with too much 
        backing store, and too many cases where layers repainted during animations,
        causing stutter.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::flushCompositingState):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::updateAnimations):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerCA::updateContentsScale):
        (WebCore::clampedContentsScaleForScale): Deleted.
        (WebCore::maxScaleFromTransform): Deleted.
        (WebCore::GraphicsLayerCA::updateRootRelativeScale): Deleted.
        (WebCore::GraphicsLayerCA::getTransformFromAnimationsWithMaxScaleImpact): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:

2014-05-22  Martin Hock  <mhock@apple.com>

        [iOS] Enable -apple-system- styled elements to respond to system font size changes.
        https://bugs.webkit.org/show_bug.cgi?id=133186
        <rdar://problem/16583782>

        Reviewed by Enrica Casucci.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::_contentSizeCategory):
        (WebCore::RenderThemeIOS::contentSizeCategory):
        (WebCore::RenderThemeIOS::setContentSizeCategory):

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

        [MSE] Stored samples are not freed when SourceBuffer is removed from MediaSource
        https://bugs.webkit.org/show_bug.cgi?id=133174

        Reviewed by Eric Carlson.

        Clear out stored MediaSamples from SourceBuffer's TrackBuffer storage when
        aborting loading. Also, report the memory cost of those samples, so that the
        SourceBuffer will be GCd more readily.

        Add a mechanism for reporting the size of a MediaSample:
        * Modules/mediasource/SourceBuffer.h:
        * platform/MediaSample.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:

        Track the memory usage of a SampleMap when adding and removing samples, as well
        as allowing the SampleMap to be cleared wholesale:
        * Modules/mediasource/SampleMap.cpp:
        (WebCore::SampleMap::clear): Release all stored MediaSamples.
        (WebCore::SampleMap::addSample): Update m_totalSize.
        (WebCore::SampleMap::removeSample): Ditto.
        * Modules/mediasource/SampleMap.h:
        (WebCore::SampleMap::SampleMap): Initialize m_totalSize.
        (WebCore::SampleMap::sizeInBytes): Simple accessor.

        Clear the stored samples when loading is aborted, and report the extra memory
        cost
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer): Initialize m_reportedExtraMemoryCost.
        (WebCore::SourceBuffer::removedFromMediaSource): Clear all stored samples.
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Call reportExtraMemoryCost().
        (WebCore::SourceBuffer::reportExtraMemoryCost): Inform the vm of the new
            extra memory cost incurred by the object.

2014-05-22  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Keyboard should have Search button in duckduckgo.com.
        https://bugs.webkit.org/show_bug.cgi?id=133183
        <rdar://problem/17004207>

        Reviewed by Geoff Garen.

        Adding new export.

        * WebCore.exp.in:

2014-05-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r163712): [GTK] Misspelling and grammar underline marks are no longer drawn
        https://bugs.webkit.org/show_bug.cgi?id=133047

        Reviewed by Darin Adler.

        Change two conditions changed by mistake in r163712.

        * editing/TextCheckingHelper.cpp:
        (WebCore::findMisspellings): Enter the loop also when wordStart is 0.
        (WebCore::TextCheckingHelper::findFirstMisspelling): Skip the work
        when the text is a single character. Also reworked it to use a for
        loop to improve the readability.

2014-05-22  Piotr Grad  <p.grad@samsung.com>

        Video is resumed with old playback rate.
        https://bugs.webkit.org/show_bug.cgi?id=132905

        Reviewed by Philippe Normand.

        Setting '0' playback rate is causing pipeline to pause.
        GStreamer player impl. exposed this information to upper layers but it should not.
        Solution is to hidden such situation behind m_playbackRatePause flag.

        Test: media/video-paused-0-rate.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::play):
        (WebCore::MediaPlayerPrivateGStreamer::pause):
        (WebCore::MediaPlayerPrivateGStreamer::doSeek):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::paused):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2014-05-22  Antti Koivisto  <antti@apple.com>

        Text markers don't paint on simple lines
        https://bugs.webkit.org/show_bug.cgi?id=133177

        Reviewed by Anders Carlsson.
        
        Marker painting code does not yet support simple lines.

        Tests: fast/text/mark-matches-rendering-simple-lines.html
               fast/text/mark-matches-rendering.html

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        
            Force text blocks with markers to use line boxes.

        * testing/Internals.cpp:
        (WebCore::Internals::setMarkedTextMatchesAreHighlighted):
        
            Expose this so we can make reftests for marker rendering.

        * testing/Internals.h:
        * testing/Internals.idl:

2014-05-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Guard RenderObject::isRenderGrid() method
        https://bugs.webkit.org/show_bug.cgi?id=132380

        Reviewed by Benjamin Poulain.

        Guard RenderObject::isRenderGrid() method under ENABLE_CSS_GRID_LAYOUT compilation flag.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        * rendering/RenderObject.h:

2014-05-21  Antti Koivisto  <antti@apple.com>

        REGRESSION(r167870): Crash in simple line layout code with :after
        https://bugs.webkit.org/show_bug.cgi?id=133155
        <rdar://problem/16977696>

        Reviewed by Darin Adler.
        
        Fix https://bugs.webkit.org/show_bug.cgi?id=132241 in a safer way.
        The underline behavior is tested by the existing fast/text/simple-lines-hover-underline.html

        Test: fast/text/simple-lines-hover-after.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::invalidateLineLayoutPath): Deleted.

            Move to RenderBlockFlow.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::invalidateLineLayoutPath):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        
            Invalidate layout if style changes in a manner that makes us ineligible to use the simple line layout path.

        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):
        
            Drop the simple line layout on path invalidation if it exists. It may not be valid anymore.
            Also invalidate the layout if this happens so we'll reconstruct the lines later.

        (WebCore::RenderBlockFlow::simpleLineLayout): Deleted.
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        (WebCore::RenderBlockFlow::createLineBoxes): Deleted.
                
            Revert some of the changes made it r167870.

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::simpleLineLayout):
        
            Add strong validity assert.

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

        [iOS] two media control button strings are not localized
        https://bugs.webkit.org/show_bug.cgi?id=133160

        Reviewed by Geoffrey Garen.

        * English.lproj/mediaControlsLocalizedStrings.js:

2014-05-21  Dean Jackson  <dino@apple.com>

        [iOS] Update some of the media controls buttons to be bigger
        https://bugs.webkit.org/show_bug.cgi?id=133158
        <rdar://problem/16475828>

        Reviewed by Simon Fraser.

        The buttons in the media controls on iOS are too small
        to be comfortably pressed. Make them the size of the controls
        panel and the expected iOS button size (44x44px).

        The artwork for the buttons now includes the padding. I've
        added a file from which you can edit the artwork, then
        copy it into the CSS (because editing directly in CSS is
        a huge pain).

        So far just the play/pause and fullscreen button have been
        updated. There will be a follow-up patch to fix the remaining
        buttons and the scrubber.

        * Modules/mediacontrols/assets-apple-iOS.svg: Added.
        * 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:active):
        (audio::-webkit-media-controls-play-button.paused):
        (audio::-webkit-media-controls-fullscreen-button:active):
        (@media only screen and (-webkit-min-device-pixel-ratio: 2)): Deleted.

2014-05-21  Zalan Bujtas  <zalan@apple.com>

        Garbage when rubber-banding at the right edge of a page zoomed to non-integral scale.
        https://bugs.webkit.org/show_bug.cgi?id=133139
        <rdar://problem/16503353>

        Reviewed by Simon Fraser.

        Do not pixel align the root content layer. The alignment code expands the graphics's layer size
        which makes the right and bottom tiles bigger than the content.
        Painting the body's background color produces pixel cracks, because the content can not
        fill the expanded tiles completely.

        Not testable.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::needsPixelAligment):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::computePixelAlignment):
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::rectForTileIndex):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::needsPixelAligment):
        * rendering/RenderLayerBacking.h:

2014-05-21  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r168046): Invalid layout in WebCore::RenderBox::containingBlockLogicalWidthForPositioned
        https://bugs.webkit.org/show_bug.cgi?id=132933

        Reviewed by Darin Adler.

        Invalid layout is performed when calling containingBlockLogicalWidthForPositioned for a RenderTableSection object.

        Test: fast/multicol/newmulticol/table-section-crash.html

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

2014-05-21  Simon Pena  <simon.pena@samsung.com>

        [EFL] Ensure EGLOffScreenContext::initialize calls platformMakeCurrent on the surface
        https://bugs.webkit.org/show_bug.cgi?id=124832

        Reviewed by Antonio Gomes.

        The original code was only calling platformMakeCurrent when the
        GL_EXT_robustness extension is supported: the alternate code path
        would only create a context, but it wouldn't make that context
        current. This patch ensures platformMakeCurrent is also called for
        the alternate code path, and, if it fails to make the context
        current, will destroy the context. Effectively, this makes both
        code paths behave in the same way.

        * platform/graphics/surfaces/egl/EGLContext.cpp:
        (WebCore::EGLOffScreenContext::initialize):

2014-05-20  Brent Fulgham  <bfulgham@apple.com>

        [Mac] DataCues do not work properly when rewinding video
        https://bugs.webkit.org/show_bug.cgi?id=133138
        <rdar://problem/16979086>

        Reviewed by Eric Carlson.

        Make the TrackPrivateBase responsible for knowing if a type of track needs a non-zero
        startTimeVariance value.

        Also, correct a bug in the equality test for DataCue objects.

        * html/track/DataCue.cpp:
        (WebCore::DataCue::isEqual): Handle the JSValue data types consistently, so that we don't attempt
        to compare a JSNull against a default JSValue object.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::startTimeVariance): Added.
        * html/track/InbandTextTrack.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue): Use new startTimeVariance method location.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::startTimeVariance): Added.
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::hasEquivalentStartTime): Use new startTimeVariance location.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::startTimeVariance): Deleted.
        * html/track/TextTrackCueGeneric.h:
        * platform/graphics/TrackPrivateBase.h:
        (WebCore::TrackPrivateBase::startTimeVariance): Added.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

2014-05-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Watchdog timer should be lazily allocated
        https://bugs.webkit.org/show_bug.cgi?id=133135

        Reviewed by Geoffrey Garen.

        No new tests.

        We incur a noticeable amount of overhead on some benchmarks due to checking if the Watchdog ever fired. 
        There is no reason to do this checking if we never activated the Watchdog, which can only be done through 
        JSContextGroupSetExecutionTimeLimit or JSContextGroupClearExecutionTimeLimit. 

        By allocating the Watchdog lazily on the VM we can avoid all of the associated overhead when we don't use 
        these two API functions (which is true of most clients).

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::isExecutionTerminating):

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

        [Mac] Allow popup menus to override default appearance
        https://bugs.webkit.org/show_bug.cgi?id=133129

        Reviewed by Tim Horton.

        WebKitSystemInterface's WKPopupMenu has a flag to hide
        the arrows at the end of a popup-menu (e.g. <select>).
        Expose that via adding a hasDefaultAppearance flag to
        PopupMenuStyle, which then passes it on to WKSI.

        * platform/PopupMenuStyle.h:
        (WebCore::PopupMenuStyle::PopupMenuStyle): New flag in constructor.
        (WebCore::PopupMenuStyle::hasDefaultAppearance): New flag.
        * platform/mac/WebCoreSystemInterface.h: wkPopupMenu signature has changed to accept
        the new flag.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::itemStyle): Pass in true as default appearance when creating
        the PopupMenuStyle. We don't need it.
        (RenderMenuList::menuStyle): In this case we pass in the negated value of
        style().hasAppearance(), which indicates if we are overriding the built-in drawing.
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::menuStyle): Use true as the default value.

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

        [Mac] do not deactivate an audio session that has running I/O
        https://bugs.webkit.org/show_bug.cgi?id=133127

        Reviewed by Jer Noble.

        * page/Settings.h:
        (WebCore::Settings::setShouldManageAudioSessionCategory): Renamed from setShouldManageAudioSession.
        (WebCore::Settings::shouldManageAudioSessionCategory): Renamed from shouldManageAudioSession.
        (WebCore::Settings::setShouldManageAudioSession): Deleted.
        (WebCore::Settings::shouldManageAudioSession): Deleted.

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): Don't deactivate the session if there are any
            Video or Audio sessions.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus): Drive-by change to log errors 
            returned by -statusOfValueForKey:error: in debug builds.

2014-05-20  Beth Dakin  <bdakin@apple.com>

        REGRESSION: All non-mainframe scrollbars don't paint after r169065
        https://bugs.webkit.org/show_bug.cgi?id=133132
        -and corresponding-
        <rdar://problem/16968850>

        Reviewed by Geoff Garen.

        We should not universally return true here. This feature will only work for 
        scrollbars with layers.
        * platform/ScrollableArea.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):

2014-05-20  Daniel Bates  <dabates@apple.com>

        Element within flattened frame may update its scroll state during the layout phase of the wrong RenderView
        https://bugs.webkit.org/show_bug.cgi?id=133013
        <rdar://problem/16760154>

        Reviewed by David Hyatt.

        Fixes an issue where the scroll state of an element may be updated during the layout of the wrong
        RenderView. In particular, the scroll state of an element inside a CSS flex box in a flattened
        frame f is updated during the layout of the RenderView associated with the parent frame of f instead
        of during the layout of the RenderView associated with f.

        The layout machinery assumes that the scroll state of each scrollable element is updated before the
        completion of layout for its associated RenderView. Currently we have logic to defer updating the scroll
        state of a scrollable element until completion of recursive layout. For a page with a flattened frame, we
        defer such updates until completion of layout for all RenderViews along the ancestor frame hierarchy of
        each flattened frame regardless of the RenderView associated with the element that originated the
        deferred scroll state request. Instead, only the RenderView associated with the element that deferred its
        scroll state update should dispatch the scroll state update.

        Tests: fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-and-needs-full-repaint-crash.html
               fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-assertion-failure.html

        * rendering/RenderBlock.cpp: Removed WTF::-prefix in typedef definition for ContinuationOutlineTableMap.
        (WebCore::UpdateScrollInfoAfterLayoutTransaction::UpdateScrollInfoAfterLayoutTransaction): Added; a struct
        that represents a RenderView v, nested transaction count, and a list of RenderBlocks in v that will need
        to have their scroll state updated.
        (WebCore::updateScrollInfoAfterLayoutTransactionStack): Added; returns the global stack of transactions.
        (WebCore::RenderBlock::willBeDestroyed): Call removeFromUpdateScrollInfoAfterLayoutTransaction(), which
        was formerly named as removeFromDelayedUpdateScrollInfoSet.
        (WebCore::currentUpdateScrollInfoAfterLayoutTransaction): Added; returns the top-most transaction in the
        global stack.
        (WebCore::RenderBlock::beginUpdateScrollInfoAfterLayoutTransaction): Modified as appropriate to make use
        of the global stack of transactions; formerly named startDelayUpdateScrollInfo.
        (WebCore::RenderBlock::endAndCommitUpdateScrollInfoAfterLayoutTransaction): Modified as appropriate to
        make use of the global stack of transactions; formerly named finishDelayUpdateScrollInfo.
        (WebCore::RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction): Modified as appropriate to make
        use of the global stack of transactions; formerly named removeFromDelayedUpdateScrollInfoSet.
        (WebCore::RenderBlock::updateScrollInfoAfterLayout): Modified as appropriate to make use of the global
        stack of transactions.
        (WebCore::RenderBlock::layout): Ditto.
        (WebCore::RenderBlock::startDelayUpdateScrollInfo): Deleted.
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo): Deleted.
        (WebCore::RenderBlock::removeFromDelayedUpdateScrollInfoSet): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed): Call removeFromUpdateScrollInfoAfterLayoutTransaction(), which
        was formerly named removeFromDelayedUpdateScrollInfoSet.
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox): Call {begin, end}UpdateScrollInfoAfterLayoutTransaction(),
        which was formerly named {start, end}DelayUpdateScrollInfo.
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.

2014-05-20  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r169065): Mountain Lion run-api-tests failures: ASSERTION FAILED: 
        Uncaught exception - -[NSRegularLegacyScrollerImp setPresentationValue:]: 
        unrecognized selector sent to instance 0x7ff51aa38000
        https://bugs.webkit.org/show_bug.cgi?id=133121

        Reviewed by Tim Horton.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar):

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

        REGRESSION (r169063) Fixed and sticky nodes misplaced on scrolling sometimes
        https://bugs.webkit.org/show_bug.cgi?id=133106
        <rdar://problem/16967648>

        Reviewed by Sam Weinig.

        Fix regression from r169063. That commit removed scrolledContentsLayers from 
        frame scrolling nodes, but they do actually use them.
        
        So put them back; not in the base class, because they have a somewhat different
        meaning for overflow scrolling and frame scrolling.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateFrameScrollingNode):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setScrolledContentsLayer):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2014-05-20  Radu Stavila  <stavila@adobe.com>

        REGRESSION: [CSS Regions] Content flowed directly into the flow thread that ends up in the second region is not properly repainted
        https://bugs.webkit.org/show_bug.cgi?id=133111

        Reviewed by David Hyatt.

        When computing the repaint rect of an element flowed into a flow thread, if the element is flowed directly into
        the flow thread (meaning its containing block is the flow thread itself), the region's position within the flow
        must no longer be taken into consideration, because its already included in the element's |topLeft|.

        Test: fast/regions/hover-element-flowed-second-region.html

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

2014-05-20  Alex Christensen  <achristensen@webkit.org>

        Fix web timing assertion failure.
        https://bugs.webkit.org/show_bug.cgi?id=133094
        <rdar://problem/16966032>

        Reviewed by Alexey Proskuryakov.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getConnectionTimingData):
        Set requestStart and responseStart to 0 instead of -1 to match the 
        ResourceLoadTiming constructor and prevent the assertion failure in
        PerformanceTiming::responseStart.

2014-05-20  Prashant Hiremath  <hiremathprashants@gmail.com>

        Only set title on SVG documents
        https://bugs.webkit.org/show_bug.cgi?id=133068

        Reviewed by Dirk Schulze.

        Test: svg/custom/html_document_set_title.html

        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto):
        (WebCore::SVGTitleElement::removedFrom):
        (WebCore::SVGTitleElement::childrenChanged):

2014-05-20  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Invalid content in cache file, causes broken rendering.
        https://bugs.webkit.org/show_bug.cgi?id=133069

        Reviewed by Brent Fulgham.

        When data for a url is received as multiple parts, the cache file for the url is truncated when opened for writing,
        and will only contain the last part of data received.
        This is fixed by only opening the file once, and close it after all data has been received.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::CurlCacheEntry): Initialize cache file handle member.
        (WebCore::CurlCacheEntry::~CurlCacheEntry): Close cache file.
        (WebCore::CurlCacheEntry::saveCachedData): Only open cache file once to avoid truncating.
        (WebCore::CurlCacheEntry::didFail): Close cache file.
        (WebCore::CurlCacheEntry::didFinishLoading): Ditto.
        (WebCore::CurlCacheEntry::openContentFile): Added method to open cache file.
        (WebCore::CurlCacheEntry::closeContentFile): Added method to close cache file.
        * platform/network/curl/CurlCacheEntry.h: Added file handle member, and methods to open and close cache file.

2014-05-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Block incorrectly sized when containing an unsplittable box
        https://bugs.webkit.org/show_bug.cgi?id=132601

        Reviewed by Antti Koivisto.

        When laying out elements in a region, when an inline element is encountered
        the size of its parent must not be increased beyond the bottom of the current region,
        unless if its the last region. This will ensure that the next sibling of the
        inline element is correctly laid out at the top of the next region, instead
        of leaving an empty space equal to the height of the overflow, as it did until now.

        Tests: fast/regions/inline-block-inside-anonymous-overflow.html
               fast/regions/inline-block-overflow.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::hasNextPage):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):

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

        [CSS Regions] Crash while painting block selection gaps in regions
        https://bugs.webkit.org/show_bug.cgi?id=132720

        Reviewed by David Hyatt.

        The fix for WebKit bug https://bugs.webkit.org/show_bug.cgi?id=131511
        allowed selection highlight to match the DOM selection when the start
        and end point of the selection were in different flow threads. In order
        to enable that, the selection was performed separately on view and
        render flow threads, considered selection subtrees.

        However, the start and end points for each selection subtree were computed
        by means of Range class but it is not always possible to construct a valid
        Range from two pairs of RenderObjects and offsets.

        This patch keeps the substrees approach but instead of storing the endpoints
        for each subtree in a Range and continuously extending the Range, it stores them
        using the already available SelectionSubtreeRoot class. After the end points are
        computed for each subtree and before processing the subtree selection, the end points
        are adjusted in a similar fashion as the one used in FrameSelection::updateAppearance(),
        to make sure we are passing the same expected information to the method implementing
        the visible selection processing.

        Test: fast/regions/selection-gaps-paint-crash.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::adjustForVisibleSelection):
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::selectionClear):

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

        Scrolling pages with large TiledBacking content layers creates way too many tiles
        https://bugs.webkit.org/show_bug.cgi?id=133101

        Reviewed by Tim Horton.

        Fix the GraphicsLayerCA::adjustTiledLayerVisibleRect() logic to avoid making giant rects if the old
        and new visible rects don't overlap.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::adjustTiledLayerVisibleRect):
        * platform/graphics/ca/mac/TileController.h:

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

        Correctly maintain the "isInWindow" state for all TiledBackings
        https://bugs.webkit.org/show_bug.cgi?id=133095

        Reviewed by Tim Horton.
        
        We never updated the "isInWindow" state for TiledBacking that wasn't the RenderView's
        backing. Fix it by having RenderLayerCompositor::setIsInWindow() recurse through all
        layers (if necessary), updating their state. Also set the state on newly created
        TiledBackings.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTiledBackingUsageChanged):
        (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::pageTiledBacking): Deleted.
        * rendering/RenderLayerCompositor.h:

2014-05-19  Dean Jackson  <dino@apple.com>

        [iOS] Use status display for live streams
        https://bugs.webkit.org/show_bug.cgi?id=133097

        Reviewed by Sam Weinig.

        Follow-on from https://bugs.webkit.org/show_bug.cgi?id=131390
        Allow the iOS controls to use the status display field.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.configureInlineControls): Live streams should
        not have a timeline or rewind button.

2014-05-19  Myles C. Maxfield  <litherum@gmail.com>

        Text decorations do not contribute to visual overflow
        https://bugs.webkit.org/show_bug.cgi?id=132773

        Reviewed by Antti Koivisto.

        This patch creates a function, visualOverflowForDecorations, which computes
        how much visual overflow to add around a text box due to text decorations. Most of the time,
        text decorations are fully contained within the text box, so the result is usually 0.

        This function exists within style/InlineTextBoxStyle.cpp, which is an added file. This is
        so that it can be called from setLogicalWidthForTextRun() inside RenderBlockLineLayout.cpp
        and from RenderStyle::changeAffectsVisualOverflow(). The former case passes in the full
        InlineTextBox and the latter case just passes in a RenderStyle (because the InlineTextBox
        is unavailable.)

        This patch also modifies RenderTableSection::spannedColumns() to fix an off-by-one error
        that was causing table borders to not be drawn when they existed right on the edge of
        a repaint rect.

        Tests: fast/css3-text/css3-text-decoration/repaint/underline-outside-of-layout-rect.html
        Tests: fast/repaint/border-collapse-table-off-by-one-expected.html

        * WebCore.vcxproj/WebCore.vcxproj: Adding reference to new InlineTextBoxStyle.cpp file
        * WebCore.vcxproj/WebCore.vcxproj.filters: Adding reference to new InlineTextBoxStyle files
        * WebCore.xcodeproj/project.pbxproj: Adding reference to new InlineTextBoxStyle files
        * rendering/InlineTextBox.cpp:
        (WebCore::computeUnderlineOffset): Moved to InlineTextBox.cpp
        (WebCore::getWavyStrokeParameters): Moved to InlineTextBox.cpp
        (WebCore::InlineTextBox::paintDecoration): Update to use newly refactored functions
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Call visualOverflowForDecorations()
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTableSelection.cpp: Fix off-by-one error when the boundary of a repaint
        rect lies exactly on top of a table column position
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeAffectsVisualOverflow): Inspects shadows and text decorations
        (WebCore::RenderStyle::changeRequiresLayout): Calls changeAffectsVisualOverflow()
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline): Moved code from here
        to changeAffectsVisualOverflow().
        * rendering/style/RenderStyle.h: Function signature
        * style/InlineTextBoxStyle.cpp: Added.
        (WebCore::computeUnderlineOffset): Moved from InlineTextBox.cpp
        (WebCore::getWavyStrokeParameters): Moved from InlineTextBox.cpp
        (WebCore::extendIntToFloat): Convenience function for dealing with the fact that
        underline bounding boxes use floats and GlyphOverflow uses ints
        (WebCore::visualOverflowForDecorations): Given
        vertical overflow bounds, possibly extend those to include location of
        decorations.
        * style/InlineTextBoxStyle.h: Added. Function signatures.
        (WebCore::textDecorationStrokeThickness): Refactored from InlineTextBox.cpp
        (WebCore::wavyOffsetFromDecoration): Refactored from InlineTextBox.cpp
        * platform/graphics/Font.h:
        (WebCore::GlyphOverflow::isEmpty): Convenience function
        (WebCore::GlyphOverflow::extendTo): Convenience function

2014-05-19  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r169082

        * platform/network/ResourceHandle.h:
        Added NSDictionary declaration.

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

        REGRESSION: Standalone images need to take topContentInset into account
        https://bugs.webkit.org/show_bug.cgi?id=133092
        -and corresponding-
        <rdar://problem/16945791>

        Reviewed by Darin Adler.

        The FrameView’s size is accurate in terms of the NSWindow size, but that is not 
        really what the ImageDocument code is looking for here. The ImageDocument wants to 
        know the size of the unobscured viewport area. We should use visibleSize() for 
        that.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::scale):
        (WebCore::ImageDocument::imageFitsInWindow):
        (WebCore::ImageDocument::imageClicked):

2014-05-19  Alex Christensen  <achristensen@webkit.org>

        Collect web timing data on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=133075

        Reviewed by Sam Weinig.

        * platform/network/ResourceHandle.h:
        Added setCollectsTimingData wrapper and getConnectionTimingData declarations.
        getConnectionTimingData with a dictionary parameter is a private helper function.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        Call setCollectsTimingData wrapper when creating a connection to ensure that timing data is collected.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveResponseCallback):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        Pass the CFURLConnectionRef to didReceiveResponse to get timing data from.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getConnectionTimingData):
        Moved from getTimingData to compile regardless of using CFNetwork and added wrapper with CFDictionaryRef.
        (WebCore::ResourceHandle::setCollectsTimingData):
        Added wrapper to call objc function from c++.
        (WebCore::ResourceHandle::getTimingData):
        Renamed to getConnectionTimingData.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        Updated function name from getTimingData to getConnectionTimingData.

2014-05-19  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver sees the WebArea out of order when topContentInset is used
        https://bugs.webkit.org/show_bug.cgi?id=133091

        Reviewed by Simon Fraser.

        Modify the scroll view's frame so that it recognizes the content inset.
        This is needed so that when VoiceOver sorts elements to create an ordering,
        the web area is not ordered at the top of the screen.

        Test: platform/mac-wk2/accessibility/content-inset-scrollview-frame.html

        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::elementRect):

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

        Scrollbars display incorrectly after switching between fast and slow scrolling 
        mode, affects Find and real sites
        https://bugs.webkit.org/show_bug.cgi?id=133077
        -and corresponding-
        <rdar://problem/16888608>

        Reviewed by Tim Horton.

        We should always return true here when updating on the secondary thread is 
        supported. It does not need to be gated on whether we are actively taking 
        advantage of that support at this moment.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):

        Always update the presentationValue whenever we update the doubleValue just to 
        keep them in sync.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar):

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

        Split scrolling tree ScrollingNodes into FrameScrollingNodes and OverflowScrollingNodes
        https://bugs.webkit.org/show_bug.cgi?id=133022

        Reviewed by Sam Weinig.

        In both the scrolling state tree and the scrolling tree, split the "scrolling nodes"
        into FrameScrolling and OverflowScrolling nodes.
        
        Move what was the "viewportSize" property onto the base class for the scrolling
        nodes, calling it "scrollableAreaSize".
        
        Make minimum/maximumScrollPosition() virtual so we can share more code (and there
        is more code sharing to be done in future).

        * Configurations/WebCore.xcconfig: Remove ScrollingStateScrollingNodeMac.mm and ScrollingTreeScrollingNodeMac.mm
        from the list, using #ifdefs in the file instead.
        * WebCore.exp.in: Lots of exports.
        * WebCore.xcodeproj/project.pbxproj: New files.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode): Deleted.
        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode): Deleted.
        This tiny function didn't need to exist.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::ScrollingCoordinator::updateOverflowScrollingNode):
        (WebCore::ScrollingCoordinator::updateScrollingNode): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp: Copied from Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp.
        (WebCore::ScrollingStateFrameScrollingNode::create):
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::~ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::clone):
        (WebCore::ScrollingStateFrameScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateFrameScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateFrameScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateFrameScrollingNode::setScrollBehaviorForFixedElements):
        (WebCore::ScrollingStateFrameScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateFrameScrollingNode::setFooterHeight):
        (WebCore::ScrollingStateFrameScrollingNode::setTopContentInset):
        (WebCore::ScrollingStateFrameScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateFrameScrollingNode::setInsetClipLayer):
        (WebCore::ScrollingStateFrameScrollingNode::setContentShadowLayer):
        (WebCore::ScrollingStateFrameScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateFrameScrollingNode::setFooterLayer):
        (WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateFrameScrollingNode.h: Copied from Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::layerID):
        (WebCore::ScrollingStateNode::isFrameScrollingNode):
        (WebCore::ScrollingStateNode::isOverflowScrollingNode):
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp: Added.
        (WebCore::ScrollingStateOverflowScrollingNode::create):
        (WebCore::ScrollingStateOverflowScrollingNode::ScrollingStateOverflowScrollingNode):
        (WebCore::ScrollingStateOverflowScrollingNode::~ScrollingStateOverflowScrollingNode):
        (WebCore::ScrollingStateOverflowScrollingNode::clone):
        (WebCore::ScrollingStateOverflowScrollingNode::setScrolledContentsLayer):
        (WebCore::ScrollingStateOverflowScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateOverflowScrollingNode.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm.
        (WebCore::ScrollingStateOverflowScrollingNode::scrolledContentsLayer):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaSize):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        (WebCore::ScrollingStateScrollingNode::create): Deleted.
        (WebCore::ScrollingStateScrollingNode::clone): Deleted.
        (WebCore::ScrollingStateScrollingNode::setViewportSize): Deleted.
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor): Deleted.
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion): Deleted.
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount): Deleted.
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons): Deleted.
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements): Deleted.
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight): Deleted.
        (WebCore::ScrollingStateScrollingNode::setFooterHeight): Deleted.
        (WebCore::ScrollingStateScrollingNode::setTopContentInset): Deleted.
        (WebCore::ScrollingStateScrollingNode::setScrolledContentsLayer): Deleted.
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer): Deleted.
        (WebCore::ScrollingStateScrollingNode::setInsetClipLayer): Deleted.
        (WebCore::ScrollingStateScrollingNode::setContentShadowLayer): Deleted.
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer): Deleted.
        (WebCore::ScrollingStateScrollingNode::setFooterLayer): Deleted.
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars): Deleted.
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::scrollableAreaSize):
        (WebCore::ScrollingStateScrollingNode::totalContentsSize):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::commit):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::rootStateNode):
        (WebCore::ScrollingStateTree::setRootStateNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp: Added.
        (WebCore::ScrollingTreeFrameScrollingNode::ScrollingTreeFrameScrollingNode):
        (WebCore::ScrollingTreeFrameScrollingNode::~ScrollingTreeFrameScrollingNode):
        (WebCore::ScrollingTreeFrameScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h: Copied from Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h.
        (WebCore::ScrollingTreeFrameScrollingNode::updateLayersAfterDelegatedScroll):
        (WebCore::ScrollingTreeFrameScrollingNode::synchronousScrollingReasons):
        (WebCore::ScrollingTreeFrameScrollingNode::shouldUpdateScrollLayerPositionSynchronously):
        (WebCore::ScrollingTreeFrameScrollingNode::frameScaleFactor):
        (WebCore::ScrollingTreeFrameScrollingNode::headerHeight):
        (WebCore::ScrollingTreeFrameScrollingNode::footerHeight):
        (WebCore::ScrollingTreeFrameScrollingNode::topContentInset):
        (WebCore::ScrollingTreeFrameScrollingNode::scrollBehaviorForFixedElements):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::isFrameScrollingNode):
        (WebCore::ScrollingTreeNode::isOverflowScrollingNode):
        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp: Copied from Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h.
        (WebCore::ScrollingTreeOverflowScrollingNode::ScrollingTreeOverflowScrollingNode):
        (WebCore::ScrollingTreeOverflowScrollingNode::~ScrollingTreeOverflowScrollingNode):
        * page/scrolling/ScrollingTreeOverflowScrollingNode.h: Copied from Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNode::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNode::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNode::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNode::maximumScrollPosition):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollableAreaSize):
        (WebCore::ScrollingTreeScrollingNode::totalContentsSize):
        (WebCore::ScrollingTreeScrollingNode::totalContentsSizeForRubberBand):
        (WebCore::ScrollingTreeScrollingNode::setTotalContentsSizeForRubberBand):
        (WebCore::ScrollingTreeScrollingNode::synchronousScrollingReasons): Deleted.
        (WebCore::ScrollingTreeScrollingNode::shouldUpdateScrollLayerPositionSynchronously): Deleted.
        (WebCore::ScrollingTreeScrollingNode::viewportSize): Deleted.
        (WebCore::ScrollingTreeScrollingNode::frameScaleFactor): Deleted.
        (WebCore::ScrollingTreeScrollingNode::headerHeight): Deleted.
        (WebCore::ScrollingTreeScrollingNode::footerHeight): Deleted.
        (WebCore::ScrollingTreeScrollingNode::scrollBehaviorForFixedElements): Deleted.
        (WebCore::ScrollingTreeScrollingNode::topContentInset): Deleted.
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h: Renamed from Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h.
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollLayer):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: Renamed from Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm.
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::create):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::ScrollingTreeFrameScrollingNodeIOS):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::~ScrollingTreeFrameScrollingNodeIOS):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterViewportChange):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterDelegatedScroll):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::minimumScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::maximumScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollBy):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollByWithoutContentEdgeConstraints):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm.
        (WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::create):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsHorizontalStretching):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsVerticalStretching):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stretchAmount):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::pinnedInDirection):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollHorizontally):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollVertically):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::shouldRubberBandInDirection):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::absoluteScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollBy):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startSnapRubberbandTimer):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopSnapRubberbandTimer):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateLayersAfterViewportChange):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::minimumScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::maximumScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollBy):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateMainFramePinState):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::logExposedUnfilledArea):
        (WebCore::logThreadedScrollingMode):
        (WebCore::logWheelEventHandlerCountChanged):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

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

        Images missing sometimes with composited clipping layers
        https://bugs.webkit.org/show_bug.cgi?id=133065
        <rdar://problem/15224559>

        Reviewed by Beth Dakin.
        
        When support for solid colors on layers was added, a layer was considered a candidate
        for the solid color optimization without regard to whether it had descendent layers
        with "paintsIntoCompositedAncestor" requirements.
        
        Fix hasVisibleNonCompositingDescendantLayers(), renaming it to isPaintDestinationForDescendentLayers()
        and having it take into account whether descendent layers need to paint into an
        ancestor.
        
        Also, this test has to happen after those descendent layers have had their
        compositing state updated, so move the isSimpleContainerCompositingLayer() to
        a new updateAfterDescendents() function which is called from the various
        places we do compositing-udpate-tree-walks.

        Test: compositing/backing/solid-color-with-paints-into-ancestor.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateAfterDescendents):
        (WebCore::RenderLayerBacking::paintsChildren):
        (WebCore::compositedWithOwnBackingStore):
        (WebCore::descendentLayerPaintsIntoAncestor):
        (WebCore::RenderLayerBacking::isPaintDestinationForDescendentLayers):
        (WebCore::hasVisibleNonCompositingDescendant): Deleted.
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):

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

        REGRESSION (r133351, sub-pixel layout): Right-to-left block with text-overflow: ellipsis truncates prematurely (breaks facebook.com Hebrew UI)
        https://bugs.webkit.org/show_bug.cgi?id=112227

        Reviewed by Maciej Stachowiak.

        This patch removes unnecessary integral snapping of inlines at layout time.

        The general rule of thumb of using round/floor/ceil at layout time is to not use them.
 
        When some computed values (x, y, width, height) get snapped during layout, while others don't,
        intersecting/measuring mismatches could occur and they could end up producing visual artifacts such as truncations.
        This patch also enables iframe content to be positioned on odd device pixel positions on retina displays.
        
        Tests: fast/frames/hidpi-position-iframe-on-device-pixel.html
               fast/inline/hidpi-rtl-text-does-not-fit-line-and-gets-cut-off.html

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::pixelSnappedLogicalLeftOffsetForLine): Deleted.
        (WebCore::RenderBlock::pixelSnappedLogicalRightOffsetForLine): Deleted.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalInlinePositions):
        (WebCore::RenderBlockFlow::deleteEllipsisLineBoxes):
        (WebCore::RenderBlockFlow::checkLinesForTextOverflow):

2014-05-18  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: using AXAttributeCacheEnabler is too slow for every accessibilityElementAtIndex:
        https://bugs.webkit.org/show_bug.cgi?id=133043

        Reviewed by Mario Sanchez Prada.

        iOS Accessibility code tries to improve performance by caching attributes when accessing
        elements through the platform API. However, those API calls can be used very frequently when 
        iterating elements. Creating the AXAttributeCacheEnabler object and tearing it down is proving
        to be the hottest code path in samples for accessibility access.

        We need to move the logic for enabling/disabling the attribute cache to a level that can make
        a more informed decision about when to enable/disable.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper enableAttributeCaching]):
        (-[WebAccessibilityObjectWrapper disableAttributeCaching]):
        (-[WebAccessibilityObjectWrapper accessibilityElementCount]):
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):

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

        Use RenderStyle& in more places in RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=133061

        Reviewed by Andreas Kling.

        Convert several member functions to use references to RenderStyle rather
        than pointers. Move canCreateTiledImage() higher in the file (no code
        changes). Other minor cleanup.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateOpacity):
        (WebCore::RenderLayerBacking::updateTransform):
        (WebCore::RenderLayerBacking::updateFilters):
        (WebCore::RenderLayerBacking::updateBlendMode):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::hasBoxDecorations):
        (WebCore::canCreateTiledImage):
        (WebCore::hasBoxDecorationsOrBackgroundImage):
        (WebCore::hasPerspectiveOrPreserves3D):
        (WebCore::supportsDirectBoxDecorationsComposition):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerBacking.h:

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

        Rename some RenderLayerBacking member functions
        https://bugs.webkit.org/show_bug.cgi?id=133030

        Reviewed by Sam Weinig.

        Remove "GraphicsLayer" from some member function names on RenderLayerBacking.
        
        No behavior change.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createAVCFVideoLayer):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Deleted.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::attachRootLayer):

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

        Fix assertion failure with simple line layout debug borders enabled.

        Rubber-stamped by Andreas Kling.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders): We shoudn't try to paint empty rects.

2014-05-18  Andreas Kling  <akling@apple.com>

        Reduce constructor copypasta in RenderText and RenderElement.
        <https://webkit.org/b/133056>

        Use delegating constructors to remove duplicated initializer lists
        from the constructors of RenderText and RenderElement.

        Reviewed by Anders Carlsson.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        * rendering/RenderText.h:

2014-05-18  Brent Fulgham  <bfulgham@apple.com>

        Crash during scroll when latched
        https://bugs.webkit.org/show_bug.cgi?id=133064

        Reviewed by Simon Fraser.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents): Prevent dereference of NULL
        wheelEventTarget argument.

2014-05-18  Svetlana Redchenko  <redchenko@yandex-team.ru>

        Input ::selection pseudo class does not work leading to hidden selection
        https://bugs.webkit.org/show_bug.cgi?id=38943

        Reviewed by Darin Adler.

        Test: fast/selectors/input-with-selection-pseudo-element.html

        When text is selected inside input element, it should change the
        color and background color according to the ::selection pseudo element.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionColor):
        (WebCore::RenderObject::selectionPseudoStyle):
        * rendering/RenderObject.h:

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

        [WebKit2] Implement ScriptMessageHandlers
        https://bugs.webkit.org/show_bug.cgi?id=133053

        Reviewed by Anders Carlsson.

        * DerivedSources.make:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        * bindings/js/JSUserMessageHandlersNamespaceCustom.cpp: Added.
        (WebCore::JSUserMessageHandlersNamespace::getOwnPropertySlotDelegate):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::shouldHaveWebKitNamespaceForWorld):
        (WebCore::DOMWindow::webkitNamespace):
        * page/DOMWindow.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserMessageHandlerDescriptor):
        (WebCore::UserContentController::removeUserMessageHandlerDescriptor):
        * page/UserContentController.h:
        (WebCore::UserContentController::userMessageHandlerDescriptors):
        * page/UserMessageHandler.cpp: Added.
        (WebCore::UserMessageHandler::UserMessageHandler):
        (WebCore::UserMessageHandler::~UserMessageHandler):
        (WebCore::UserMessageHandler::postMessage):
        (WebCore::UserMessageHandler::name):
        (WebCore::UserMessageHandler::world):
        * page/UserMessageHandler.h: Added.
        (WebCore::UserMessageHandler::create):
        * page/UserMessageHandler.idl: Added.
        * page/UserMessageHandlerDescriptor.cpp: Added.
        (WebCore::UserMessageHandlerDescriptor::UserMessageHandlerDescriptor):
        (WebCore::UserMessageHandlerDescriptor::~UserMessageHandlerDescriptor):
        (WebCore::UserMessageHandlerDescriptor::name):
        (WebCore::UserMessageHandlerDescriptor::world):
        * page/UserMessageHandlerDescriptor.h: Added.
        (WebCore::UserMessageHandlerDescriptor::Client::~Client):
        (WebCore::UserMessageHandlerDescriptor::create):
        (WebCore::UserMessageHandlerDescriptor::client):
        * page/UserMessageHandlerDescriptorTypes.h: Added.
        * page/UserMessageHandlersNamespace.cpp: Added.
        (WebCore::UserMessageHandlersNamespace::UserMessageHandlersNamespace):
        (WebCore::UserMessageHandlersNamespace::~UserMessageHandlersNamespace):
        (WebCore::UserMessageHandlersNamespace::handler):
        * page/UserMessageHandlersNamespace.h: Added.
        (WebCore::UserMessageHandlersNamespace::create):
        * page/UserMessageHandlersNamespace.idl: Added.
        * page/WebKitNamespace.cpp: Added.
        (WebCore::WebKitNamespace::WebKitNamespace):
        (WebCore::WebKitNamespace::~WebKitNamespace):
        (WebCore::WebKitNamespace::messageHandlers):
        * page/WebKitNamespace.h: Added.
        (WebCore::WebKitNamespace::create):
        * page/WebKitNamespace.idl: Added.

2014-05-18  Maciej Stachowiak  <mjs@apple.com>

        REGRESSION (r156546): Default media controls are laid out incorrectly when media element is styled with direction:rtl
        https://bugs.webkit.org/show_bug.cgi?id=132531
        <rdar://problem/16806267>
        
        Reviewed by Mark Rowe.

        This was already tested by the media/video-rtl.htm reftest, now unskipped.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel): Add missing direction: ltr

2014-05-18  Rik Cabanier  <cabanier@adobe.com>

        support for navigator.hardwareConcurrency
        https://bugs.webkit.org/show_bug.cgi?id=132588

        Reviewed by Filip Pizlo.

        Added a new API that returns the number of CPU cores up to 8.

        Test: fast/dom/navigator-hardwareConcurrency.html

        * Configurations/FeatureDefines.xcconfig:
        * page/Navigator.cpp:
        (WebCore::Navigator::hardwareConcurrency):
        * page/Navigator.h:
        * page/Navigator.idl:

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

        Fix iOS build.

        * WebCore.exp.in:
        Move UserContentController symbols to the right place.

2014-05-18  Jon Lee  <jonlee@apple.com>

        Build fix for r169006.

        Unreviewed.

        * loader/ResourceLoader.h: Return didCreateQuickLookHandle() to public.

2014-05-18  Antti Koivisto  <antti@apple.com>

        REGRESSION (r160259): text-combine glyphs are not rendered
        https://bugs.webkit.org/show_bug.cgi?id=127324

        Reviewed by Andreas Kling.
        
        The original text gets overwritten by a change that is supposed to affect rendered text only.
        Fixed by giving the text update functions well-defined purposes.

        Test: fast/text/text-combine-rendering.html

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):
        (WebCore::RenderCombineText::setRenderedText):
        (WebCore::RenderCombineText::combineText):
        (WebCore::RenderCombineText::setTextInternal): Deleted.
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::computePreferredLogicalWidths):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setRenderedText):
        
            This function now updates the rendered text but does not change the original.
            Get the original text by calling originalText().

        (WebCore::RenderText::setText):
        
            This the only place original text now changes.

        (WebCore::RenderText::setTextInternal): Deleted.
        
            Renamed to setRenderedText.

        * rendering/RenderText.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::setRenderedText):
        (WebCore::RenderSVGInlineText::setTextInternal): Deleted.
        * rendering/svg/RenderSVGInlineText.h:

2014-05-17  Maciej Stachowiak  <mjs@apple.com>

        Don't attempt to update id or name for nodes that are already removed
        https://bugs.webkit.org/show_bug.cgi?id=133041

        Reviewed by Sam Weinig.

        Tests: fast/dom/remove-element-with-id-that-was-inserted-on-DOMNodeRemoved.html
               fast/dom/remove-element-with-name-that-was-inserted-on-DOMNodeRemoved.html

        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Skip updating ids and names for an element not
        in a treescope, as we already do for elements not in a document.

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

        REGRESSION (NetworkProcess): Trying to use appcache fallback crashes in ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache
        https://bugs.webkit.org/show_bug.cgi?id=133007
        <rdar://problem/13702706>

        appcache tests often fail on the Mac WebKit2 bot
        https://bugs.webkit.org/show_bug.cgi?id=82061

        Reviewed by Maciej Stachowiak.

        Covered by existing tests, which this patch enables.

        * WebCore.exp.in: Export ResourceLoader::cancel(const ResourceError&). It used
        to be virtual, but marking subclasses final has resulted in the compiler calling
        it directly from WebKitLegacy framework. Seeing that no subclass overrides it,
        I then made it non-virtual.
        Also export ApplicationCacheHost functions that are now used from WebKit2.

        * loader/ResourceLoader.h: Made the class abstract (as I didn't realize at first
        that it's always either a SubresourceLoader or a NetscapePlugInStreamLoader).
        Made ResourceHandleClient functions private, as they should never be called other
        than via a ResourceHandleClient pointer.

        * loader/NetscapePlugInStreamLoader.h:
        * loader/SubresourceLoader.h:
        Marked these final.

        * loader/ResourceLoader.cpp: (WebCore::ResourceLoader::willSwitchToSubstituteResource):
        Added a function to be called when switching to a substitute resource. We still
        need a ResourceLoader at this point, as substitute resource will be delivered through
        it, but we don't want it to continue its current load.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache):
        Call the ResourceLoader function instead of using handle, which is null when
        using out of process networking.

2014-05-17  Andreas Kling  <akling@apple.com>

        We shouldn't make a ScrollingThread on iOS.
        <https://webkit.org/b/133038>
        <rdar://problem/16947589>

        Don't call ScrollingThred::dispatch() from the pressure relief
        code on iOS since that will end up instantiating a scrolling thread
        which we'd otherwise never have.

        Reviewed by Sam Weinig.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):

2014-05-17  Piotr Grad  <p.grad@samsung.com>

        Setting playback rate on video with media controller is not ignored.
        https://bugs.webkit.org/show_bug.cgi?id=129048

        Reviewed by Jer Noble.

        Replaced queries for m_playbackRate with effectivePlaybackRate()
        which includes media controller playback rate.

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

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

2014-05-16  Anders Carlsson  <andersca@apple.com>

        Expose WKUserScript as API
        https://bugs.webkit.org/show_bug.cgi?id=133017
        <rdar://problem/16948059>

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        Export symbols.

        * WebCore.xcodeproj/project.pbxproj:
        Change UserContentController.h to be a private header.

        * page/Page.cpp:
        (WebCore::Page::Page):
        Set m_userContentController from the page configuration and add it if it's not null.

        * page/Page.h:
        Add UserContentController to PageClients.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addPage):
        Only try to add a user content controller if the page doesn't already have one.

        (WebCore::PageGroup::removePage):
        Only try to remove the user content controller if it's the group one.

2014-05-17  Andreas Kling  <akling@apple.com>

        REGRESSION (r166422): All RenderBox objects grew 104 bytes from adding repaint timers.
        <https://webkit.org/b/133027>
        <rdar://problem/16867410>

        Instead of storing a rarely-used repaint timer on every RenderBox, store one
        on the RenderView, and keep a hash set of renderers needing repaint.

        Renderers get a flag tracking whether they have a pending lazy repaint.
        This way we can avoid hash lookups in the common case.

        Also added a static assertion to catch RenderBox growing in the future.

        Reviewed by Antti Koivisto.

        * rendering/RenderBox.cpp:
        (WebCore::SameSizeAsRenderBox::~SameSizeAsRenderBox):
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::~RenderBox):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBox.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setRenderBoxNeedsLazyRepaint):
        (WebCore::RenderElement::renderBoxNeedsLazyRepaint):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::scheduleLazyRepaint):
        (WebCore::RenderView::unscheduleLazyRepaint):
        (WebCore::RenderView::lazyRepaintTimerFired):
        * rendering/RenderView.h:

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

        [Mac][MSE] setCurrentTime() goes down fastSeek path in MediaPlayerPrivateMediaSourceAVFObjC.
        https://bugs.webkit.org/show_bug.cgi?id=133023

        Reviewed by Eric Carlson.

        When seeking a MSE video, do not go down the fastSeekForMediaTime() path if the
        seek resulted from a setCurrentTime() call. The logic can lead to attempted seeks
        before buffered ranges.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::seekToTime):

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

        [iOS] ScrollView::visibleContentRectInternal is bypassing the iOS code for unobscuredContentRect
        https://bugs.webkit.org/show_bug.cgi?id=133008

        Reviewed by Simon Fraser.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRectInternal):
        ScrollView::visibleContentRectInternal() was calling the internal implementation of visibleContentRect().
        That was skipping the iOS implementation and getting the framerect directly. That size is invalid on iOS
        when the exposed rect and unobscured rect are not the same.

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

        [Mac] naturalSize not updated when preload=metadata
        https://bugs.webkit.org/show_bug.cgi?id=132994

        Reviewed by Eric Carlson.

        Test: media/video-load-preload-metadata-naturalsize.html

        When preload=metadata, we never create an AVPlayerItem, and therefore never receive a
        presentationSize KVO. When an AVAsset informs us that its tracks have changed, and there
        is no AVPlayerItem, recalculate presentation size based on the first video track's natural
        size.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

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

        Remove "region-based columns" prefs
        https://bugs.webkit.org/show_bug.cgi?id=133006
        <rdar://problem/16945824>

        Reviewed by Dave Hyatt.

        Remove "region-based columns" prefs and related code, since this is only
        way to render columns now.

        * page/Settings.in:

2014-05-16  Antti Koivisto  <antti@apple.com>

        Link search area for touch events is too large in some cases
        https://bugs.webkit.org/show_bug.cgi?id=132988
        <rdar://problem/16917843>

        Reviewed by Simon Fraser.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::qualifyingNodeAtViewportLocation):
        
            - Adjust the search area to screen ppi.
            - Remove cut-off at scale 1. This made us pick physically far-away elements when zoomed in.
            
        * platform/PlatformScreen.h:
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::mobileGestaltFloatValue):
        (WebCore::screenPPIFactor):

            Figure out screens physical PPI relative to a base.

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

        [MSE] Crash at  WebCore::SourceBuffer::~SourceBuffer + 110
        https://bugs.webkit.org/show_bug.cgi?id=132973

        Reviewed by Eric Carlson.

        Change SourceBuffer::m_private into a Ref<>, and add an assertion to
        SourceBufferPrivateAVFObjC's destructor if its client has not been cleared.

        Eliminate unnecessary churn in MediaSourcePrivateAVFObjC by having the predicate
        functor take bare pointers, rather than a PassRefPtr.

        The underlying problem seems to be in WebAVStreamDataParserListener. RefPtrs were
        being created off the main thread to a non-thread safe ref counted class. In some
        situations, this would result in double decrementing the ref, which would cause an
        early destruction of the underlying object. Instead replace these RefPtr strong
        pointers with explicit weak ones. Ensure the parser and its delegate are not freed
        before the append operation completes by passing strong pointers into the async
        append operation lambda.

        There were a few places where we weren't null checking m_mediaSource before using it,
        and at least one place where we weren't clearing m_mediaSource.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer): Use Ref instead of RefPtr.
        (WebCore::SourceBuffer::appendBufferTimerFired): Ditto.
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjCHasAudio): Take a bare pointer, instead of a PassRefPtr.
        (WebCore::MediaSourcePrivateAVFObjCHasVideo): Ditto.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::removeSourceBuffer): Clear the back pointer when removing a buffer.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener initWithParser:parent:WebCore::]): Use WeakPtr instead of RefPtr.
        (-[WebAVStreamDataParserListener invalidate]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::append): Ditto.

2014-05-16  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Push named flows in region to device pixel when painting.
        https://bugs.webkit.org/show_bug.cgi?id=132986

        Reviewed by Simon Fraser.

        Remove integral rounding when named flow sets the painting offset on the graphics context.
        Use device pixel snapping instead to ensure that we can paint on odd device pixel positions on retina displays. 

        Test: fast/regions/hidpi-region-with-auto-margin-on-subpixel-position.html

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

2014-05-16  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Add ASSERT to make sure using the flowThread cache does not return incorrect results
        https://bugs.webkit.org/show_bug.cgi?id=132906

        Reviewed by Simon Fraser.

        If flowThreadContainingBlock() is called on an object which is in a different
        flow thread than the one currently being laid out, this method will return an incorrect
        result. I added an assertion for that to make sure we catch and treat any such scenarios.
        For the moment, this assertion is only validated for regions, as multicol still has some issues.

        No new tests required.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::locateFlowThreadContainingBlockNoCache):
        (WebCore::RenderObject::locateFlowThreadContainingBlock):
        * rendering/RenderObject.h:

2014-05-16  Martin Hock  <mhock@apple.com>

        MemoryCache::addImageToCache should return the result of add().
        https://bugs.webkit.org/show_bug.cgi?id=132928
        <rdar://problem/16651547>

        Reviewed by Alexey Proskuryakov.

        API test: WebKit1.MemoryCacheADdImageToCache (MemoryCacheAddImageToCacheIOS.mm)

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):

2014-05-16  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Reduce the RenderRegion invasiveness in rendering code
        https://bugs.webkit.org/show_bug.cgi?id=132121

        Reviewed by Antti Koivisto.

        Remove the RenderRegion / RenderNamedFlowFragment parameters and fields from
        the painting / hit testing data structures and use a stateful approach to
        correctly handle regions.

        When painting or hit testing, the current flow thread is saved along the current
        region. They are accessed through the |currentRenderNamedFlowFragment| helper
        method on RenderObject or RenderLayer.

        The patch also changes a bunch of 0s to nullptrs.

        Tests: No new tests, no functional change.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * rendering/HitTestLocation.cpp:
        (WebCore::HitTestLocation::HitTestLocation):
        (WebCore::HitTestLocation::operator=):
        * rendering/HitTestLocation.h:
        (WebCore::HitTestLocation::region): Deleted.
        * rendering/HitTestResult.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::currentRenderNamedFlowFragment):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

2014-05-16  Kiran  <kiran.guduru@samsung.com>

        RTCDtmfSender default values need to be updated.
        https://bugs.webkit.org/show_bug.cgi?id=132952

        Reviewed by Eric Carlson.

        The default ToneDuration and ToneGap values are modified in the updated spec.
        So these values need to be updated.

        Test: fast/mediastream/RTCPeerConnection-dtmf.html.

        * Modules/mediastream/RTCDTMFSender.cpp:

2014-05-15  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Mavericks Release, Apple MountainLion Release,
        Apple MountainLion Release (32-bit Build), EFL, and GTK builds following
        <http://trac.webkit.org/changeset/168921> (https://bugs.webkit.org/show_bug.cgi?id=132669)

        * dom/ContainerNode.cpp: Include SVGElement.h for the definition of Node::hasTagName(const SVGQualifiedName&).

2014-05-15  Daniel Bates  <dabates@apple.com>

        ASSERT_NOT_REACHED() in DocumentOrderedMap::get() when removing SVG subtree
        https://bugs.webkit.org/show_bug.cgi?id=132669
        <rdar://problem/14931432>

        Reviewed by Brent Fulgham and Ryosuke Niwa.

        Fixes an assertion failure when removing an SVG element with a duplicate id.

        When removing an SVG element with id A we synchronously instruct each element that references A
        to find the first element with id A, call this N, from the document root and register itself to
        either receive subsequent notifications from N (say, there is another element with id A) or as
        waiting for an element with id A (say, N = nullptr; => we removed the last element with id A from
        the document). Because the elements that reference A perform this operation synchronously when
        removing an element they consult an transient state of the DocumentOrderedMap when querying for the
        element with id A.
    
        Without loss of generality, let E, E_1, E_2, and E_3 be elements, where E_1, E_2, E_3 are children
        of E in that order and E_1.id = E_2.id = A and E_3.href = #A (that is, it references an element
        with id A). Suppose we remove E then we remove E_1, update DocumentOrderedMap to decrement its count
        for id A, and notify E_3 to look for an element with id A. This leads to an assertion failure since
        DocumentOrderedMap expects to find an element with id A, E_2, but cannot find such an element when
        traversing from the document root because E was unlinked from the document root (i.e. E_2 is in a
        disjoint subtree).

        Tests: svg/custom/change-id-of-use-during-removal.html
               svg/custom/remove-subtree-including-path-with-duplicate-id-referenced-by-later-textpath.html
               svg/custom/remove-subtree-including-text-with-duplicate-id-referenced-by-later-tref.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-earlier-use.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-later-animate.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-later-feimage.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-later-mpath.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-later-use.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-later-use2.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-use-in-different-subtree.html
               svg/custom/remove-subtree-including-use-with-duplicate-id-referenced-by-use-with-duplicate-id-in-different-subtree.html
               svg/custom/remove-use-with-duplicate-id-referenced-by-later-use.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild): Call SVGDocumentExtensions::rebuildElements() after we remove
        a DOM subtree so that applicable SVG elements can update their referenced element when the DocumentOrderedMap
        is in a stable-state.
        (WebCore::ContainerNode::removeChildren): Ditto.
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::rebuildElements): Added; notifies SVG elements that their href attribute
        changed so that they query the DocumentOrderedMap for the element they reference by id in their href attribute.
        (WebCore::SVGDocumentExtensions::clearTargetDependencies): Added; Called from removing
        an SVG element S from the DOM. Appends all elements that reference the id of S to the end of a Vector of
        elements to be rebuilt (when SVGDocumentExtensions::rebuildElements() is called) and notifies these elements
        that have been marked to be rebuilt so that they can invalidate their state (e.g. stop animating).
        (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget): Changed to take its argument by reference
        (since it's always non-null) and simplified logic to synchronously notify SVG updates that their referenced element
        may have changed. Calling SVGElement::svgAttributeChanged() on an element E should at most remove the dependencies
        of E.
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement): Substitute "*this" for "this" as SVGDocumentExtensions::rebuildAllElementReferencesForTarget()
        now takes a reference instead of a pointer.
        (WebCore::SVGElement::removedFrom): Modified to call SVGDocumentExtensions::clearTargetDependencies().
        (WebCore::SVGElement::attributeChanged): Substitute "*this" for "this" as SVGDocumentExtensions::rebuildAllElementReferencesForTarget()
        now takes a reference instead of a pointer.
        * svg/SVGElement.h:
        (WebCore::SVGElement::callClearTarget): Added; calls through to private virtual SVGElement::clearTarget().
        (WebCore::SVGElement::clearTarget): Added.
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::clearTarget): Added.
        * svg/SVGTRefElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::clearTarget): Added.
        * svg/animation/SVGSMILElement.h:

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

        [iOS WK2] When zoomed, fixed elements jump at the start of a scroll, and jump back at the end.
        https://bugs.webkit.org/show_bug.cgi?id=132978
        <rdar://problem/16894428>

        Reviewed by Benjamin Poulain.

        This was the actual cause of the bug; r168560 changed the rect passed in here
        to be the customFixedPositionRect rather than the unobscured rect, but we
        used it to call FrameView::rectForViewportConstrainedObjects() which gave back
        another bogus rect. So just use the rect passed in.

        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::updateLayersAfterViewportChange):

2014-05-15  Daniel Bates  <dabates@apple.com>

        SVG element may reference arbitrary DOM element before running its insertion logic
        https://bugs.webkit.org/show_bug.cgi?id=132757
        <rdar://problem/15703817>

        Reviewed by Ryosuke Niwa.

        Fixes an issue where an SVG element may reference an arbitrary DOM element e before e finished being
        inserted in the tree.

        Currently when an SVG element A is inserted into a document we use document.getElementById() to find the
        element B it references (if any). If A is inserted before B and B has the same id as a later element in
        the document then A can find B before B is notified that its been inserted into the document (i.e. before
        Element::insertedFrom() is called on B). Instead, A should call document.getElementById() only after
        cessation of the insertion operation that inserted it to ensure that all inserted nodes (including B)
        processed their insertion-specific logic.

        Tests: svg/custom/reparent-animate-element.html
               svg/custom/reparent-feimage-element.html
               svg/custom/reparent-mpath-element.html
               svg/custom/reparent-textpath-element.html
               svg/custom/reparent-tref-element.html
               svg/custom/reparent-use-element.html

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::insertedInto): Return InsertionShouldCallDidNotifySubtreeInsertions so that
        we are called back to resolve our target element (i.e. call SVGFEImageElement::buildPendingResources())
        after the subtree we're in is inserted.
        (WebCore::SVGFEImageElement::didNotifySubtreeInsertions): Added; turns around and calls SVGFEImageElement::buildPendingResources().
        * svg/SVGFEImageElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::insertedInto): Return InsertionShouldCallDidNotifySubtreeInsertions so that
        we are called back to resolve our target element (i.e. call SVGMPathElement::buildPendingResources())
        after the subtree we're in is inserted.
        (WebCore::SVGMPathElement::didNotifySubtreeInsertions): Added; turns around and calls SVGMPathElement::buildPendingResources().
        * svg/SVGMPathElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::insertedInto): Return InsertionShouldCallDidNotifySubtreeInsertions so that
        we are called back to resolve our target element (i.e. call SVGTRefElement::buildPendingResources())
        after the subtree we're in is inserted.
        (WebCore::SVGTRefElement::didNotifySubtreeInsertions): Added; turns around and calls SVGTRefElement::buildPendingResources().
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedInto): Return InsertionShouldCallDidNotifySubtreeInsertions so that
        we are called back to resolve our target element (i.e. call SVGTextPathElement::buildPendingResources())
        after the subtree we're in is inserted.
        (WebCore::SVGTextPathElement::didNotifySubtreeInsertions): Added; turns around and calls SVGTextPathElement::buildPendingResources().
        * svg/SVGTextPathElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedInto): Return InsertionShouldCallDidNotifySubtreeInsertions so that
        we are called back to resolve our target element (i.e. call SVGUseElement::buildPendingResources()) after its subtree is
        inserted.
        (WebCore::SVGUseElement::didNotifySubtreeInsertions): Added; turns around and calls SVGUseElement::buildPendingResources().
        * svg/SVGUseElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedInto): Return InsertionShouldCallDidNotifySubtreeInsertions so that
        we are called back to resolve our target element (i.e. call SVGSMILElement::buildPendingResources())
        after the subtree we're in is inserted.
        (WebCore::SVGSMILElement::didNotifySubtreeInsertions): Added; turns around and calls SVGSMILElement::buildPendingResources().
        * svg/animation/SVGSMILElement.h:

2014-05-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSDOMWindow should not claim HasImpureGetOwnPropertySlot
        https://bugs.webkit.org/show_bug.cgi?id=132918

        Reviewed by Geoffrey Garen.

        Tests: js/cached-window-properties.html
               js/cached-window-prototype-properties.html

        We now correctly handle the impurity of JSDOMWindow's custom getOwnPropertySlot without needing the 
        blanket HasImpureGetOwnPropertySlot. We do this through the use of watchpoints and by explicitly forbidding
        any caching beyond a certain point using PropertySlot::disableCaching. Getting rid of this flag will allow 
        us to cache many properties/methods on both the JSDOMWindow and its prototype, which are very commonly used 
        across the web.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        * bindings/scripts/CodeGeneratorJS.pm:
        (HasComplexGetOwnProperty):
        (InterfaceRequiresAttributesOnInstance):
        (InstanceOverridesGetOwnPropertySlot):
        (GenerateHeader):

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

        NetworkProcess crashes at ResourceHandle::continueDidReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=132966
        <rdar://problem/16373694>

        Reviewed by Brady Eidson.

        Covered by many fast/files tests.

        * platform/network/BlobResourceHandle.cpp: (WebCore::BlobResourceHandle::continueDidReceiveResponse):
        * platform/network/BlobResourceHandle.h:
        * platform/network/ResourceHandle.h:
        Don't call delegate's continueDidReceiveResponse when loading a blob:// URL,
        the delegate is null. On the Mac, we used to lazily create it, which was also wrong,
        but at least not observable.

2014-05-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r168899.
        https://bugs.webkit.org/show_bug.cgi?id=132965

        Broke some compositing regions tests on Mavericks (Requested
        by mihnea___ on #webkit).

        Reverted changeset:

        "[CSS Regions] Reduce the RenderRegion invasiveness in
        rendering code"
        https://bugs.webkit.org/show_bug.cgi?id=132121
        http://trac.webkit.org/changeset/168899

2014-05-15  Alex Christensen  <achristensen@webkit.org>

        Add pointer lock to features without enabling it.
        https://bugs.webkit.org/show_bug.cgi?id=132961

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:
        Added ENABLE_POINTER_LOCK to list of features.
        * WebCore.exp.in:
        Added linker symbols which differ with pointer lock enabled.
        * WebCore.xcodeproj/project.pbxproj:
        Added PointerLockController.cpp to build.

2014-05-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        Move subframe name getter lookup later in JSDOMWindow::getOwnPropertySlot
        https://bugs.webkit.org/show_bug.cgi?id=132922

        Reviewed by Geoffrey Garen.

        No new tests.

        In JSDOMWindow::getOwnPropertySlot, we currently look for the property on the JSDOMWindow, 
        then we search the window's subframes for name getters, then we look in the window's prototype 
        chain. Apparently we were doing the lookup in this order to be compatible with Mozilla, but 
        Mozilla no longer implements this behavior. Instead, they do the lookup on the prototype before 
        looking for subframe name getters. We should change this to match Mozilla. This has the convenient 
        side effect of allowing us to cache lookups in the window's prototype chain.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):

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

        [UI-side compositing] Fix copying animations between layers, and pausing them
        https://bugs.webkit.org/show_bug.cgi?id=132943
        <rdar://problem/16906369&16906541>

        Reviewed by Tim Horton.

        Pass the animation key back to animationStarted(), though this isn't used
        when animations are running in-process.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        (PlatformCALayerMac::animationStarted):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::animationStarted):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2014-05-15  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Reduce the RenderRegion invasiveness in rendering code
        https://bugs.webkit.org/show_bug.cgi?id=132121

        Reviewed by Antti Koivisto.

        Remove the RenderRegion / RenderNamedFlowFragment parameters and fields from
        the painting / hit testing data structures and use a stateful approach to
        correctly handle regions.

        When painting or hit testing, the current flow thread is saved along the current
        region. They are accessed through the |currentRenderNamedFlowFragment| helper
        method on RenderObject or RenderLayer.

        The patch also changes a bunch of 0s to nullptrs.

        Tests: No new tests, no functional change.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * rendering/HitTestLocation.cpp:
        (WebCore::HitTestLocation::HitTestLocation):
        (WebCore::HitTestLocation::operator=):
        * rendering/HitTestLocation.h:
        (WebCore::HitTestLocation::region): Deleted.
        * rendering/HitTestResult.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::currentRenderNamedFlowFragment):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

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

        Clean up "has non-zero begin time" terminology in animations
        https://bugs.webkit.org/show_bug.cgi?id=132942

        Reviewed by Tim Horton.

        Change the "non-zero beginTime" terminology in the platform CA animations
        code to "explicit beginTime": this flag really means that we explicitly set
        the beginTime of the animation, rather than let CA set the beginTime when
        committing the animation. This flag is used for animations with negative
        delay, and when pausing.
        
        The WKNonZeroBeginTimeFlag key was spread across PlatformCALayerMac and PlatformCAAnimationMac,
        so hide it behind getter/setter functions.
        
        Remove lots of m_layer.get() in PlatformCAAnimationMac.

        * platform/graphics/ca/mac/PlatformCAAnimationMac.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (WebCore::hasExplicitBeginTime):
        (WebCore::setHasExplicitBeginTime):
        (PlatformCAAnimationMac::copy):
        (PlatformCAAnimationMac::keyPath):
        (PlatformCAAnimationMac::beginTime):
        (PlatformCAAnimationMac::setBeginTime):
        (PlatformCAAnimationMac::duration):
        (PlatformCAAnimationMac::setDuration):
        (PlatformCAAnimationMac::speed):
        (PlatformCAAnimationMac::setSpeed):
        (PlatformCAAnimationMac::timeOffset):
        (PlatformCAAnimationMac::setTimeOffset):
        (PlatformCAAnimationMac::repeatCount):
        (PlatformCAAnimationMac::setRepeatCount):
        (PlatformCAAnimationMac::autoreverses):
        (PlatformCAAnimationMac::setAutoreverses):
        (PlatformCAAnimationMac::fillMode):
        (PlatformCAAnimationMac::setFillMode):
        (PlatformCAAnimationMac::setTimingFunction):
        (PlatformCAAnimationMac::copyTimingFunctionFrom):
        (PlatformCAAnimationMac::isRemovedOnCompletion):
        (PlatformCAAnimationMac::setRemovedOnCompletion):
        (PlatformCAAnimationMac::isAdditive):
        (PlatformCAAnimationMac::setAdditive):
        (PlatformCAAnimationMac::valueFunction):
        (PlatformCAAnimationMac::setValueFunction):
        (hasNonZeroBeginTimeFlag): Deleted.
        (setNonZeroBeginTimeFlag): Deleted.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (-[WebAnimationDelegate animationDidStart:]):

2014-05-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Compile all installed resources as GResources
        https://bugs.webkit.org/show_bug.cgi?id=131099

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Do not install the resources.
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource): Load the audio resource
        from GResources and use createBusFromInMemoryAudioFile().
        * platform/graphics/Image.h: Remove unsued function loadPlatformThemeIcon.
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::loadImageFromGResource): Load the given icon name from GResources.
        (WebCore::loadResourceSharedBuffer): Use char* instead of CString.
        (WebCore::loadMissingImageIconFromTheme): Try to load the missing
        icon from the current GTK icon theme.
        (WebCore::Image::loadPlatformResource): Call
        loadMissingImageIconFromTheme for missing icon or
        loadImageFromGResource for any other icon name.
        (WebCore::getPathToImageResource): Deleted.
        (WebCore::getThemeIconFileName): Deleted.
        (WebCore::loadImageFromFile): Deleted.
        (WebCore::Image::loadPlatformThemeIcon): Deleted.

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

        Tiled scrolling indicator needs to take topContentInset into account
        https://bugs.webkit.org/show_bug.cgi?id=132940

        Reviewed by Simon Fraser.

        The tiled scrolling indicator needs to move down by the value of the 
        topContentInset. This patch makes that happen by caching the topContentInset in 
        the TileController. This does feel a little silly since there is already a 
        function called setTiledScrollingIndicatorPosition() on TiledBacking. However, it 
        was often the case that calling that function had no effect because m_coverageMap 
        had not yet been created, and then the information was lost. So instead, we cache 
        the value.

        Set TiledBacking’s copy of topContentInset whenever it changes for the FrameView.
        * page/FrameView.cpp:
        (WebCore::FrameView::topContentInsetDidChange):

        New function to set the inset. Use the inset to position the coverage map.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::setTopContentInset):

        When the coverage map is created, consult the value of the inset.
        * platform/graphics/ca/mac/TileCoverageMap.mm:
        (WebCore::TileCoverageMap::TileCoverageMap):

        Once the backing has been ensured, set the inset.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2014-05-14  Brent Fulgham  <bfulgham@apple.com>

        Merge r1267628 from branch.
        <rdar://problem/15751219>

            Pratik Solanki  <psolanki@apple.com>

            Reviewed by Simon Fraser.",

            TileController relied on the tiling mode in TileCache to determine if it should use low-res
            tiles when zooming. Unfortunately, sometimes the tiling mode gets set to Zooming even though
            it's actually a pan. Thus we can end up with blurry tiles. Fix this by adding a new flag on
            TileCache that controls this behavior and have UIKit set it only when we have an actual zoom
            operation.
 
        * platform/ios/LegacyTileCache.h:
        (WebCore::LegacyTileCache::tileControllerShouldUseLowScaleTiles):
        (WebCore::LegacyTileCache::setTileControllerShouldUseLowScaleTiles):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::LegacyTileCache):
        * platform/ios/wak/WAKWindow.h:
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow setTileControllerShouldUseLowScaleTiles:]):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles):

2014-05-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r168750.
        https://bugs.webkit.org/show_bug.cgi?id=132935

        Caused repaint bugs (Requested by weinig on #webkit).

        Reverted changeset:

        "Text decorations do not contribute to visual overflow"
        https://bugs.webkit.org/show_bug.cgi?id=132773
        http://trac.webkit.org/changeset/168750

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

        [New multicolumn] Spin in RenderMultiColumnSet::repaintFlowThreadContent()
        https://bugs.webkit.org/show_bug.cgi?id=132884

        Reviewed by Beth Dakin.

        On iOS, wikipedia pages can hang under RenderMultiColumnSet::repaintFlowThreadContent().
        It appears that computedColumnHeight is set to 0 in prepareForLayout, but layout never happens
        on the RenderMultiColumnSet in some cases, leaving the column height set to zero.
        This caused columnIndexAtOffset() to return bad values, which resulted in very long loops
        in repaintFlowThreadContent().
        
        This fix is a stop-gap.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnIndexAtOffset):

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

        Remove FrameView::viewportConstrainedExtentRect, it is unused
        https://bugs.webkit.org/show_bug.cgi?id=132927

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedExtentRect): Deleted.
        * page/FrameView.h:
        Simon replaced this by viewportConstrainedVisibleContentRect, remove the old code.

2014-05-14  Matthew Hanson  <matthew_hanson@apple.com>

        Only define MAX_GRID_TRACK_REPETITIONS if CSS_GRID_LAYOUT is enabled.

        Reviewed by Dean Jackson.

        This was causing -Wunused-const-variable errors.

        * css/CSSParser.cpp: Add include guard.

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

        Tile cache has way too many tiles when pinch-zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=132929
        -and corresponding-
        <rdar://problem/16527172>

        Reviewed by Benjamin Poulain.

        This patch makes the margin sizing functions return the set margin size scaled by 
        the TileGrid's scale. We also need to get rid of the old notion we used to have
        that margin tiles might be allowed to have a different size than the other tiles. 
        We don't want that. They should have the normal margin size, but they should
        affect the overall coverage area.

        Scale by the TileGrid's scale.
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::topMarginHeight):
        (WebCore::TileController::bottomMarginHeight):
        (WebCore::TileController::leftMarginWidth):
        (WebCore::TileController::rightMarginWidth):

        Get rid of adjustRectAtTileIndexForMargin() since we do not want to ever do this 
        adjustment. Use tileSize instead of margin size for all sizing computations.
        * platform/graphics/ca/mac/TileGrid.h:
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::rectForTileIndex):
        (WebCore::TileGrid::getTileIndexRangeForRect):
        (WebCore::TileGrid::adjustRectAtTileIndexForMargin): Deleted.

2014-05-14  Dean Jackson  <dino@apple.com>

        [Mac] Search fields should not use centered look
        https://bugs.webkit.org/show_bug.cgi?id=132930
        <rdar://problem/16825842>

        Reviewed by Beth Dakin.

        We need to explicitly set the centeredLook property
        to NO on modern releases of Mac.

        * rendering/RenderThemeMac.mm: Declare a new private property and set it to NO.
        (WebCore::RenderThemeMac::search):

2014-05-14  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Change Element.offset* client* scroll* return type to double.
        https://bugs.webkit.org/show_bug.cgi?id=132895

        Reviewed by Simon Fraser.

        This patch changes Element.offset*, Element.client* and Element.scroll* APIs return
        type from long to double to match the latest CSSOM View Module spec[1].
        Element.offset* and Element.client* do return subpixel values from now on.
        Element.scroll* still return integral values as the scrolling code hasn't adopted to subpixel rendering yet.

        subpixelCSSOMElementMetricsEnabled setting is added to be able to turn this feature on/off
        from WK2 preferences. It toggles the return value from subpixel to floored integral.
        It does not change layout/rendering behavior.

        Reference list of what other browsers do:
        IE: http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx
        Blink: http://www.chromestatus.com/features/5497402177880064
        Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=825607

        [1] http://www.w3.org/TR/2013/WD-cssom-view-20131217/

        Test: cssom/subpixel-offsetleft-top-width-height-values.html

        * dom/Element.cpp:
        (WebCore::localZoomForRenderer):
        (WebCore::adjustForLocalZoom):
        (WebCore::convertToNonSubpixelValueIfNeeded):
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientLeft):
        (WebCore::Element::clientTop):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::scrollLeft):
        (WebCore::Element::scrollTop):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        * dom/Element.h:
        * dom/Element.idl:
        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom):
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        (WebCore::HTMLBodyElement::scrollHeight):
        (WebCore::HTMLBodyElement::scrollWidth):
        * html/HTMLBodyElement.h:
        * page/Settings.in:

2014-05-14  Brady Eidson  <beidson@apple.com>

        Implement NSSharingServiceDelegate method "transitionImageForShareItem"
        <rdar://problem/16878020> and https://bugs.webkit.org/show_bug.cgi?id=132911

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-05-14  Alex Christensen  <achristensen@webkit.org>

        Another unreviewed build fix.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getTimingData):
        Added necessary UNUSED_PARAMs.

2014-05-14  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r168849.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getTimingData):
        Protect use of timing data with ENABLE(WEB_TIMING).

2014-05-14  Alex Christensen  <achristensen@webkit.org>

        Refactor duplicate code in web timing.
        https://bugs.webkit.org/show_bug.cgi?id=132917

        Reviewed by Alexey Proskuryakov.

        * platform/network/ResourceHandle.h:
        Added getTimingData declaration.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getTimingData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        Moved duplicate code to ResourceHandle.

2014-05-14  Alex Christensen  <achristensen@webkit.org>

        Use references instead of pointers with ResourceLoadTiming.
        https://bugs.webkit.org/show_bug.cgi?id=132846

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        Removed ResourceResponseBase::setResourceLoadTiming linker symbol.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::domainLookupStart):
        (WebCore::PerformanceResourceTiming::domainLookupEnd):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        (WebCore::PerformanceResourceTiming::secureConnectionStart):
        (WebCore::PerformanceResourceTiming::requestStart):
        Use references instead of pointers.
        * page/PerformanceResourceTiming.h:
        Make an instance instead of a RefPtr.
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        (WebCore::PerformanceTiming::secureConnectionStart):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::responseStart):
        Check to see if the loader exists, then use ResourceLoadTiming reference.
        (WebCore::PerformanceTiming::resourceLoadTiming): Deleted.
        * page/PerformanceTiming.h:
        Removed resourceLoadTiming declaration.
        * platform/network/ResourceLoadTiming.h:
        (WebCore::ResourceLoadTiming::ResourceLoadTiming):
        (WebCore::ResourceLoadTiming::operator=):
        Replaced reference counting with copy constructors.
        (WebCore::ResourceLoadTiming::create): Deleted.
        (WebCore::ResourceLoadTiming::deepCopy): Deleted.
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::compare):
        * platform/network/ResourceResponseBase.h:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::didStartRequest):
        (WebCore::networkEventCallback):
        Use references instead of pointers.

2014-05-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r168837.
        https://bugs.webkit.org/show_bug.cgi?id=132913

        The patch added an assertion which fires on 6 tests (Requested
        by ap on #webkit).

        Reverted changeset:

        "[CSS Regions] Add ASSERT to make sure using the flowThread
        cache does not return incorrect results"
        https://bugs.webkit.org/show_bug.cgi?id=132906
        http://trac.webkit.org/changeset/168837

2014-05-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Revert "Don't dispatch 'beforeload' event inside FrameView::layout()",
        commit 84fe8cf6fbe8b5de9a06300ca3ef6d0ffc96948c, and associated
        follow-up fixes:

            "platform/mac/plugins/testplugin-onnew-onpaint.html failing after
                r168668", commit c17be3bf5127baf94310af4b4b9bf5a57d29aaf4
            "[Win] Unreviewed build fix after r168668.", commit
                4fa470ad12c38ee7d4c114541b6dd321181a8bc9

        The original merged patch appears to have caused a regression in
        fast/dom/HTMLObjectElement/object-as-frame.html.

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

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        * dom/Document.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateEmbeddedObjectsTimerFired): Deleted.
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-05-14  Kiran  <kiran.guduru@samsung.com>

        alidation for getUserMedia() errorCallback is missing.
        https://bugs.webkit.org/show_bug.cgi?id=132901

        Reviewed by Darin Adler.

        The patch adds the validation for getUserMedia errorCallBack
        and throws TypeMismatchError.

        Test: fast/mediastream/getusermedia.html 

        * Modules/mediastream/NavigatorUserMedia.cpp:
        (WebCore::NavigatorUserMedia::webkitGetUserMedia):

2014-05-14  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove CSS_STICKY_POSITION guards
        https://bugs.webkit.org/show_bug.cgi?id=132676

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EPosition):
        * css/CSSValueKeywords.in:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::convertPositionStyle):

2014-05-14  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Add ASSERT to make sure using the flowThread cache does not return incorrect results
        https://bugs.webkit.org/show_bug.cgi?id=132906

        Reviewed by Andrei Bucur.

        If flowThreadContainingBlock() is called on an object which is in a different
        flow thread than the one currently being laid out, this method will return an incorrect
        result. I added an assertion for that to make sure we catch and treat any such scenarios.

        No new tests required.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::locateFlowThreadContainingBlockNoCache):
        (WebCore::RenderObject::locateFlowThreadContainingBlock):
        * rendering/RenderObject.h:

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

        [CSS Regions] Don't relayout when updating the region range unless necessary
        https://bugs.webkit.org/show_bug.cgi?id=132120

        Reviewed by Antti Koivisto.

        The patch reduces the cases when a relayout is made for boxes that change the region range.
        This lowers the amount of nested layouts in most cases and produces big layout speedups for trees
        without overhanging floats.

        Tests: Major performance improvement with speedups of 50-60% on:
        Layout/RegionsAuto.html, Layout/RegionsAutoMaxHeight.html and Layout/RegionsFixed.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateRegionRangeForBoxChild): Ask the child box if it needs a relayout
        in case its region range changes.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild): It's not necessary to do two layouts here because
        there's no block direction position change between them for the child.
        (WebCore::RenderBlockFlow::needsLayoutAfterRegionRangeChange): If the block doesn't have floats
        or if it expands to enclose the floats it doesn't need to relayout after a region range chage.
        It's not possible for it to have a float inside overflow that must be repositioned using the new
        range.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::needsLayoutAfterRegionRangeChange): By default don't relayout after a region
        range change.

2014-05-14  Antti Koivisto  <antti@apple.com>

        RuleData should ref the StyleRule
        https://bugs.webkit.org/show_bug.cgi?id=132865

        Reviewed by Andreas Kling.

        As a defensive move make RuleData ref the StyleRule. 
        This adds some ref churn but the overall performance impact should be minimal.

        * css/RuleSet.h:
        (WebCore::RuleData::rule):

2014-05-14  Antti Koivisto  <antti@apple.com>

        GIF animations don't restart after scrolling on iOS WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=132900

        Reviewed by Andreas Kling.

        * WebCore.exp.in:

2014-05-13  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Assertion failure in some cases with inline blocks
        https://bugs.webkit.org/show_bug.cgi?id=132859

        Reviewed by Mihnea Ovidenie.

        The patch hardens the conditions when the region range caches are
        populated to avoid desynchronizations when objects move during layout.
        This is true especially in the case of the boxes found inside
        inline blocks, that get their range from the containing line.

        There is a new function |computedRegionRangeForBox| that will always
        return a region range for a box using a best effort algorithm. This should
        be used only when there's no need to cache region information.

        This change also allows better control over the lifecycle of the
        |RenderBoxRegionInfo| objects stored on the regions. We can now iterate
        over the full range of the box when cleaning up the region box info. The
        same applies for the width change detection function.

        Test: fast/regions/inline-block-shifted-region.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateRegionForLine): Don't set the containing
        region if the block doesn't have a range. The returned value would not
        be correctly clamped.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBlock::hasRegionRangeInFlowThread):
        * rendering/RenderBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo): Iterate only over
        the range of the box, not from the start of the region chain.
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock): Same as
        above.
        (WebCore::RenderFlowThread::hasCachedRegionRangeForBox):
        (WebCore::RenderFlowThread::getRegionRangeForBoxFromCachedInfo):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        (WebCore::RenderFlowThread::computedRegionRangeForBox): Best effort function
        to determine the range of a box. It will always return something as long
        as the flow thread has regions.
        (WebCore::RenderFlowThread::objectShouldFragmentInFlowRegion): Use the new function
        to determine the range.
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::absoluteQuadsForBox): Use the new function to determine
        the range.

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

        Fix "ASSERTION FAILED: m_representation == PlatformLayerRepresentation" with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=132899

        Reviewed by Beth Dakin.

        Export some things

        * WebCore.exp.in:

2014-05-13  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] line height grows around polygon and incorrectly causes text to wrap to next line
        https://bugs.webkit.org/show_bug.cgi?id=131622

        Reviewed by Bem Jones-Bey.

        Corrected an earlier PolygonShape fix https://bugs.webkit.org/show_bug.cgi?id=132132
        When the top or bottom of a layout line is coincident with a polygon edge vertex, we
        only consider it an intersection if the edge extends into the line.

        Test: fast/shapes/shape-outside-floats/shape-outside-edge-case.html

        * rendering/shapes/PolygonShape.cpp:
        (WebCore::OffsetPolygonEdge::clippedEdgeXRange):

2014-05-13  Beth Dakin  <bdakin@apple.com>

        m_layerForOverhangAreas is sometimes not positioned correctly when topContentInset 
        has changed
        https://bugs.webkit.org/show_bug.cgi?id=132898
        -and corresponding-
        <rdar://problem/16644710>

        Reviewed by Anders Carlsson.

        This function is called whenever the topContentInset changes, so use it as an 
        opportunity to ensure that m_layerForOverhangAreas has been positioned correctly.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):

        Everyone gets an anchor point!
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2014-05-13  Dean Jackson  <dino@apple.com>

        Attempted build fix after https://bugs.webkit.org/show_bug.cgi?id=132891

        * page/PageDebuggable.cpp:

2014-05-13  Timothy Hatcher  <timothy@apple.com>

        Force developerExtrasEnabled when a remote Inspector client connects.

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

        Reviewed by Joseph Pecoraro.

        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::PageDebuggable): Initialize m_forcedDeveloperExtrasEnabled to false.
        (WebCore::PageDebuggable::connect): Set m_forcedDeveloperExtrasEnabled if the setting is changed.
        (WebCore::PageDebuggable::disconnect): Switch developerExtrasEnabled back to false
        if m_forcedDeveloperExtrasEnabled is true.
        * page/PageDebuggable.h: Added m_forcedDeveloperExtrasEnabled.

2014-05-13  Beth Dakin  <bdakin@apple.com>

        REGRESSION (topContentInset): Searching through Facebook Messenger's chat causes 
        scrolling in News Feed
        https://bugs.webkit.org/show_bug.cgi?id=132889
        -and corresponding-
        <rdar://problem/16715716>

        Reviewed by Simon Fraser.

        First of all, scrollOffsetRelativeToDocument() was very poorly named. This patch 
        re-names it to the much more accurate documentScrollOffsetRelativeToViewOrigin(). 
        Re-naming it makes it clear that ONE call site was not getting the right offset. 
        That call site does not want to know the document’s position relative to the view 
        origin, but rather it wants to know the Document’s position relative to the 
        scrolling origin.

        Export new name.
        * WebCore.exp.in:

        Use newly re-named documentScrollPositionRelativeToViewOrigin().
        * page/FrameView.cpp:
        (WebCore::FrameView::convertToRenderer):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::documentScrollOffsetRelativeToViewOrigin):
        (WebCore::ScrollView::documentScrollPositionRelativeToViewOrigin):
        (WebCore::ScrollView::documentScrollOffsetRelativeToScrollableAreaOrigin):
        (WebCore::ScrollView::rootViewToContents):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::scrollOffsetRelativeToDocument): Deleted.
        (WebCore::ScrollView::scrollPositionRelativeToDocument): Deleted.
        * platform/ScrollView.h:

        THIS is the spot that needs the new function, 
        documentScrollOffsetRelativeToScrollableAreaOrigin()()
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2014-05-13  Dean Jackson  <dino@apple.com>

        [iOS] Page scale update messages for media controls should only fire at the end of zooming
        https://bugs.webkit.org/show_bug.cgi?id=132857
        <rdar://problem/16631009>

        Reviewed by Simon Fraser.

        As the user was zooming, the media controls that responded
        to the page scale (and resized themselves) would do so
        slightly out of sync with the screen refreshes, and it looked
        terrible. They really only need to get told at the end
        of the zoom that they need to relayout.

        Allow setPageScaleFactor to accept another parameter
        that indicates if the change is stable. That way, changes
        during a user triggers zoom gesture can be ignored for
        media controls.

        * WebCore.exp.in: Page::setPageScaleFactor takes a new parameter.
        * dom/Document.cpp:
        (WebCore::Document::pageScaleFactorChangedAndStable): Renamed from pageScaleFactorChanged.
        (WebCore::Document::pageScaleFactorChanged): Deleted.
        * dom/Document.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor): Accepts a new inStableState parameter,
        and tells the main frame that the scale factor has changed if it's stable.
        * page/Page.h:

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

        Unreviewed build fix after r168755.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):

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

        [Mac] hasVideo should return true when video is ready to display
        https://bugs.webkit.org/show_bug.cgi?id=132885

        Reviewed by Jer Noble.

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

        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack): Don't change the
            enabled state of the AVPlayerItemTrack during setup.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_cachedIsReadyForDisplay.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Remove "enabled" KVO observers.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Observe "readyForDisplay"
            change notifications.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer): Remove for "readyForDisplay"
            observer.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame): Return cached readyForDisplay
            state instead of polling every time.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Call setHasVideo(true) if the
            player layer is ready for display.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks): Update logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::firstFrameAvailableDidChange): Cache readyForDisplay
            state, call tracksChanged() if we haven't seen a video track yet.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::trackEnabledDidChange): New.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive): Correct logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange): Remove old "enabled" listeners
            before release tracks, add new ones to new tracks.
        (WebCore::assetTrackMetadataKeyNames): Add "enabled" to the list of properties we require to 
            be loaded before announcing that metadata has loaded.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Observe 
            "readyForDisplay" and "enabled".

        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack): Don't change the
            enabled state of the AVPlayerItemTrack during setup.

2014-05-13  Myles C. Maxfield  <litherum@gmail.com>

        Text decorations do not contribute to visual overflow
        https://bugs.webkit.org/show_bug.cgi?id=132773

        Reviewed by Darin Adler.

        Tests: fast/css3-text/css3-text-decoration/repaint/underline-outside-of-layout-rect.html

        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStrokeThickness): Refactor into a common function
        (WebCore::wavyOffsetFromDecoration): Ditto
        (WebCore::InlineTextBox::extendVerticalVisualOverflowForDecorations): Given
        vertical overflow bounds, possibly extend those to include location of
        decorations.
        (WebCore::InlineTextBox::paintDecoration): Use refactored functions.
        * rendering/InlineTextBox.h: Function signature
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Call extendVerticalVisualOverflowForDecorations()
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeAffectsVisualOverflow): Inspects shadows and text decorations
        (WebCore::RenderStyle::changeRequiresLayout): Calls changeAffectsVisualOverflow()
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline): Moved code from here
        to changeAffectsVisualOverflow().
        * rendering/style/RenderStyle.h: Function signature

2014-05-13  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Zooming to text field leaves it partially hidden by the form assistant.
        https://bugs.webkit.org/show_bug.cgi?id=132879
        <rdar://problem/16318049>

        Reviewed by Benjamin Poulain.

        Adding some exports. The fix to setScrollPosition is to avoid clamping the scroll
        position when using delegate scrolling.

        * WebCore.exp.in:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):

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

        Followup to: Update positioning/drawing of the image controls button.
        <rdar://problem/16885077> and https://bugs.webkit.org/show_bug.cgi?id=132883

        Reviewed by Tim Horton.

        Cleared up the actual intent behind review feedback on the original patch.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::maybeCreate):

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

        Update positioning/drawing of the image controls button.
        <rdar://problem/16885077> and https://bugs.webkit.org/show_bug.cgi?id=132883

        Reviewed by Tim Horton.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::maybeCreate): Add inline style for top/right
          positioning based on the metrics from the render theme.

        * html/shadow/mac/imageControlsMac.css:
        (.x-webkit-image-controls-button): Can’t hard code any positioning.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::imageControlsButtonPositionOffset):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::servicesRolloverButtonCell):
        (WebCore::RenderThemeMac::imageControlsButtonPositionOffset):

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

        [iOS WK2] background-attachment:fixed behaves very poorly
        https://bugs.webkit.org/show_bug.cgi?id=132881
        <rdar://problem/16789526>

        Reviewed by Beth Dakin.

        Remove the old ENABLE_FAST_MOBILE_SCROLLING code, and add a setting that
        controls whether fixed backgrounds paint relative to the document, which
        is enabled for iOS (WK1 and WK2). This setting is consulted when we repaint
        fixed backgrounds on scrolling, when we paint them, and when we decide to make
        a layer for fixed backgrounds.
        
        * page/Settings.cpp:
        * page/Settings.in:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::willBeRemovedFromTree):
        (WebCore::shouldRepaintFixedBackgroundsOnScroll): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer):

2014-05-13  Zalan Bujtas  <zalan@apple.com>

        REGRESSSION(r168528) Subpixel rendering: Selection rect is not positioned properly when SVG text is selected.
        https://bugs.webkit.org/show_bug.cgi?id=132868

        Reviewed by Dirk Schulze.

        Scale the selection rect. r168528 missed applying this final transform on the selection/painting rect.

        Test: svg/text/hidpi-text-selection-rect-position.html

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::selectionRectForTextFragment):

2014-05-13  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        ASSERTION FAILED: leftCategory != CalcOther && rightCategory != CalcOther
        in WebCore::CSSCalcBinaryOperation::createSimplified
        https://bugs.webkit.org/show_bug.cgi?id=132870

        According to the standard, calc() should be able to handle angle, time
        and frequency values as well: http://www.w3.org/TR/css3-values/#calc

        Reviewed by Darin Adler.

        Test: fast/css/calc-with-angle-time-frequency.html

        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        (WebCore::CSSCalcPrimitiveValue::createCalcExpression):
        (WebCore::CSSCalcPrimitiveValue::computeLengthPx):
        (WebCore::CSSCalcPrimitiveValue::addSubtractResult):
        (WebCore::CSSCalcPrimitiveValue::determineCategory):
        (WebCore::CSSCalcBinaryOperation::primitiveType)
        * css/CSSCalculationValue.h: extending CalculationCategory
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validCalculationUnit):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::primitiveType):

2014-05-13  Darin Adler  <darin@apple.com>

        Try to fix the !ENABLE(ICONDATABASE) build

        * loader/icon/IconDatabase.h: Include WTFString.h.

2014-05-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r167771): [GTK] Text fields and areas are rendered unthemed
        https://bugs.webkit.org/show_bug.cgi?id=132864

        Reviewed by Philippe Normand.

        This is because the virtual methods changed the API in the parent,
        and since we don't have the methods marked as override we didn't
        noticed it. After using override keyword for all virtual methods
        in the derived class another problem showed up, the ActiveListBox
        selection methods were incorrectly named.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintTextArea): Update to API changes in the
        parent class.
        * platform/gtk/RenderThemeGtk.h: Mark all virtual methods as
        override and the class as final.
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::paintTextField): Update to API changes
        in the parent class.
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionBackgroundColor): Deleted.
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionBackgroundColor): Deleted.
        (WebCore::RenderThemeGtk::activeListBoxSelectionForegroundColor): Deleted.
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionForegroundColor): Deleted.
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintTextField): Update to API changes
        in the parent class.
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionBackgroundColor): Deleted.
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionBackgroundColor): Deleted.
        (WebCore::RenderThemeGtk::activeListBoxSelectionForegroundColor): Deleted.
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionForegroundColor): Deleted.

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

        [GStreamer] Move toGstClockTime to utilities
        https://bugs.webkit.org/show_bug.cgi?id=132702

        Reviewed by Philippe Normand.

        toGstClockTime should be in GStreamerUtilities and corrected typo
        in getGstPlayFlag.

        No new tests needed.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::getGstPlayFlag): Renamed from getGstPlaysFlag.
        (WebCore::toGstClockTime): Moved from MediaPlayerPrivateGStreamer.
        (WebCore::getGstPlaysFlag): Deleted.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setDownloadBuffering):
        Corrected getGstPlayFlag typo.
        (WebCore::toGstClockTime): Deleted.

2014-05-12  Darin Adler  <darin@apple.com>

        Make a few icon database improvements
        https://bugs.webkit.org/show_bug.cgi?id=132812

        Reviewed by Brady Eidson.

        * WebCore.exp.in: Export more IconDatabase functions, since they are now called
        by WebKit2 through pointers to a class marked final.

        * loader/icon/IconDatabase.cpp: Removed unneeded includes. Use override for
        virtual functions.

        * loader/icon/IconDatabase.h: Removed unneeded includes. Marked the class final.
        Use override for virtual functions. Use a public constructor instead of a create
        function.

        * loader/icon/IconDatabaseBase.h: Removed unneeded includes.

2014-05-13  Kiran  <kiran.guduru@samsung.com>

        [MediaStream] MediaStream.addTrack Should not check for active state.
        https://bugs.webkit.org/show_bug.cgi?id=132558

        Reviewed by Eric Carlson.

        MediaStream.addTrack method is checking for active state of a
        MediaStream, but it should not check for active state while adding a Track.

        Test: fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):

2014-05-12  Mark Lam  <mark.lam@apple.com>

        WebKit2 on iOS needs to capture the main thread's floating point environment.
        <https://webkit.org/b/132755>

        Reviewed by Geoffrey Garen.

        For iOS, WorkerThread::workerThread() expects to be able to initialize the
        worker thread's floating point environment to be the same as the one in the
        main thread.  The FP env of the main thread is expected to have been captured
        in the mainThreadFEnv global.  On WebKit2 for iOS, we neglected to initialize
        mainThreadFEnv.

        We now introduce a FloatingPointEnvironment class that will encapsulate the main
        thread (aka "UIThread") fenv, and we'll call FloatingPointEnv::saveMainThreadEnvironment()
        from ChildProcess::platformInitialize() to ensure that the FloatingPointEnvironment
        singleton instance is initialized properly for WebKit2.

        In the ChildProcess::platformInitialize(), we also need to initialize the ARMv7
        FP env to support denormalized numbers.  We'll do this before calling
        saveMainThreadEnvironment().

        Tests: fast/workers/worker-floating-point.html
               js/floating-point-denormalized.html

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/wak/FloatingPointEnvironment.cpp: Added.
        (WebCore::FloatingPointEnvironment::env):
        (WebCore::FloatingPointEnvironment::FloatingPointEnvironment):
        (WebCore::FloatingPointEnvironment::enableDenormalSupport):
        (WebCore::FloatingPointEnvironment::saveMainThreadEnvironment):
        (WebCore::FloatingPointEnvironment::propagateMainThreadEnvironment):
        * platform/ios/wak/FloatingPointEnvironment.h: Added.
        * platform/ios/wak/WebCoreThread.h:
        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread):
        (StartWebThread):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2014-05-12  Dirk Schulze  <krit@webkit.org>

        SVG root element accepts background color but fails to repaint it
        https://bugs.webkit.org/show_bug.cgi?id=63153

        Reviewed by Dean Jackson.

        This is back ported from Blink. Don't know the exact commit though.
        The patch checks if the SVGSVGElement is an outermost root element.
        If it is, mark the whole element for repaint.

        Test: svg/custom/svg-root-background.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateHasBoxDecorations):
        (WebCore::RenderBoxModelObject::updateFromStyle):
        * rendering/RenderBoxModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::paintReplaced):
        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
            This is a simple optimization by taking the necessary parts
            from RenderReplaced and SVGRenderSupport.
        * rendering/svg/RenderSVGRoot.h:

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

        [iOS] Fixed items are sometimes clipped after rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=132851
        <rdar://problem/16870790>

        Reviewed by Benjamin Poulain.

        On iOS fixed-position layers would get clipped to the document rect,
        but with rubber-banding, we can now have a custom fixed postion rect
        that extends outside the document rect.
        
        Another issue was that we would un-composite fixed elements sometimes
        when scrolling fast, again because they could fall outside of the document rect.
        
        A final issue was that pinching could reveal parts of fixed elements that should
        lie outside the viewport, rather than clipping the layers.
        
        Fix by converting both call points to use viewportConstrainedVisibleContentRect()
        rather than viewportConstrainedExtentRect(). On non-iOS platforms these are
        the same, but on iOS viewportConstrainedVisibleContentRect() uses the
        custom fixed position rect, which is the correct rect to intersect with.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2014-05-06  Jon Honeycutt  <jhoneycutt@apple.com>

        Don't dispatch 'beforeload' event inside FrameView::layout()

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

        This merges Blink revision 162073 with minor renaming and style
        changes. From that commit:

        Executing JavaScript code inside FrameView::layout() is problematic.
        e.g. an assertion failure tested in fast/events/beforeload-assertion.html.
        We should avoid it.

        This CL makes 'beforeload' event dispatching for plugins and iframes asynchronous,
        except plugin access from JavaScript code (HTMLPlugInElement::
        renderWidgetForJSBindings).

        Reviewed by Brent Fulgham.

        Tests: fast/events/beforeload-assertion.html
               fast/events/beforeload-iframe-crash.html
               fast/events/beforeload-input-time-crash.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        * dom/Document.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateEmbeddedObjectsTimerFired):
        (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-05-12  Roger Fong  <roger_fong@apple.com>

        Limit number of active graphics contexts per web process.
        https://bugs.webkit.org/show_bug.cgi?id=132833.
        <rdar://problem/16888459>

        Reviewed by Dean Jackson.

        Test: webgl/many-contexts.html

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm: Limit number of active contexts to 16.
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):

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

        Build fix fix.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::contentShadowLayerForFrameView):

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

        DataDetectorUI doesn't update with resize
        https://bugs.webkit.org/show_bug.cgi?id=132830
        <rdar://problem/16871179>

        Reviewed by Simon Fraser.

        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Add public, no-argument
        version that can be called after layout changes.
        (WebCore::Editor::didLayout): Reprocess telephone number data
        since Ranges will have changed.
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateDataDetectorsForSelection): Added.
        * editing/FrameSelection.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks): Ask the FrameSelection to update the
        Range information for selected phone numbers.

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

        Fix the iOS build.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::contentShadowLayerForFrameView):

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

        [iOS WK2] Fuzzy tiles on some sites on loading
        https://bugs.webkit.org/show_bug.cgi?id=132847
        <rdar://problem/16816178>

        Reviewed by Benjamin Poulain.

        Export WebCore::TileController::contentsScale() const

        * WebCore.exp.in:

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

        Add debug dumping for ViewportConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=132843

        Reviewed by Benjamin Poulain.

        Add some TextStream-based dumping for ViewportConfiguration.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::ViewportConfigurationTextStream::ViewportConfigurationTextStream):
        (WebCore::ViewportConfigurationTextStream::increaseIndent):
        (WebCore::ViewportConfigurationTextStream::decreaseIndent):
        (WebCore::dumpProperty):
        (WebCore::ViewportConfigurationTextStream::writeIndent):
        (WebCore::ViewportConfigurationTextStream::operator<<):
        (WebCore::ViewportConfiguration::description):
        (WebCore::ViewportConfiguration::dump):
        * page/ViewportConfiguration.h:

2014-05-12  Brady Eidson  <beidson@apple.com>

        Followup to "Teach Editor to support more direct replacement of a Node"
        <rdar://problem/16817952> and https://bugs.webkit.org/show_bug.cgi?id=132834

        Pair programmed and pair reviewed by Brady Eidson and Darin Adler.

        * editing/mac/EditorMac.mm:
        (WebCore::maybeCopyNodeAttributesToFragment):
        (WebCore::Editor::replaceNodeFromPasteboard):

2014-05-12  Beth Dakin  <bdakin@apple.com>

        Content shadow layer needs to move in sync with the content layer
        https://bugs.webkit.org/show_bug.cgi?id=132841
        -and corresponding-
        <rdar://problem/16641115>

        Reviewed by Simon Fraser.

        Now that the root content layer moves a little bit (for y scroll positions between 
        0 and topContentInset), the shadow layer needs to move along with it since the 
        shadow layer should always have the same position as the root content layer.

        Set the root state node’s shadow layer, and update the position whenever the root 
        content layer’s position is updated.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):

        Fetch the compositor’s layerForContentShadow().
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::contentShadowLayerForFrameView):
        * page/scrolling/ScrollingCoordinator.h:

        Hook up the contentShadowLayer in the state node.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setContentShadowLayer):

        Hook it up in the ScrollingTreeNode as well. Move the layer whenever the m
        _scrolledContentsLayer is moved.
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

        The shadow layer needs an anchor point now that we are moving it around.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2014-05-12  Dirk Schulze  <krit@webkit.org>

        <svg> with opacity and compositing double-applies its opacity
        https://bugs.webkit.org/show_bug.cgi?id=116856

        Reviewed by Simon Fraser.

        The opacity is applied by the compositor. However, all SVG elements
        create transparency layers on their own to apply opacity. So did
        SVGSVGElement.

        Added a check if the current element has a compositing layer and skip
        creating transparency layer if it has.

        Test: svg/custom/composited-svg-with-opacity.html

        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2014-05-12  Brady Eidson  <beidson@apple.com>

        Teach Editor to support more direct replacement of a Node
        <rdar://problem/16817952> and https://bugs.webkit.org/show_bug.cgi?id=132834

        Reviewed by Enrica Casucci.

        The new method "Editor::replaceNodeFromPasteboard" has the intent that the new DocumentFragment
        from the pasteboard is as similar to the old Node as possible.

        In practice, the new DocumentFragment:
        1 - Can represent a single node that's missing various attributes the original Node had.
        2 - Can be an unwanted fragment of arbitrary depth when the replacement happens inside Mail.app

        This fixes both of these issues.

        Add a MailBlockquoteHandling enum class for various Editor operations to pass through to the
        ReplaceSelectionCommand:
        * editing/Editor.cpp:
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::pasteAsFragment):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::replaceSelectionWithFragment):
        * editing/Editor.h:

        * dom/TextEvent.cpp:
        (WebCore::TextEvent::createForPlainTextPaste):
        (WebCore::TextEvent::createForFragmentPaste):
        (WebCore::TextEvent::TextEvent):
        * dom/TextEvent.h:
        (WebCore::TextEvent::mailBlockquoteHandling):

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::doApply): Consider whether or not this particular Editor
          operation was meant to give special consideration to Mail's Blockquotes.
        * editing/ReplaceSelectionCommand.h:

        * editing/efl/EditorEfl.cpp:
        (WebCore::Editor::pasteWithPasteboard):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::pasteWithPasteboard):

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::readSelectionFromPasteboard):
        (WebCore::maybeCopyNodeAttributesToFragment): If the new DocumentFragment represents a single HTML node
          with the same tag name is the original HTML node, copy over most attributes from the original node.
        (WebCore::Editor::replaceNodeFromPasteboard): Create the fragment, run it through maybeCopyNodeAttributesToFragment.

        * WebCore.exp.in:

2014-05-12  Alex Christensen  <achristensen@webkit.org>

        Progress on web timing.
        https://bugs.webkit.org/show_bug.cgi?id=132574

        Reviewed by Alexey Proskuryakov.

        * CMakeLists.txt:
        Removed ResourceLoadTiming.cpp.
        * WebCore.exp.in:
        Added linker symbols for ResourceLoadTiming.
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Removed ResourceLoadTiming.cpp.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming):
        * inspector/protocol/Network.json:
        Updated ResourceTiming structure.
        * loader/DocumentLoadTiming.cpp:
        (WebCore::DocumentLoadTiming::setNavigationStart):
        * loader/DocumentLoadTiming.h:
         Deleted unused setNavigationStart function.
        * page/Performance.idl:
        Updated spec URL.
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::domainLookupStart):
        (WebCore::PerformanceResourceTiming::domainLookupEnd):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::secureConnectionStart):
        (WebCore::PerformanceResourceTiming::responseEnd):
        Updated ResourceLoadTiming member variable names.
        (WebCore::PerformanceResourceTiming::responseStart):
        * page/PerformanceResourceTiming.h:
        * page/PerformanceResourceTiming.idl:
        Deleted responseStart because it is not in the spec.
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::secureConnectionStart):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::responseStart):
        Updated ResourceLoadTiming member variable names.
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute):
        Use navigationStart as base for resource load times.
        * page/PerformanceTiming.idl:
        Updated spec URL.
        * platform/network/HTTPParsers.h:
        Removed unused class declarations.
        * platform/network/ResourceHandle.h:
        Moved soup request time from ResourceLoadTiming to ResourceHandle.
        * platform/network/ResourceLoadTiming.cpp: Removed.
        * platform/network/ResourceLoadTiming.h:
        (WebCore::ResourceLoadTiming::deepCopy):
        (WebCore::ResourceLoadTiming::operator==):
        (WebCore::ResourceLoadTiming::ResourceLoadTiming):
        Updated ResourceLoadTiming member variable names.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        Collect timing data.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        Save timing data to a ResourceLoadTiming on the ResourceResponse.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::restartedCallback):
        (WebCore::milisecondsSinceRequest):
        (WebCore::ResourceHandle::didStartRequest):
        (WebCore::networkEventCallback):
        (WebCore::createSoupMessageForHandleAndRequest):
        (WebCore::ResourceHandle::sendPendingRequest):
        Updated ResourceLoadTiming member variable names.
        (WebCore::wroteBodyCallback): Deleted.

2014-05-12  Dirk Schulze  <krit@webkit.org>

        SVG outline property is broken and inefficient
        https://bugs.webkit.org/show_bug.cgi?id=113666

        Reviewed by Dean Jackson.

        Patch by Erik Dahlström backported from Blink.

        "[SVG2] css 'outline' property should apply to svg elements 

        The 'outline' property was only partially working in SVG before
        this patch, this makes it work on text and text content child
        elements too. 

        This makes SVG render the outlines as part of the foreground paint
        phase. 

        Partly based on Florin Malita's webkit patch https://bugs.webkit.org/show_bug.cgi?id=113666#c12."

        Tests: svg/custom/outline-stacking-expected.svg
               svg/custom/outline-stacking.svg
               svg/custom/rgba-color-outline.svg
               svg/text/text-outline-expected.svg
               svg/text/text-outline-rgba.html
               svg/text/text-outline.html
               svg/text/textpath-outline-expected.svg
               svg/text/textpath-outline.svg
               svg/text/tspan-multiple-outline.svg
               svg/text/tspan-outline-2-expected.svg
               svg/text/tspan-outline-2.svg
               svg/text/tspan-outline-expected.svg
               svg/text/tspan-outline.html

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint): Draw outline in forground
            paint phase.
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint): Draw outline in forground
            paint phase.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced): Pass paint offset.
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::paint): Draw outline in forground
            paint phase.
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint): Draw outline in forground
            paint phase.
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint): Pass paint offset.
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint): Draw outline in forground
            paint phase.
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint): Pass paint offset.

2014-05-12  Beth Dakin  <bdakin@apple.com>

        Layer for bottom overhang area needs to be offset by the topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=132835
        -and corresponding-
        <rdar://problem/16641115>

        Reviewed by Simon Fraser.

        Push this layer down by the topContentInset in addition to the root layer height, 
        footer height, and header height.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):

2014-05-09  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION (r167818): editing/inserting/typing-space-to-trigger-smart-link.html fails on WebKit1 bots

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

        Reverts the previous workaround in favor of a more specific fix for the
        null dereference.

        Reviewed by Darin Adler.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        Check whether the run's start and end are still in the document, as
        removeConflictingInlineStyleFromRun() may have removed them.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply):
        Reverted previous workaround.
        (WebCore::ApplyEditCommand::ReentrancyGuard::isRecursiveCall): Deleted.
        (WebCore::ApplyEditCommand::ReentrancyGuard::Scope::Scope): Deleted.
        (WebCore::ApplyEditCommand::ReentrancyGuard::Scope::~Scope): Deleted.

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

        Clean up CrossThreadTask
        https://bugs.webkit.org/show_bug.cgi?id=132800

        Reviewed by Darin Adler.

        Remove the createCallbackTask overloads and the related CrossThreadTask helper classes.

        Instead, have one simple CrossThreadTask class that derives from ScriptExecutionContext::Task.
        Its templated constructor takes in the method and the variadic pack of parameters. The cross-thread
        copies of the parameters are then bound to that method and the resulting bind expression is used to
        initialize the base class. The bind expression is constructed with a placeholder for the
        ScriptExecutionContext* parameter that's provided through ScriptExecutionContext::Task::performTask().

        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
        * dom/CrossThreadTask.h:
        (WebCore::CrossThreadTask::CrossThreadTask):
        (WebCore::CrossThreadTask1::CrossThreadTask1): Deleted.
        (WebCore::CrossThreadTask1::performTask): Deleted.
        (WebCore::CrossThreadTask2::CrossThreadTask2): Deleted.
        (WebCore::CrossThreadTask2::performTask): Deleted.
        (WebCore::CrossThreadTask3::CrossThreadTask3): Deleted.
        (WebCore::CrossThreadTask3::performTask): Deleted.
        (WebCore::CrossThreadTask4::CrossThreadTask4): Deleted.
        (WebCore::CrossThreadTask4::performTask): Deleted.
        (WebCore::CrossThreadTask5::CrossThreadTask5): Deleted.
        (WebCore::CrossThreadTask5::performTask): Deleted.
        (WebCore::CrossThreadTask6::CrossThreadTask6): Deleted.
        (WebCore::CrossThreadTask6::performTask): Deleted.
        (WebCore::CrossThreadTask7::CrossThreadTask7): Deleted.
        (WebCore::CrossThreadTask7::performTask): Deleted.
        (WebCore::CrossThreadTask8::CrossThreadTask8): Deleted.
        (WebCore::CrossThreadTask8::performTask): Deleted.
        (WebCore::createCallbackTask): Deleted.
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::abort):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
        * loader/WorkerThreadableLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeRequestFromCache):
        (WebCore::MemoryCache::removeRequestFromSessionCaches):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
        (WebCore::WorkerMessagingProxy::connectToInspector):
        (WebCore::WorkerMessagingProxy::disconnectFromInspector):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):

2014-05-12  Alex Christensen  <achristensen@webkit.org>

        Implement EXT_shader_texture_lod in WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=128985
        <rdar://problem/16111396>

        Based on Chromium patch by bajones@chromium.org.
        https://src.chromium.org/viewvc/blink?revision=171465&view=revision

        Reviewed by Dean Jackson.

        Test: webgl/conformance/extensions/ext-shader-texture-lod.html
        
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Added new EXTShaderTextureLOD files.
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        Added EXTShaderTextureLOD.
        * html/canvas/EXTShaderTextureLOD.cpp: Added.
        (WebCore::EXTShaderTextureLOD::EXTShaderTextureLOD):
        (WebCore::EXTShaderTextureLOD::~EXTShaderTextureLOD):
        (WebCore::EXTShaderTextureLOD::getName):
        * html/canvas/EXTShaderTextureLOD.h: Added.
        * html/canvas/EXTShaderTextureLOD.idl: Added.
        * html/canvas/WebGLExtension.h:
        Added EXTShaderTextureLODName.
        * html/canvas/WebGLObject.cpp:
        Removed unused inclusion of EXTTextureFilterAnisotropic.h.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        Added EXT_shader_texture_lod.
        * html/canvas/WebGLRenderingContext.h:
        Added a EXTShaderTextureLOD member variable.

2014-05-12  Martin Hock  <mhock@apple.com>

        Disallow drag and drop of non-displayable resources.
        https://bugs.webkit.org/show_bug.cgi?id=132745
        <rdar://problem/10562662>

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/security/drag-drop-local-file.html

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2014-05-12  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        WinCairo buildfix after r168611
        https://bugs.webkit.org/show_bug.cgi?id=132825

        Reviewed by Darin Adler.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::downloadThread):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::didReceiveData):

2014-05-12  Antti Koivisto  <antti@apple.com>

        REGRESSION (r159560): Text clips on tile border if line-height < font-size
        https://bugs.webkit.org/show_bug.cgi?id=132822

        Reviewed by Andreas Kling.
        
        The first line of simple line layout run range was miscomputed.

        Test: fast/text/simple-lines-range-low-line-height.html

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        
            Lines may overlap if line-height < font-size. Apply different adjustment when searching for range begin
            so that overflowing earlier lines are taken into account.

        (WebCore::SimpleLineLayout::RunResolver::rangeForRect):

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

        Invalid information remaining in lineToRegion map of RenderFlowThread.
        https://bugs.webkit.org/show_bug.cgi?id=132690

        Reviewed by Antti Koivisto.

        Test: fast/multicol/newmulticol/lines-region-map-crash.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::deleteLines):
        * rendering/RenderFlowThread.h:

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

        Clean up MainThreadTask
        https://bugs.webkit.org/show_bug.cgi?id=132799

        Reviewed by Darin Adler.

        Only have one simple MainThreadTask class that derives from std::function<void ()>.
        Its templated constructor takes in the method and a variadic pack of parameters.
        The cross-thread copies of the parameter are then bound to the given method through
        std::bind(), with the resulting bind expression used to initialize the base
        std::function<void ()> class.

        The WebCore::callOnMainThread() functions and the helper classes are removed in favor
        of passing MainThreadTask rvalues directly to WTF::callOnMainThread().

        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::startOnFileThread):
        (WebCore::AsyncFileStream::stopOnFileThread):
        (WebCore::AsyncFileStream::getSizeOnFileThread):
        (WebCore::AsyncFileStream::openForReadOnFileThread):
        (WebCore::AsyncFileStream::openForWriteOnFileThread):
        (WebCore::AsyncFileStream::readOnFileThread):
        (WebCore::AsyncFileStream::writeOnFileThread):
        (WebCore::AsyncFileStream::truncateOnFileThread):
        * platform/MainThreadTask.h:
        (WebCore::MainThreadTask::MainThreadTask):
        (WebCore::MainThreadTaskBase::MainThreadTaskBase): Deleted.
        (WebCore::MainThreadTaskBase::~MainThreadTaskBase): Deleted.
        (WebCore::MainThreadTask1::create): Deleted.
        (WebCore::MainThreadTask1::MainThreadTask1): Deleted.
        (WebCore::MainThreadTask2::create): Deleted.
        (WebCore::MainThreadTask2::MainThreadTask2): Deleted.
        (WebCore::MainThreadTask3::create): Deleted.
        (WebCore::MainThreadTask3::MainThreadTask3): Deleted.
        (WebCore::MainThreadTask4::create): Deleted.
        (WebCore::MainThreadTask4::MainThreadTask4): Deleted.
        (WebCore::MainThreadTask5::create): Deleted.
        (WebCore::MainThreadTask5::MainThreadTask5): Deleted.
        (WebCore::MainThreadTask6::create): Deleted.
        (WebCore::MainThreadTask6::MainThreadTask6): Deleted.
        (WebCore::MainThreadTask7::create): Deleted.
        (WebCore::MainThreadTask7::MainThreadTask7): Deleted.
        (WebCore::MainThreadTask8::create): Deleted.
        (WebCore::MainThreadTask8::MainThreadTask8): Deleted.
        (WebCore::executeMainThreadTask): Deleted.
        (WebCore::callOnMainThread): Deleted.

2014-05-11  Zan Dobersek  <zdobersek@igalia.com>

        Simplify FileThread::Task usage
        https://bugs.webkit.org/show_bug.cgi?id=132798

        Reviewed by Darin Adler.

        Remove the createFileThreadTask functions and the related FileThreadTask helper classes.

        Instead, the FileThread::Task class now has a templated constructor that takes in a pointer
        to the object instance, a method, and a variadic pack of parameters. The pointer and the
        cross-thread copies of all the parameters are then bound to the given method through std::bind().

        Instead of createFileThreadTask, std::make_unique<>() should be used to construct unique pointers
        that wrap FileThread::Task objects.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::create):
        (WebCore::AsyncFileStream::stop):
        (WebCore::AsyncFileStream::getSize):
        (WebCore::AsyncFileStream::openForRead):
        (WebCore::AsyncFileStream::openForWrite):
        (WebCore::AsyncFileStream::close):
        (WebCore::AsyncFileStream::read):
        (WebCore::AsyncFileStream::write):
        (WebCore::AsyncFileStream::truncate):
        * fileapi/FileThread.h:
        (WebCore::FileThread::Task::Task):
        (WebCore::FileThread::Task::performTask):
        (WebCore::FileThread::Task::~Task): Deleted.
        * fileapi/FileThreadTask.h: Removed.

2014-05-11  Benjamin Poulain  <benjamin@webkit.org>

        Do not create a temporary string to append the SVGLength's unit
        https://bugs.webkit.org/show_bug.cgi?id=132807

        Reviewed by Geoffrey Garen.

        * svg/SVGLength.cpp:
        (WebCore::lengthTypeToString):
        The caller just append the string to a number string. The function
        lengthTypeToString() was creating a new WTF::String from scratch,
        copied the characters to make a new string, and destroyed the WTF::String.

        Instead, just append the string literal.

2014-05-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: reduce cost of computing backtracking height
        https://bugs.webkit.org/show_bug.cgi?id=132546

        Reviewed by Benjamin Poulain.

        Because compiler previously compute backtracking height for
        previous child fragment, by leveraging this, we can limit the
        `maxPrefixSize` for `computeBacktrackingHeightFromDescendant`.

        For example, consider selector "c>a>b>d>a>b e"'s descendant chain,
        "c>a>b>d>a>b".

        At the <a> position, we have matching pattern [b, a, d, b, a] and
        calculate the backtracking height by following method.

        pattern:    [b, a, d, b, a]
        candidate0:    [b, a, d, b]  => Not matched.
        candidate1:       [b, a, d]  => Not matched.
        candidate2:          [b, a]  => Matched against the pattern.

        At this time, first candidate0's pattern size is `pattern.size() - 1`.
        And get backtracking height from descendant 3, that is
        `pattern.size() - candidate.size()`, `5 - 2`.

        And next, at the <c> position, we calcucate the backtracking height
        for this pattern.

        pattern:    [b, a, d, b, a, c]
        candidate0:    [b, a, d, b, a]  => Not matched.
        candidate1:       [b, a, d, b]  => Not matched.
        candidate2:          [b, a, d]  => Not matched.
        candidate3:             [b, a]  => Not matched.
        candidate4:                [b]  => Not matched.
        candidate5:                 []  => Matched against the pattern.

        Then, we get the backtracking height, which is 6 (6 - 0).
        However, in the above case, we already know that attempts from candidate0
        to candidate1 always fail, since parts of these are already tested at
        the <b> position trial and we know they don't match.

        So in this case, we should start this computation from candidate2,
        such as,

        pattern:    [b, a, d, b, a, c]
        candidate2:          [b, a, d]  => Not matched.
        candidate3:             [b, a]  => Not matched.
        candidate4:                [b]  => Not matched.
        candidate5:                 []  => Matched against the pattern.

        We can start computation with candidate size
        `pattern.size() - previousChildFragmentBacktrackingHeight`.
        In this example, `pattern.size()` is 6 and
        `previousChildFragmentBacktrackingHeight` is 3, so candidate size is
        3, that is candidate2.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::computeBacktrackingStartHeightFromDescendant):
        (WebCore::SelectorCompiler::computeBacktrackingHeightFromDescendant):

2014-05-11  Beth Dakin  <bdakin@apple.com>

        Headers and footers are not positioned correctly with topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=132787
        -and corresponding-
        <rdar://problem/16641115>

        Reviewed by Tim Horton.

        Headers and footers need to take the inset into account, and they also need to 
        factor in the fact that the root layer moves around now too.

        The existing yPositionForRootContentLayer() is actually the right calculation for 
        the header layer. The root content layer wants that value, but pushed down by the 
        header height. Now there are static functions for both of them and the footer to 
        avoid duplicated code in the three spots where we need this information.
        * page/FrameView.cpp:
        (WebCore::FrameView::yPositionForHeaderLayer):
        (WebCore::FrameView::yPositionForRootContentLayer):
        (WebCore::FrameView::yPositionForFooterLayer):
        * page/FrameView.h:

        Use the static functions to compute the layer positions.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):

        How did headers ever work with this bug?? I don’t know. We need to return that 
        layer.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::headerLayerForFrameView):

        Use the static functions to compute the layer positions.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):

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

        Subpixel rendering[iOS]: <select> decoration is misaligned when the renderer is on subpixel position.
        https://bugs.webkit.org/show_bug.cgi?id=132779
        <rdar://problem/16631071>

        Reviewed by Simon Fraser.

        Push <select> theme decoration's rect to device pixel position to ensure
        that the theme bounds are aligned with the renderer's bounds. (in painting terms)
        However, as the decoration code paints multiple items, they all need to use snapped 
        final coordinates for painting : tracked here https://bugs.webkit.org/show_bug.cgi?id=132780
        This patch also changes the padding values for <select> [iOS] to compensate for the integer
        truncation that happened before subpixel. 

        Not testable.

        * css/html.css:
        (select):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMenuListButtonDecorations):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMenuListButtonDecorations):
        * platform/gtk/RenderThemeGtk.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMenuListButtonDecorations):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonDecorations):
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButtonDecorations):
        * rendering/RenderThemeWin.h:

2014-05-11  Zan Dobersek  <zdobersek@igalia.com>

        Move Source/WebCore/workers/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=132401

        Reviewed by Darin Adler.

        Replace uses of OwnPtr and PassOwnPtr in code under Source/WebCore/workers (and related places)
        with std::unique_ptr.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::setTimeout):
        (WebCore::JSWorkerGlobalScope::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        (WebCore::DOMTimer::didStop):
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::setInterval):
        * page/DOMWindow.h:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::setInterval):
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::clearScript):
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        * workers/WorkerRunLoop.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThreadStartupData::create): Deleted.
        * workers/WorkerThread.h:

2014-05-09  Myles C. Maxfield  <litherum@gmail.com>

        [Mac] [iOS] Underlines are too low
        https://bugs.webkit.org/show_bug.cgi?id=132770

        Reviewed by Darin Adler.

        computeUnderlineOffset() inside InlineTextBox.cpp lowers underlines from text
        baseline by a value that is proportional to the font size. However, this
        lowering was done a second time in
        GraphicsContext::computeLineBoundsAndAntialiasingModeForText(). This patch
        removes this second, platform-dependent lowering.

        This duplication was caused by merging iOS into open source, where iOS used
        the GraphicsContext approach and open source used the InlineTextBox approach.

        Covered by fast/css3-text/css3-text-decoration/text-decoration-thickness.html.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::computeLineBoundsAndAntialiasingModeForText): Remove
        redundant lowering code
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration): Clean up textDecorationThickness
        variable

2014-05-11  Antti Koivisto  <antti@apple.com>

        Text with simple line layout not getting pushed below float when there is not enough space for it
        https://bugs.webkit.org/show_bug.cgi?id=126991

        Reviewed by Andreas Kling.

        Tests: fast/text/simple-lines-intruding-wide-float-dynamic.html
               fast/text/simple-lines-intruding-wide-float.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::markLinesDirtyInBlockRange):
        
            Invalidate the line layout path when floats change. We need to check SimpleLineLayout::canUseFor again as
            intruding floats may make this flow ineligible to use the path.

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::floatingObjectSet):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Test the top positions of all floats for case that would push text below the float instead of just testing 
            the first line. We may have floats in the middle of the paragraph too.

2014-05-11  peavo@outlook.com  <peavo@outlook.com>

        WinCairo crashes on acid3 test
        https://bugs.webkit.org/show_bug.cgi?id=131364

        Reviewed by Brent Fulgham.

        When the 304 (Not-modified) response is received, the Curl backend should look up the cached response,
        and call the client method didReceiveResponse with the cached response, instead of the 304 response.
        Otherwise the response will contain an empty MIME type, which causes the request to be cancelled, and the client deleted.
        When the Curl cache manager then accesses the client afterwards, it is deleted, and we crash.

        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::didReceiveResponse): Return early if request is cancelled.
        (WebCore::CurlCacheManager::getCachedResponse): Added method to get cached response.
        * platform/network/curl/CurlCacheManager.h: Ditto.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback): When 304 response is received, look up cached response, and use it.

2014-05-10  Tim Horton  <timothy_horton@apple.com>

        [WKWebView _updateScrollViewBackground] churns UI-and-CGColors while repainting
        https://bugs.webkit.org/show_bug.cgi?id=132793
        <rdar://problem/16877870>

        Reviewed by Dan Bernstein.

        * WebCore.exp.in:
        Export a Color convenience function.

2014-05-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r168578.
        https://bugs.webkit.org/show_bug.cgi?id=132789

        Speculative rollout since this appears to break PLT3.
        (Requested by kling on #webkit).

        Reverted changeset:

        "Move Source/WebCore/workers/ code to std::unique_ptr"
        https://bugs.webkit.org/show_bug.cgi?id=132401
        http://trac.webkit.org/changeset/168578

2014-05-10  Darin Adler  <darin@apple.com>

        REGRESSION (r166853): fast/preloader/document-write.html is very flaky
        https://bugs.webkit.org/show_bug.cgi?id=130942

        Reviewed by Anders Carlsson.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::suspendMemoryCacheClientCalls): Use a RefPtr to the main
        frame as a weak pointer to a Page that will work unless the page is destroyed.
        The old code tried to do it with a RefPtr to a document, but as the FIXME
        points out, that won't work if the document is disassociated with its frame.

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

        Block exceptions when trying to convert attributed strings to RTF and RTFD
        https://bugs.webkit.org/show_bug.cgi?id=132778
        <rdar://problem/16675805>

        Reviewed by Darin Adler.

        When the iOS WebHTMLConverter was upstreamed, converting some attributed strings to RTF and RTFD
        started throwing Objective-C exceptions (see <rdar://problem/16876920>).
        
        In WebKit2, we now crash on unhandled exceptions so work around that crash by adding exception blocking macros.

        * editing/ios/EditorIOS.mm:
        (WebCore::dataInRTFDFormat):
        (WebCore::dataInRTFFormat):
        * editing/mac/EditorMac.mm:
        (WebCore::dataInRTFDFormat):
        (WebCore::dataInRTFFormat):

2014-05-10  Zan Dobersek  <zdobersek@igalia.com>

        Move Source/WebCore/workers/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=132401

        Reviewed by Andreas Kling.

        Replace uses of OwnPtr and PassOwnPtr in code under Source/WebCore/workers (and related places)
        with std::unique_ptr.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::setTimeout):
        (WebCore::JSWorkerGlobalScope::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        (WebCore::DOMTimer::didStop):
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::setInterval):
        * page/DOMWindow.h:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::setInterval):
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::clearScript):
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        * workers/WorkerRunLoop.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThreadStartupData::create): Deleted.
        * workers/WorkerThread.h:

2014-05-09  Dean Jackson  <dino@apple.com>

        -webkit-filter prevents rendering at retina scale
        https://bugs.webkit.org/show_bug.cgi?id=93471

        Reviewed by Dirk Schulze.

        Implement 2x support for filters that go through
        the -webkit-filter property. This includes all
        shorthand filters, and any referenced SVG-style filters
        (as long as they use only the supported subset of
        operations - basically the same as is exposed for
        the shorthands).

        Tests: fast/hidpi/filters-blur.html
               fast/hidpi/filters-hue-rotate.html
               fast/hidpi/filters-invert.html
               fast/hidpi/filters-multiple.html
               fast/hidpi/filters-reference.html
               fast/hidpi/filters-shadow.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData): Scale the source rectangle if the method was
        called using LogicalCoordinates.
        (WebCore::ImageBuffer::getPremultipliedImageData): Ditto.
        (WebCore::ImageBuffer::putByteArray): Ditto.

        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware): Make sure to scale the blur radius by the filter
        resolution, and call the byte-array methods with the native coordinate system.
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize): Fix typo.
        (WebCore::FEGaussianBlur::platformApplySoftware): Scale the kernel and paint rectangles
        by the filter scale.

        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::Filter): Initialise the filter scale.
        (WebCore::Filter::filterScale): New property which reflects the mapping between logical pixels
        and device pixels.
        (WebCore::Filter::setFilterScale):

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::asImageBuffer): Make sure buffer creation takes scale into account.
        (WebCore::FilterEffect::asUnmultipliedImage): Ditto.
        (WebCore::FilterEffect::asPremultipliedImage): Ditto.
        (WebCore::FilterEffect::copyImageBytes): Scale any incoming regions if they are talking about
        device pixels rather than logical pixels.
        (WebCore::FilterEffect::copyUnmultipliedImage): Ditto.
        (WebCore::FilterEffect::copyPremultipliedImage): Ditto.
        (WebCore::FilterEffect::createImageBufferResult): Take scale into account when creating byte array.
        (WebCore::FilterEffect::createUnmultipliedImageResult): Ditto.
        (WebCore::FilterEffect::createPremultipliedImageResult): Ditto.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded): Pass filter scale into buffer creation.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer): Make sure to set the filter scale to
        the device scale factor, and notice if we ever change scales.

2014-05-10  Praveen R Jadhav  <praveen.j@samsung.com>

        [MediaStream] Rename NavigatorMediaStream as NavigatorUserMedia.
        https://bugs.webkit.org/show_bug.cgi?id=132734

        Reviewed by Eric Carlson.

        Spec: http://www.w3.org/TR/mediacapture-streams/#navigatorusermedia

        This patch replaces 'NavigatorMediaStream' with 'NavigatorUserMedia'
        throughout the code to be consistent with W3C specifications.
        Test cases remain the same as 'Navigator' implies 'NavigatorUserMedia'.

        * CMakeLists.txt: Compiles NavigatorUserMedia.cpp
        * DerivedSources.make: Compiles NavigatorUserMedia.idl
        * Modules/mediastream/NavigatorMediaStream.cpp: Removed.
        * Modules/mediastream/NavigatorMediaStream.h: Removed.
        * Modules/mediastream/NavigatorMediaStream.idl: Removed.
        * Modules/mediastream/NavigatorUserMedia.cpp: Added.
        (WebCore::NavigatorUserMedia::NavigatorUserMedia):
        (WebCore::NavigatorUserMedia::~NavigatorUserMedia):
        (WebCore::NavigatorUserMedia::webkitGetUserMedia):
        * Modules/mediastream/NavigatorUserMedia.h: Added.
        * Modules/mediastream/NavigatorUserMedia.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia): NavigatorUserMedia
        class is used instead of NavigatorMediaStream.

2014-05-10  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Empty rects should remain empty after integrally enclosing them.
        https://bugs.webkit.org/show_bug.cgi?id=132753
        <rdar://problem/16846801>

        Reviewed by Simon Fraser.

        This patch ensures that empty LayoutRects remain empty after converting to integral enclosing rect.
        LayoutRects with fractional position get expanded even if they are empty. This makes rectangle
        operations unreliable and can result in undesired side effects.

        No testable/covered by existing tests.

        * platform/graphics/LayoutRect.cpp:
        (WebCore::enclosingIntRect):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::integralEnclosingRectForSelection): Deleted.

2014-05-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Allow Remote Inspector to entitlement check UIProcess through WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=132409

        Reviewed by Timothy Hatcher.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::parentProcessIdentifier): Deleted.
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::parentProcessIdentifier): Deleted.
        * page/PageDebuggable.h:
        pid per debuggable is no longer needed.

2014-05-09  Dean Jackson  <dino@apple.com>

        [fullscreen] cursor should auto-hide when over video
        https://bugs.webkit.org/show_bug.cgi?id=132758

        Unreviewed followup based on test failure.

        * css/fullscreen.css: Append the previous rule - video children of fullscreen elements.

2014-05-09  Dean Jackson  <dino@apple.com>

        [fullscreen] cursor should auto-hide when over video
        https://bugs.webkit.org/show_bug.cgi?id=132758

        Reviewed by Brent Fulgham.

        Cursors were not auto-hiding over fullscreen video. There was
        a small error in the CSS we load for fullscreen content.

        * css/fullscreen.css: Don't hide when video is a child of the fullscreen element - hide when it *is* the fullscreen element.
        (video:-webkit-full-screen):
        (:-webkit-full-screen video:hover): Deleted.

2014-05-09  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering[iOS]: Top bar on apple.com/support jiggles when the swoosh animates.
        https://bugs.webkit.org/show_bug.cgi?id=132750
        <rdar://problem/16803281>

        Reviewed by Simon Fraser.

        This patch ensures that GraphicsLayer and RemoteLayerBackingStore have the same dimensions.
        
        Remove integral enclosing when we set the size on RemoteLayerBackingStore. It makes the layer's size
        different from the backingstore when the passed value is fractional.
        We scale and integral round this value to size the shareable bitmap later. Rounding ensures that
        the final size value matches what we calculated at GraphicsLayerCA::updateGeometry()

        Currently not testable.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::computePixelAlignment): include device scale factor to be able calculate the final content scale.
        * platform/graphics/ca/GraphicsLayerCA.h:

2014-05-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSDOMWindow should disable property caching after a certain point
        https://bugs.webkit.org/show_bug.cgi?id=132751

        Reviewed by Filip Pizlo.

        No new tests.

        This is part of removing HasImpureGetOwnPropertySlot from JSDOMWindow. After the lookup in the static 
        hash table for JSDOMWindow fails we want to disable property caching even if the code that follows thinks 
        that it has provided a cacheable value.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):

2014-05-09  Benjamin Poulain  <bpoulain@apple.com>

        Fix the export file after r168556

        * WebCore.exp.in: I forgot to fix the export file before landing.

2014-05-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Set up the resize events
        https://bugs.webkit.org/show_bug.cgi?id=132726

        Reviewed by Darin Adler and Simon Fraser.

        Let the WebKit2 layer override the size used for resize events.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::sizeForResizeEvent):
        (WebCore::FrameView::sendResizeEventIfNeeded):
        (WebCore::FrameView::setCustomSizeForResizeEvent):
        * page/FrameView.h:

2014-05-09  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r168518): Multiple tests for workers in blobs assert
        https://bugs.webkit.org/show_bug.cgi?id=132728

        Reviewed by Geoffrey Garen.

        Change File serialization to include name, so that we don't have to regenerate anything
        on a secondary thread after deserialization.

        Files and Blobs can't be stored persistently, because URLs are transient (IndexedDB
        has an explicit check, and fails if there were any blob URLs). API doesn't have the
        check, but given that anyone who tried to use these to serialize a File would fail,
        it seems OK to change the format.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::readFile):
        * fileapi/File.cpp:
        (WebCore::File::File):
        * fileapi/File.h:

2014-05-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSDOMWindow should have a WatchpointSet to fire on window close
        https://bugs.webkit.org/show_bug.cgi?id=132721

        Reviewed by Filip Pizlo.

        No new tests.

        This patch allows us to reset the inline caches that assumed they could skip 
        the first part of JSDOMWindow::getOwnPropertySlot that checks if the window has 
        been closed. This is part of getting rid of HasImpureGetOwnPropertySlot on JSDOMWindow.

        JSDOMWindowBase now has a WatchpointSet that the underlying DOMWindow fires when its
        frame is cleared. In getOwnPropertySlot, we now pass this WatchpointSet to PropertySlot
        which will shepherd it back up to the code that generates the inline cache (and the 
        Watchpoint for clearing it).

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::fireFrameClearedWatchpointsForWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::frameDestroyed):

2014-05-09  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        ASSERTION FAILED: object->style()->overflowX() == object->style()->overflowY()
        https://bugs.webkit.org/show_bug.cgi?id=121682

        Reviewed by Dirk Schulze.

        Add more overflow freedom to the SVG element:
        -overflow-x and overflow-y for controlling each scrollbar independently is now supported
        -overflow:scroll will display scrollbars regardless of the svg overflowing or not (as required by CSS)
        -overflow:hidden will cause overflow to be clipped away and scrollbars to be hidden

        Merged from Blink r172126 by <ed@opera.com>

        Tests: svg/W3C-SVG-1.1-SE/painting-marker-05-f.svg
               svg/W3C-SVG-1.1-SE/painting-marker-06-f.svg
               svg/animations/animate-viewport-overflow-2.html
               svg/animations/animate-viewport-overflow.html
               svg/in-html/overflow-repaint.html
               svg/in-html/overflow-svg-root-attr.html
               svg/in-html/overflow-svg-root-style.html
               svg/in-html/overflow-svg-root.html
               svg/overflow/overflow-on-outermost-svg-element-horizontal-auto.svg
               svg/overflow/overflow-on-outermost-svg-element-vertical-auto.svg
               svg/overflow/overflow-scroll-on-outermost-svg-element.svg
               svg/overflow/overflow-x-hidden-on-outermost-svg-element-expected.svg
               svg/overflow/overflow-x-hidden-on-outermost-svg-element.svg
               svg/overflow/overflow-y-hidden-on-outermost-svg-element-expected.svg
               svg/overflow/overflow-y-hidden-on-outermost-svg-element.svg

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::shouldApplyViewportClip):
        (WebCore::RenderSVGRoot::paintReplaced):
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::isOverflowHidden):

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

        [MSE][Mac] Destroy the AVStreamDataParser when the SourceBuffer is removed from its MediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=132710

        Reviewed by Eric Carlson.

        The AVStreamDataParser should be destroyed when the SourceBuffer is removed, so that subsequent
        SourceBuffers can utilize resources released by the parser on destruction.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener invalidate]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):  Protect against _parent being invalidated.
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC): Call destroyParser();.
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::destroyParser): Call -[WebAVStreamDataParserListener invalidate].

2014-05-09  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] 1-2% performance regression in html5-full-render after r168286
        https://bugs.webkit.org/show_bug.cgi?id=132672

        Reviewed by Mihnea Ovidenie.

        The patch optimizes the search of regions when there's a single region in the chain.
        There's no need to execute advanced search logic, we can directly return that region.

        Tests: No function change, no tests.

        * rendering/RenderBlock.cpp:
        (WebCore::canComputeRegionRangeForBox):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        (WebCore::RenderFlowThread::hasCachedRegionRangeForBox): Renamed from hasRegionRangeForBox to
        better suggest what the function does.
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        (WebCore::RenderFlowThread::hasRegionRangeForBox): Deleted.
        * rendering/RenderFlowThread.h:

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

        [EME] Call suspendIfNeeded() in the MediaKeySession create() method to avoid an ASSERT.
        https://bugs.webkit.org/show_bug.cgi?id=132712

        Reviewed by Eric Carlson.

        All ActiveDOMObject subclasses must call suspendIfNeeded() immediately after creation.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):

2014-05-09  Zalan Bujtas  <zalan@apple.com>

        Unreviewed. Another attempt to fix Windows build after r168528.

        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):

2014-05-09  Zalan Bujtas  <zalan@apple.com>

        Unreviewed build fix for Win after r168528.

        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):

2014-05-09  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r168095): 1-pixel gap between adjacent selection inlines
        https://bugs.webkit.org/show_bug.cgi?id=132474
        <rdar://problem/16797394>

        Reviewed by David Hyatt.

        This patch changes text selection rectangle calculation from integral to device
        pixel snapping. It ensures that selection rect painting matches box boundaries for inline elements.
        Directional rounding (horizontal only atm) is moved out from Font class and now accessible
        to all the painting code. RTL snapping strategy is changed from floor to round to match ltr behavior.
        However this patch does not address all the integral snapping across inline elements. There are
        a few places where we still calculate enclosing rects where snapping is sufficient.

        Test: fast/inline/hidpi-pixel-gap-between-adjacent-selection-inlines.html

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel): added fudge factor to change rounding direction as directed.
        * platform/graphics/Font.cpp:
        (WebCore::Font::adjustSelectionRectForText):
        (WebCore::Font::selectionRectForText): Deleted.
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::adjustSelectionRectForSimpleText): removed directional rounding.
        (WebCore::Font::selectionRectForSimpleText): Deleted.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawHighlightForText): Deleted.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/LayoutPoint.h:
        (WebCore::roundedForPainting):
        * platform/graphics/LayoutRect.h:
        (WebCore::directionalPixelSnappedForPainting): Snap top right corner for rtl direction.
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::selectionRectForComplexText): Deleted.
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText): removed directional rounding.
        (WebCore::Font::selectionRectForComplexText): Deleted.
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::adjustSelectionRectForComplexText):
        (WebCore::Font::selectionRectForComplexText): Deleted.
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::integralEnclosingRectForSelection): helper to address enclosing empty rect problem.
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::selectionRectForTextFragment):

2014-05-09  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        ASSERTION FAILED: !m_code || m_code == defaultExceptionCode
        in WebCore::constructQualifiedName
        https://bugs.webkit.org/show_bug.cgi?id=132343

        'Remove bad assertion in SVGSMILElement's constructQualifiedName() by passing
        IGNORE_EXCEPTION instead ASSERT_NO_EXCEPTION to Document::parseQualifiedName().
        The constructQualifiedName() function handles parseQualifiedName() failures
        propertly by returning early so there is no reason to assert on parsing
        failures.'

        Blink merge: http://src.chromium.org/viewvc/blink?view=revision&revision=173564
        Based on the patch made by Christophe Dumez <ch.dumez@samsung.com>.

        Reviewed by Dirk Schulze.

        Test: svg/custom/bad-attributeName-crash.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::constructQualifiedName):

2014-05-08  Brent Fulgham  <bfulgham@apple.com>

        Multiple (stacked) cues when shuttling through video while playing closed captions
        https://bugs.webkit.org/show_bug.cgi?id=132715
        <rdar://problem/16795782>

        Reviewed by Eric Carlson.

        Tests: media/track/track-in-band-cues-added-once.html

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue): Revise to use a relaxed time equality.
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::isEqual): Ditto.
        (WebCore::TextTrackCue::hasEquivalentStartTime): Added.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::startTimeVariance): Added.
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::isEqual): Do not call the VTTCue::isEqual method from
        this class, since cueType() will not equal VTTCue, and the equality will fail.

2014-05-08  Alexey Proskuryakov  <ap@apple.com>

        Automatically zip document bundles used via File API
        https://bugs.webkit.org/show_bug.cgi?id=132713
        <rdar://problem/13397892>

        Reviewed by Anders Carlsson.

        Tests: fast/files/filereader-zip-bundle.html
               http/tests/local/fileapi/upload-zip-bundle-as-blob.html

        * FileMac.mm: Added.
        (WebCore::File::shouldReplaceFile):
        (WebCore::File::computeNameAndContentTypeForReplacedFile):
        Added code that decides what to do with a bundle. We need this to happen in
        WebProcess, because HTML5 dropzone depends on this, it needs to know file type
        even before a File object can be created.

        * WebCore.exp.in: Export new functions.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * dom/DataTransfer.cpp: (WebCore::DataTransfer::hasFileOfType): Updated for File
        interface change.

        * fileapi/File.h:
        * fileapi/File.cpp:
        (WebCore::File::File):
        (WebCore::File::computeNameAndContentType):
        (WebCore::File::contentTypeForFile):
        (WebCore::File::contentTypeFromFilePathOrName): Deleted.
        Make it possible for a subclass to affect file name and content type calculation.

        * platform/network/BlobDataFileReference.cpp:
        (WebCore::BlobDataFileReference::BlobDataFileReference):
        (WebCore::BlobDataFileReference::~BlobDataFileReference):
        (WebCore::BlobDataFileReference::path):
        (WebCore::BlobDataFileReference::size):
        (WebCore::BlobDataFileReference::expectedModificationTime):
        (WebCore::BlobDataFileReference::startTrackingModifications):
        * platform/network/BlobDataFileReference.h:
        (WebCore::BlobDataFileReference::path): Deleted.
        (WebCore::BlobDataFileReference::BlobDataFileReference): Deleted.
        Use original or replaced file, as appropriate. 

        * platform/network/mac/BlobDataFileReferenceMac.mm: Added.
        (WebCore::BlobDataFileReference::generateReplacementFile): Implements generateReplacementFile().

        * platform/network/FormData.h: Added a FIXME.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::send): Always use Blob code path
        for blobs, don't unwrap them into a file path.

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

        Occasional crash under AsyncScrollingCoordinator::frameViewRootLayerDidChange() on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=132723

        Reviewed by Sam Weinig.
        
        Crash reports suggest that when we call AsyncScrollingCoordinator::frameViewRootLayerDidChange()
        from HistoryController::restoreScrollPositionAndViewState(), the FrameView may not have a 
        scrolling node ID, which suggests that either the FrameView doesn't have a RenderView,
        or compositing hasn't happened yet.
        
        So if we enter AsyncScrollingCoordinator::frameViewRootLayerDidChange()
        and the FrameView has no scrollLayerID, just return. We'll fix things up
        when compositing kicks in later.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):

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

        [iOS WK2] Bottom-relative position:fixed elements are misplaced on page load
        https://bugs.webkit.org/show_bug.cgi?id=132719
        <rdar://problem/16860837>

        Reviewed by Benjamin Poulain.

        Add a couple of functions, and sort.

        * WebCore.exp.in:

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

        [Mac, iOS] Add source application accounting to AVURLAsset.
        https://bugs.webkit.org/show_bug.cgi?id=132637

        Reviewed by Eric Carlson.

        Properly account for the application responisble for data loading by passing the source
        application identifier through to AVFoundation through AVURLAsset options.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::sourceApplicationIdentifier):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerSourceApplicationIdentifier):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        * platform/network/NetworkingContext.h:

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

        [MSE][Mac] Move AVStreamDataParser off-main-thread.
        https://bugs.webkit.org/show_bug.cgi?id=132698

        Reviewed by Eric Carlson.

        -[AVStreamDataParser appendStreamData:] can casue the main thread to hang when a
        large amount of media data is appended at once. Move the actual parsing of data
        to a background (synchronous) dispatch queue, and split SourceBuffer::appendBufferTimerFired
        into two functions, the latter of which will be called after the background queue
        completes.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired): Split into sourceBufferPrivateAppendComplete.
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Split from appendBufferTimerFired.
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/SourceBufferPrivateClient.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]): Re-dispatch to the
                web thread.
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]): Ditto.
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]): Ditto.
        (WebCore::globalDataParserQueue): Added.
        (WebCore::SourceBufferPrivateAVFObjC::append): Dispatch to the globalDataParserQueue.
        (WebCore::SourceBufferPrivateAVFObjC::appendCompleted): Added.
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::append): Adopt sourceBufferPrivateAppendComplete.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        Update SourceBufferPrivateGStreamer to match the new append return value:
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::append):
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h:

2014-05-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r168498.
        https://bugs.webkit.org/show_bug.cgi?id=132714

        broke Mavericks WK2 (Requested by litherum on #webkit).

        Reverted changeset:

        "http/tests/security/xss-DENIED-xsl-document-redirect.xml
        fails with NetworkProcess"
        https://bugs.webkit.org/show_bug.cgi?id=132523
        http://trac.webkit.org/changeset/168498

2014-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        http/tests/security/xss-DENIED-xsl-document-redirect.xml fails with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=132523

        Reviewed by Alexey Proskuryakov.

        We should not manufacture a response in the event of an error during a
        synchronous XHR. In addition, this test removes one place that is
        sensitive to such a manufactured response.

        Updates test expectations.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Do not
        manufacture a response
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Do not
        manufacture a response
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc): Only use the response's URL if no error
        occurred.

2014-05-08  Andreas Kling  <akling@apple.com>

        [iOS] WebKit should listen to critical memory warnings.
        <https://webkit.org/b/132704>
        <rdar://problem/16857112>

        Listen for DISPATCH_MEMORYSTATUS_PRESSURE_CRITICAL in addition to
        DISPATCH_MEMORYSTATUS_PRESSURE_WARN, since we may only get the critical
        notification on some systems.

        Reviewed by Gavin Barraclough.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

2014-05-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: InspectorDOMAgent::getAccessibilityPropertiesForNode should gracefully handle bad node
        https://bugs.webkit.org/show_bug.cgi?id=132697

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getAccessibilityPropertiesForNode):
        Gracefully handle no node.

2014-05-08  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build after r168476.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):

2014-05-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Shapes do not resolve dimensions specified in viewport units
        https://bugs.webkit.org/show_bug.cgi?id=124052

        Reviewed by Dirk Schulze.

        Viewport unit resolution doesn't work unless the RenderView is passed
        down into the floatValueForLength methods. All this does is plumb down
        a RenderView in all of these cases.

        Tests: css3/masking/clip-path-polygon-viewport-units.html
               fast/shapes/shape-outside-floats/shape-outside-floats-viewport-units.html

        * css/BasicShapeFunctions.cpp:
        (WebCore::floatValueForCenterCoordinate):
        * css/BasicShapeFunctions.h:
        * css/LengthFunctions.cpp:
        (WebCore::floatSizeForLengthSize):
        * css/LengthFunctions.h:
        * rendering/ClipPathOperation.h:
        (WebCore::ShapeClipPathOperation::pathForReferenceRect):
        (WebCore::BoxClipPathOperation::pathForReferenceRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computedShape):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::floatValueForRadiusInBox):
        (WebCore::BasicShapeCircle::path):
        (WebCore::BasicShapeEllipse::floatValueForRadiusInBox):
        (WebCore::BasicShapeEllipse::path):
        (WebCore::BasicShapePolygon::path):
        (WebCore::floatSizeForLengthSize):
        (WebCore::BasicShapeInset::path):
        * rendering/style/BasicShapes.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2014-05-08  Brent Fulgham  <bfulgham@apple.com>

        Cue display events may not be registered during page load.
        https://bugs.webkit.org/show_bug.cgi?id=132696
        <rdar://problem/16652874>

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleTextTrackAdd): Don't register
        for 'cuechange' events anymore.
        (Controller.prototype.handleTextTrackRemove): Ditto.
        (Controller.prototype.updateCaptionContainer): Reduce CSS
        churn by not adding/removing 'Hidden' class every time a
        new cue is processed. Only do this when transitioning
        track display state.
        (Controller.prototype.handleTextTrackCueChange): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateTextTrackDisplay): Call
        'updateTextTrackContainer' directory when processing cues,
        rather than trampolining through the JS layer.

2014-05-08  Alexey Proskuryakov  <ap@apple.com>

        Make BlobDataFileReference manage its sandbox extension
        https://bugs.webkit.org/show_bug.cgi?id=132689

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Export symbols that are now needed in WebKit2 to subclass BlobDataFileReference.

        * fileapi/ThreadableBlobRegistry.cpp: (WebCore::ThreadableBlobRegistry::registerFileBlobURL):
        * platform/network/BlobData.cpp: (WebCore::BlobData::appendFile):
        * platform/network/BlobData.h: (WebCore::BlobDataItem::BlobDataItem):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp: (WebCore::BlobRegistryImpl::registerFileBlobURL):
        * platform/network/BlobRegistryImpl.h:
        BlobRegistry now takes a BlobDataFileReference and not a path, so that WebKit2
        could pass objects that include sandbox extensions.

        * platform/network/BlobDataFileReference.h:
        * platform/network/BlobDataFileReference.cpp:
        (WebCore::BlobDataFileReference::~BlobDataFileReference): Added a virtual destructor.
        (WebCore::BlobDataFileReference::size): We now record the size and modification time right away, no need to lazily calculate them.
        (WebCore::BlobDataFileReference::expectedModificationTime): Ditto.
        (WebCore::BlobDataFileReference::startTrackingModifications): Record time and size
        (since it's a single call). However, size calculation will become complicated again soon.
        (WebCore::BlobDataFileReference::prepareForFileAccess): A hook for subclasses.
        (WebCore::BlobDataFileReference::revokeFileAccess): Ditto.
        (WebCore::BlobDataFileReference::computeFileSystemData): Deleted.

2014-05-08  Rik Cabanier  <cabanier@adobe.com>

        Add support for drawFocusIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=132584

        Reviewed by Dirk Schulze.

        The drawFocusIfNeeded API will draw a focus ring if the element that is passed
        in is focused and a child element of the canvas.

        Test: fast/canvas/draw-focus-if-needed.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeeded):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2014-05-08  Antti Koivisto  <antti@apple.com>

        [iOS WebKit2] Can't activate text fields on Facebook
        https://bugs.webkit.org/show_bug.cgi?id=132682

        Reviewed by Enrica Casucci.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):
        
            The isDocument() test here had reversed in the merge breaking content change observer callback.

2014-05-07  Sergio Villar Senin  <svillar@igalia.com>

        Replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed<T> in svg/
        https://bugs.webkit.org/show_bug.cgi?id=132647

        Reviewed by Darin Adler.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::isSupportedAttribute):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::isSupportedAttribute):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::isSupportedAttribute):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::sharedSVGLength):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isSupportedAttribute):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::isSupportedAttribute):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::isSupportedAttribute):
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::isSupportedAttribute):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::isSupportedAttribute):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::instancesForElement):
        (WebCore::SVGElement::childShouldCreateRenderer):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::isSupportedAttribute):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::isSupportedAttribute):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::isSupportedAttribute):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::isSupportedAttribute):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::isSupportedAttribute):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::isSupportedAttribute):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::isSupportedAttribute):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::isSupportedAttribute):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::isSupportedAttribute):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::isSupportedAttribute):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::isSupportedAttribute):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::isSupportedAttribute):
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::isSupportedAttribute):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::isSupportedAttribute):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::isSupportedAttribute):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::isSupportedAttribute):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::isSupportedAttribute):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::isSupportedAttribute):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::isSupportedAttribute):
        (WebCore::SVGFilterElement::childShouldCreateRenderer):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isSupportedAttribute):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::isSupportedAttribute):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::isSupportedAttribute):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::isSupportedAttribute):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::isSupportedAttribute):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::isSupportedAttribute):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::lengthModeForAnimatedLengthAttribute):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::isSupportedAttribute):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::isSupportedAttribute):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::isSupportedAttribute):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::isSupportedAttribute):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::isSupportedAttribute):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::isSupportedAttribute):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::isSupportedAttribute):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::isSupportedAttribute):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::isSupportedAttribute):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::isSupportedAttribute):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::isSupportedAttribute):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::isSupportedAttribute):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::isSupportedAttribute):
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::isSupportedAttribute):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::isSupportedAttribute):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::attributeToPropertyMap):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::textLengthAnimated):
        (WebCore::SVGTextContentElement::isSupportedAttribute):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::isSupportedAttribute):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::isSupportedAttribute):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::isSupportedAttribute):
        (WebCore::isDisallowedElement):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::isSupportedAttribute):

2014-05-08  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Replacing Unisolated with NotIsolated in variables and methods names
        https://bugs.webkit.org/show_bug.cgi?id=132677

        Reviewed by Dirk Schulze.

        No new tests required.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateAncestorChainHasBlendingDescendants):
        (WebCore::RenderLayer::dirtyAncestorChainHasBlendingDescendants):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        hasUnisolatedBlendingDescendants -> hasNotIsolatedBlendingDescendants
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::updateStackingContextsAfterStyleChange):
        * rendering/RenderLayer.h:
        m_hasUnisolatedBlendingDescendants -> m_hasNotIsolatedBlendingDescendants
        m_hasUnisolatedBlendingDescendantsStatusDirty -> m_hasNotIsolatedBlendingDescendantsStatusDirty
        hasUnisolatedBlendingDescendants() -> hasNotIsolatedBlendingDescendants()
        hasUnisolatedBlendingDescendantsStatusDirty() -> hasNotIsolatedBlendingDescendantsStatusDirty()
        m_hasUnisolatedCompositedBlendingDescendants -> m_hasNotIsolatedCompositedBlendingDescendants
        hasUnisolatedCompositedBlendingDescendants() -> hasNotIsolatedCompositedBlendingDescendants()
        setHasUnisolatedCompositedBlendingDescendants() -> setHasNotIsolatedCompositedBlendingDescendants
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        m_hasUnisolatedCompositedBlendingDescendants -> m_hasNotIsolatedCompositedBlendingDescendants
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2014-05-08  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Enable skipped http/tests/media/hls/video-controls-live-stream.html
        https://bugs.webkit.org/show_bug.cgi?id=132329

        Reviewed by Eric Carlson.

        GTK port needed to define what happened with live stream media
        controls. Now we disable and dim the timeline and tweak the
        timers.

        Test: http/tests/media/hls/video-controls-live-stream.html.

        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.configureControls): Moved logic from
        setControlsType and changed to use an early return.
        (ControllerGtk.prototype.reconnectControls): Redefined to just
        configure the controls.
        (ControllerGtk.prototype.handlePlay): If stream is live we don't
        activate the current time just in case.
        (ControllerGtk.prototype.updateDuration): Calls the superclass and
        sets timeline.max to 0.
        (ControllerGtk.prototype.setControlsType): Deleted.
        (ControllerGtk.prototype.setIsLive): Configures controls and
        disables the timeline if stream is live.
        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-timeline[disabled])
        (video::-webkit-media-controls-timeline[disabled]): Dimmed the
        timeline by setting opacity to 0.3.

2014-05-08  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Changing isolation CSS property should not trigger repaint in RenderStyle::changeRequiresLayerRepaint
        https://bugs.webkit.org/show_bug.cgi?id=131436

        Reviewed by Dirk Schulze.

        The isolation:isolate property will create a stacking context. This is done in
        StyleResolver::adjustRenderStyle where z-index is forced to 0.
        If the element is already a stacking context for any other reason,
        changing the isolation flag should not have any effect.

        Tests: css3/blending/repaint/blend-mode-turn-off-isolation-no-effect.html
               css3/blending/repaint/blend-mode-turn-off-isolation.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        do not request repaint if isolation has changed.

2014-05-08  Manuel Rego Casasnovas  <rego@igalia.com>

        REGRESSION (r167652): SelectionState is not set properly for non leaf objects in pages with regions
        https://bugs.webkit.org/show_bug.cgi?id=132493

        Reviewed by David Hyatt.

        Non selection leaf elements were not included in the selection ranges,
        that was causing that their selection state was not set properly and
        when one of the element was removed as it was marked as SelectionNone
        current selection was not removed.

        Due to this fix, the regression detected in bug #131982 arose again.
        Reverted changes from r167675 and reopened bug as previous fix was not
        right. Updated TestExpectations accordingly.

        Test: fast/regions/selection/crash-select-all.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::splitSelectionBetweenSubtrees): We need to include
        non selection leafs in the range, otherwise we won't be marking
        selection state of some elements properly.

2014-05-08  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Can't select content within the area of the floating box when clip-path is applied
        https://bugs.webkit.org/show_bug.cgi?id=131375

        Reviewed by Dirk Schulze.

        According to http://www.w3.org/TR/css-masking-1/, the clipped part of the element should
        not have pointer event dispatching. So add this logic to RenderBlock::nodeAtPoint. This
        fixes the bug as it disallows selection on any clipped parts.

        I implemented the proper selection for the various CSS box types and added testing
        for them. Also, I made and run performance tests for exposing mouse events over the
        clipped/non-clipped area, which results can be seen in bugzilla.

        Based on the patch made by Rob Buis <rob.buis@samsung.com>
        Blink revision: http://src.chromium.org/viewvc/blink?view=revision&revision=172619

        Tests: fast/masking/clip-path-selection.html
               fast/shapes/shape-outside-floats/shape-outside-clip-path-selection.html

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

2014-05-07  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Blending doesn't work if the parent stacking context is not a self painting layer
        https://bugs.webkit.org/show_bug.cgi?id=130891

        Reviewed by Dean Jackson.

        The stacking context layers having unisolated blending descendants should be able
        to create transparency layers or to become composited in order to restrict blending 
        content to accessing the information outside the current stacking context.
        Some layers are not self painting layers and these layers cannot crate transparency
        layers and cannot be composited, thus they are not able to isolate blending descendants
        when it's required.
        
        The solution in this patch is to make a layer isSelfPaintingLayer when
        it needs to isolate blending descendants (hasUnisolatedBlendingDescendants).

        Tests: css3/blending/blend-mode-isolation-accelerated-overflow-hidden.html
               css3/blending/blend-mode-isolation-overflow-hidden.html
               css3/blending/blend-mode-isolation-turn-off-self-painting-layer.html
               css3/blending/blend-mode-isolation-turn-off-self-painting-layer1.html
               css3/blending/blend-mode-isolation-turn-off-self-painting-layer2.html
               css3/blending/blend-mode-isolation-turn-on-self-painting-layer.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateAncestorChainHasBlendingDescendants):
        When hasUnisolatedBlendingDescendants is set we make sure that isSelfPaintingLayer flag is set too.
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        The flags might be read or changed while walking the descendants, so we don't want to reset
        them before traversing the tree.
        (WebCore::RenderLayer::shouldBeSelfPaintingLayer):
        Adding isolatesBlending() condition for a layer to be self painting.
        * rendering/RenderLayer.h:
        Removing ASSERT from hasUnisolatedBlendingDescendants(). It crashes in minibrowser
        and in layout tests when painting contents. Similar bugs on other flags: #71044, #71277.
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange):
        Telling ancestors that blend mode property has been removed from CSS when the layer for
        this element is going to be removed; styleChanged will not be called anymore.

2014-05-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Dragging text from one paragraph to another does not render as expected
        https://bugs.webkit.org/show_bug.cgi?id=132633

        Reviewed by Darin Adler and Ryosuke Niwa.

        When we are dragging and dropping into a content editable field, we detect
        if we are trying to put a <p> into an existing <p>, and if so, split the
        outer <p> and insert the new <p> as its sibling. However, the outer <p>
        might not be editable, so we don't want to do any splitting and inserting
        at that location.

        Test: editing/pasteboard/drag-drop-paragraph-crasher.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):

2014-05-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CoordinatedGraphics][WK2] Scale factor and scroll position is not being restored properly in a back/forward load
        https://bugs.webkit.org/show_bug.cgi?id=126022

        Reviewed by Benjamin Poulain.

        Original author : Thiago de Barros Lacerda, and finished by Gyuyoung Kim.

        When user is navigating back/forward to a page that has been scrolled and/or scaled, that page must be shown
        with its last scroll position and scale factor. However, when fixed layout was enabled with CoordinatedGraphics
        and TILED_BACKING_STORE, Page::setPageScaleFactor() doesn't send previous scroll position since r165652 and r165913.

        This patch allows the Page::setPageScaleFactor() send stored position to WK2 implementation by calling delegatedScrollRequested()
        directly when delegatesScrolling() is on.

        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor): TILED_BACKING_STORE and delegateScrolling are enabled, we pass new scroll position to WK2 though
        delegateScrolling is disabled.
        * platform/ScrollView.cpp: delegatedScrollRequested() call is moved from ScrollView::setScrollPosition() to Page::setPageScaleFactor().
        (WebCore::ScrollView::setScrollPosition): 

2014-05-07  Dean Jackson  <dino@apple.com>

        Using a fill pattern much larger than actual canvas reliably segfaults browser
        https://bugs.webkit.org/show_bug.cgi?id=132635

        Reviewed by Simon Fraser.

        Make sure that createPattern checks that the canvas it is about to use
        as a source is valid.

        Test: fast/canvas/pattern-too-large-to-create.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern): Check that the source canvas has
        an ok ImageBuffer.

2014-05-07  Pratik Solanki  <psolanki@apple.com>

        Use system defaults for hardware jpeg decoding
        https://bugs.webkit.org/show_bug.cgi?id=132661
        <rdar://problem/11348201>

        Reviewed by Tim Horton.

        Remove code that explicitly disabled hardware image decoding. Let the system decide what to do.

        * WebCore.exp.in:
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::acceleratedImageDecodingEnabled): Deleted.
        (WebCore::ImageSource::setAcceleratedImageDecodingEnabled): Deleted.
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::imageSourceOptions):

2014-05-07  Radu Stavila  <stavila@adobe.com>

        Use after free in WebCore::RenderObject::nextSibling / WebCore::RenderBoxModelObject::moveChildrenTo
        https://bugs.webkit.org/show_bug.cgi?id=132625

        Reviewed by David Hyatt.

        Fixed problem with dynamically inserting first letter elements.

        Test: fast/multicol/newmulticol/first-letter-create.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getFirstLetter):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildrenTo):

2014-05-07  Enrica Casucci  <enrica@apple.com>

        WK2: Programatic scroll requests during scroll or zoom animation to reveal focused element are ignored.
        https://bugs.webkit.org/show_bug.cgi?id=132657
        <rdar://problem/16468462>

        Reviewed by Benjamin Poulain.

        With the scrolling model we use on iOS, a programatic scroll
        request can be received while we are still animating to reveal
        the focused input element. The WebProcess is unaware that the
        scroll position is being changed in the UIProcess, and does not
        honor the scroll request from JavaScript.
        This is patch changes the behavior for clients using scroll delegates
        to always send the scroll request to the UIProcess without checking
        the current scroll position.

        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * platform/ScrollView.h:
        (WebCore::ScrollView::inProgrammaticScroll):

2014-05-07  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] REGRESSION: WK2 YouTube support
        https://bugs.webkit.org/show_bug.cgi?id=132568
        <rdar://problem/11464344>

        Reviewed by Darin Adler.

        Move the custom YouTube loader code out of the WebFrameLoaderClient into a
        PluginReplacement-based class.

        * Modules/plugins/PluginReplacement.h:
        (WebCore::PluginReplacement::supportsURL): New predicate so we can restrict
        use of a plugin to a particular category of URLs.
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement): Updated for new registrar signature.
        * Modules/plugins/YouTubePluginReplacement.h: Added.
        (WebCore::YouTubePluginReplacement::parentElement):
        * Modules/plugins/YouTubePluginReplacement.cpp: Added.
        (WebCore::YouTubePluginReplacement::registerPluginReplacement):
        (WebCore::YouTubePluginReplacement::create):
        (WebCore::YouTubePluginReplacement::supportsMimeType):
        (WebCore::YouTubePluginReplacement::supportsFileExtension):
        (WebCore::kit):
        (WebCore::YouTubePluginReplacement::YouTubePluginReplacement):
        (WebCore::YouTubePluginReplacement::createElementRenderer):
        (WebCore::objectForKey):
        (WebCore::YouTubePluginReplacement::installReplacement):
        (WebCore::createYouTubeURL):
        (WebCore::processAndCreateYouTubeURL):
        (WebCore::YouTubePluginReplacement::youTubeURL):
        * WebCore.exp.in: Add new export from WebCore.
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLPlugInElement.cpp:
        (WebCore::pluginReplacementForType): Update to also check that the URL is supported
        by the plugin.
        (WebCore::registeredPluginReplacements): Add new YouTubePluginReplacement to registry.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer): Remove custom YouTube code
        now that this logic is handled in the plugin replacement class.
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree): Deleted.
        * html/HTMLPlugInImageElement.h:
        * html/shadow/YouTubeEmbedShadowElement.cpp:
        (WebCore::YouTubeEmbedShadowElement::YouTubeEmbedShadowElement):
        (WebCore::YouTubeEmbedShadowElement::shadowPseudoId): Use correct pseudoID for the
        plugin replacement architecture.
        * html/shadow/YouTubeEmbedShadowElement.h:
        * platform/mac/WebCoreNSURLExtras.h:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::unescapedQueryValue): Moved from WebKit/Misc/WebNSURLExtras.
        (WebCore::queryKeysAndValues): Ditto.

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

        [iOS] Acclerated overflow-scrolling broken in WK1
        https://bugs.webkit.org/show_bug.cgi?id=132665
        <rdar://problem/16842909>

        Reviewed by Tim Horton.

        r168301 added a CALayer delegate to disable implicit animations,
        but for some layers we wrap them in UIViews (which are themselves
        layer delegates), so bad things happened.
        
        Fix by falling back to setting the null actions dictionary for
        layers with custom scrolling behavior.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::updateCustomBehavior):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateScrollingLayers):

2014-05-07  Jeremy Jones  <jeremyj@apple.com>

        HTMLMediaElement should exitFullscreen when view is removed from the window.
        https://bugs.webkit.org/show_bug.cgi?id=132506

        Reviewed by Tim Horton.

        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        Add -requestExitFullscreen.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController requestExitFullscreen]):
        Forward request onto WebVideoFullscreenModelMediaElement.

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::requestExitFullscreen):
        Add some protection here since this may be called when not in fullscreen.

2014-05-07  Dean Jackson  <dino@apple.com>

        Clean up the difference between painting focus rings and adding PDF annotations
        https://bugs.webkit.org/show_bug.cgi?id=132638

        Follow-up comments from Darin Adler.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline): Move "else if" to a separate "if" for clarity.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing): Don't guard against outlineIsAuto(). ASSERT instead.
        (WebCore::RenderObject::addPDFURLRect): Give "rect" variable a better name.
        (WebCore::RenderObject::paintOutline): Move "else if" to a separate "if" for clarity.

2014-05-07  Alexey Proskuryakov  <ap@apple.com>

        Make blob size computation lazy
        https://bugs.webkit.org/show_bug.cgi?id=132653

        Reviewed by Anders Carlsson.

        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::size):
        * fileapi/Blob.h:
        (WebCore::Blob::size): Deleted.
        * fileapi/File.cpp:
        (WebCore::File::size): Deleted.
        * fileapi/File.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerFileBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURLForSlice):
        (WebCore::ThreadableBlobRegistry::blobSize):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):
        (WebCore::unregisterBlobURLTask): Deleted.
        * fileapi/ThreadableBlobRegistry.h:
        * platform/network/BlobData.cpp:
        (WebCore::BlobData::appendData):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURLForSlice):
        * platform/network/BlobRegistryImpl.h:

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

        Add scrolling tree logging to RemoteLayerTree output
        https://bugs.webkit.org/show_bug.cgi?id=132640

        Reviewed by Beth Dakin.

        Support scrolling tree logging in the RemoteLayerTree log channel
        output.
        
        ScrollingStateTree::commit() unconditionally set treeStateClone->m_hasChangedProperties
        to true, but we should set it based on original scrolling state tree's 
        m_hasChangedProperties.
        
        We have to encode all of the scrolling state nodes anyway (they only encode
        changed properties), but we can use this for future optimizations, and to
        avoid spurious logging.
        
        * WebCore.exp.in: Export a couple of things we need.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::commit):

2014-05-07  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-expanded changes are not communicated to clients
        https://bugs.webkit.org/show_bug.cgi?id=132642

        Reviewed by Mario Sanchez Prada.

        When aria-expanded changes on non list/tree items, send out a generic
        AXExpandedChange notification.

        Test: platform/mac/accessibility/expanded-notification.html

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2014-05-07  Alexey Proskuryakov  <ap@apple.com>

        Release build fix.

        * platform/MIMETypeRegistry.cpp: (WebCore::initializeSupportedImageMIMETypes):
        Removed unused globals.

2014-05-07  Alexey Proskuryakov  <ap@apple.com>

        Eliminate "well known MIME type" support
        https://bugs.webkit.org/show_bug.cgi?id=132654

        Reviewed by Anders Carlsson.

        Vestiges of FileSystem API.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::files):
        (WebCore::DataTransfer::hasFileOfType):
        * fileapi/File.cpp:
        (WebCore::File::File):
        (WebCore::File::contentTypeFromFilePathOrName):
        * fileapi/File.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createFileList):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::findMimeType): Deleted.
        (WebCore::MIMETypeRegistry::getWellKnownMIMETypeForExtension): Deleted.
        * platform/MIMETypeRegistry.h:

2014-05-07  Christophe Dumez  <ch.dumez@samsung.com>

        [HTML] Default argument to HTMLTableElement.insertRow() should be -1
        https://bugs.webkit.org/show_bug.cgi?id=132651

        Reviewed by Alexey Proskuryakov.

        HTMLTableElement.insertRow()'s argument default value should be -1, not 0,
        as per the specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tabular-data.html#htmltableelement

        The new behavior matches the one of Firefox 29 and IE11, and soon Blink:
        https://codereview.chromium.org/270213007/

        Test: fast/dom/HTMLTableElement/insertRow-default-argument.html

        * html/HTMLTableElement.h:
        * html/HTMLTableElement.idl:

2014-05-07  Chris Fleizach  <cfleizach@apple.com>

        AX: AXSelectTextWithCriteria should support capitalize/lowercase/uppercase
        https://bugs.webkit.org/show_bug.cgi?id=132622

        Reviewed by Mario Sanchez Prada.

        The select text with criteria mechanism used through accessibility needs to support
        a few more parameters to be complete (including capitalize, lowercase and uppercase).

        Updated: accessibility/select-text.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectText):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute):
        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized):
        * rendering/RenderText.h:

2014-05-07  peavo@outlook.com  <peavo@outlook.com>

        DocumentLoader::dataReceived assertion failed
        https://bugs.webkit.org/show_bug.cgi?id=132017

        Reviewed by Brent Fulgham.

        We need to call didReceiveResponse client method before the didReceiveData client method, otherwise we get a lot of asserts.
        This patch also fixes frequent crashes in downloadTimerCallback method on page loading.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::calculateWebTimingInformations): Initialize local variables.
        (WebCore::headerCallback): Call didReceiveResponse client method here instead of in downloadTimerCallback.
        (WebCore::ResourceHandleManager::downloadTimerCallback): Remove call to didReceiveResponse method.
        (WebCore::ResourceHandleManager::dispatchSynchronousJob): Removed empty line.

2014-05-06  Antti Koivisto  <antti@apple.com>

        REGRESSION: Animated GIF inside compositing layer never resumes animation when scrolled back into view
        https://bugs.webkit.org/show_bug.cgi?id=132608

        Reviewed by Simon Fraser.

        Test: fast/repaint/animation-after-layer-scroll.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        
            Check if any animations need to be restarted after layer scroll.

2014-05-07  Hyowon Kim  <hw1008.kim@samsung.com>

        GraphicsLayer::client() should return a reference.
        https://bugs.webkit.org/show_bug.cgi?id=126372

        Reviewed by Simon Fraser.

        GraphicsLayers always have a GraphicsLayerClient attached,
        so make client() a reference and remove some unnecessary branches.
        The author of the changes in the mac port is Andreas Kling <akling@apple.com>.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::willBeDestroyed):
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        (WebCore::GraphicsLayer::addRepaintRect):
        (WebCore::dumpChildren):
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::client):
        (WebCore::GraphicsLayer::pageScaleFactor):
        (WebCore::GraphicsLayer::deviceScaleFactor):
        * platform/graphics/GraphicsLayerFactory.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::initialize):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::computePositionRelativeToBase):
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::platformCALayerContentsScaleMultiplierForNewTiles):
        (WebCore::GraphicsLayerCA::platformCALayerShouldAggressivelyRetainTiles):
        (WebCore::GraphicsLayerCA::platformCALayerShouldTemporarilyRetainTileCohorts):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::updateContentsScale):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::noteLayerPropertyChanged):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::notifyChange):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::createRootLayer):
        (WebCore::CompositingCoordinator::createGraphicsLayer):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::notifyFlushRequired):
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::animationStartedTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2014-05-07  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Corrected typo
        https://bugs.webkit.org/show_bug.cgi?id=132609

        Reviewed by Martin Robinson.

        Corrected m_canFallBackToLastFinishedSeekPositon typo and
        initialized in the constructor to prevent problems in the future.

        No test needed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        Initialized m_canFallBackToLastFinishedSeekPosition as false.
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        m_canFallBackToLastFinishedSeekPositon ->
        m_canFallBackToLastFinishedSeekPosition

2014-05-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert PassOwnPtr to unique_ptr in CrossThreadTask.h
        https://bugs.webkit.org/show_bug.cgi?id=132605

        Reviewed by Dirk Schulze.

        * dom/CrossThreadTask.h: Converted.

2014-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] TLSErrors do not cause page load to fail when not ignored
        https://bugs.webkit.org/show_bug.cgi?id=121548

        Reviewed by Sergio Villar Senin.

        This only happens in case of redirection, when the initial URL is
        an HTTPS site with an invalid certificate, that redirects to
        another location. We are starting the redirection without checking
        the TLS errors.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback): Check TLS errors before starting a
        possible redirection.

2014-05-07  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Remove runtime feature
        https://bugs.webkit.org/show_bug.cgi?id=132382

        Reviewed by Benjamin Poulain.

        Remove cssGridLayoutEnabled setting. Update methods using it accordingly.

        * WebCore.order:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridTemplateShorthand):
        (WebCore::CSSParser::parseGridAreaShorthand):
        (WebCore::CSSParser::cssGridLayoutEnabled): Deleted.
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * dom/Document.cpp:
        (WebCore::Document::cssGridLayoutEnabled): Deleted.
        * dom/Document.h:
        * page/Settings.in:

2014-05-07  Praveen R Jadhav  <praveen.j@samsung.com>

        Fix build errors for BlobDataItem after r168391.
        https://bugs.webkit.org/show_bug.cgi?id=132643

        Reviewed by Carlos Garcia Campos.

        Patch updates BlobDataItem params usage in ResourceHandleSoup.cpp
        to be inline with r168391.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::blobIsOutOfDate): BlobDataItem class is updated in r168391.
        Corresponding parameter changes are done to resolve build error.
        (WebCore::addEncodedBlobItemToSoupMessageBody): BlobDataItem class is updated
        in r168391. Corresponding parameter changes are done to resolve build error.

2014-05-06  Dean Jackson  <dino@apple.com>

        Clean up the difference between painting focus rings and adding PDF annotations
        https://bugs.webkit.org/show_bug.cgi?id=132638

        Reviewed by Simon Fraser.

        The code to add a PDF annotation when printing was called from
        drawFocusRing, which is quite confusing. With just little movement
        of code, we can detect an annotation and call addPDFURLRect in the
        paint phase, and drawFocusRing becomes something that only
        draws focus rings.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline): Split calls to drawFocusRing
        and addPDFURLRect.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing): Get rid of call to PDF.
        (WebCore::RenderObject::addPDFURLRect): Change the signature so it
        can be called externally, and calculates the rectangle itself.
        (WebCore::RenderObject::paintOutline): Split the calls.
        * rendering/RenderObject.h:

2014-05-06  Rik Cabanier  <cabanier@adobe.com>

        Calling createPattern with a broken image must throw an invalidstate error
        https://bugs.webkit.org/show_bug.cgi?id=132407

        Reviewed by Darin Adler.

        Updated createPattern so it throws an invalidState exception
        if you pass it an image that is in the broken state.

        Tests:
        * canvas/philip/tests/2d.pattern.image.broken.html:
        * canvas/philip/tests/2d.pattern.image.incomplete.empty.html:
        * fast/canvas/canvas-empty-image-pattern.html:

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

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

        [iOS][Mac] Display sleeps while playing <video> content.
        https://bugs.webkit.org/show_bug.cgi?id=132624

        Reviewed by Darin Adler.

        On iOS and Mac, create a DisplaySleepDisablerCocoa rather than an (no-op) DisplaySleepDisabler.

        * platform/cocoa/DisplaySleepDisablerCocoa.cpp:
        (WebCore::DisplaySleepDisabler::create):
        * platform/cocoa/DisplaySleepDisablerCocoa.h:

2014-05-06  Dean Jackson  <dino@apple.com>

        [Mac] Allow focus rings to redraw themselves if necessary
        https://bugs.webkit.org/show_bug.cgi?id=132593

        Fix iOS build.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing): We no longer use the color parameter.

2014-05-06  Dean Jackson  <dino@apple.com>

        [Mac] Allow focus rings to redraw themselves if necessary
        https://bugs.webkit.org/show_bug.cgi?id=132593

        Reviewed by Simon Fraser.

        Mac allows focus rings to change rendering over time. Expose this
        functionality to WebKit by having the rendering code detect that
        a focused element has asked to repaint itself, and also have
        the FocusController object remember how long it has been since
        an element was focused.

        This patch removes WebCoreNSCellExtras, since a better version is
        available in WebKitSystemInterface, and it was going to be cumbersome
        to port the code from there into WebKit.

        * WebCore.exp.in: Export _wkDrawFocusRingAtTime and _wkDrawCellFocusRingWithFrameAtTime.
        * WebCore.xcodeproj/project.pbxproj: Remove WebCoreNSCellExtras.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController): Initialize the repaint timer.
        (WebCore::FocusController::~FocusController): Stop the repaint timer on deletion.
        (WebCore::FocusController::setFocusedElement): Keep track of the current time when focused.
        (WebCore::FocusController::focusedElementNeedsRepaint): Start the repaint timer.
        (WebCore::FocusController::focusRepaintTimerFired): Ask the focused element to repaint itself.
        (WebCore::FocusController::timeSinceFocusWasSet):
        * page/FocusController.h: Expose timeSinceFocusWasSet() and focusedElementNeedsRepaint(), as
        well as add the timer for repainting.

        * platform/ControlStates.h: Add timeSinceControlWasFocused member variable, allowing the platform
        code such as Theme to obtain the value from FocusController.
        (WebCore::ControlStates::ControlStates):
        (WebCore::ControlStates::timeSinceControlWasFocused):
        (WebCore::ControlStates::setTimeSinceControlWasFocused):

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::drawFocusRing): New Mac-only method that uses timeOffset.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::drawFocusRingToContext): No need to pass in color and radius - these are now
        ignored in WKDrawFocusRing. However, I didn't want to change the signature of the
        WKSI function.
        (WebCore::drawFocusRingToContextAtTime): Call into the new method WKDrawFocusRingAtTime.
        (WebCore::GraphicsContext::drawFocusRing): Color and radius no longer used.

        * platform/mac/ThemeMac.mm:
        (WebCore::checkboxMargins): Update the margins since our focus ring can be a lot bigger.
        (WebCore::radioMargins): Ditto.
        (WebCore::paintToggleButton): Drawing a focus ring might trigger a repaint too.
        (WebCore::buttonMargins): Increase the margins.
        (WebCore::paintButton): If our focus ring wants to be drawn again, set the ControlStates flag.

        * platform/mac/WebCoreNSCellExtras.h: Removed.
        * platform/mac/WebCoreNSCellExtras.m: Removed.

        * platform/mac/WebCoreSystemInterface.h: Declare the new methods.
        * platform/mac/WebCoreSystemInterface.mm:

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle): Expand the overflow rects by the maximum
        focus ring width. This might be different from the current outline size.
        (WebCore::RenderElement::setStyle): Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing): If we're on Mac, use the new drawFocusRing method,
        which sets a parameter to true if the focused element needs a repaint.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::updateControlStatesForRenderer): Copy the value from FocusController
        so that the platform Theme code can use it.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingMaxWidth): Add a way to get the maximum width
        of a focus ring for the platform. This is used to extend the overflow rects.
        * rendering/RenderThemeMac.h: Override the focus ring width.
        * rendering/RenderThemeMac.mm: On newer versions of OS X, we have a larger focus ring.
        (WebCore::RenderThemeMac::platformFocusRingMaxWidth):
        (WebCore::RenderThemeMac::paintMenuList): If a menu is focused, and needs a repaint, mark
        it as such.

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

        [iOS] Animate AVPlayerLayer into and out of full screen
        https://bugs.webkit.org/show_bug.cgi?id=132603

        Reviewed by Simon Fraser.

        Rather than synchronize animations across the WebProcess / UIProcess boundary, animate
        the AVPlayerLayer into place by first resizing the full screen layer to occupy the
        entire screen in the WebProcess, and use a sublayerTransform animation in the UIProcess
        to scale the AVPlayer from its initial screen location, as well as back to its final screen
        location.

        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::largestRectWithAspectRatioInsideRect): Added utility method.
        * platform/graphics/GeometryUtilities.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer init]): Added, initialize video gravity and enable child layer masking.
        (-[WebAVVideoLayer setBounds:]): Create a transform to scale the video area.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Block implicit animations during setup.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Reset the gravity to ResizeAspect
            if necessary.

2014-05-06  Alexey Proskuryakov  <ap@apple.com>

        Make BlobDataItem use a refcounted object for files
        https://bugs.webkit.org/show_bug.cgi?id=132628

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Added BlobDataFileReference.{h|cpp}

        * WebCore.exp.in: Removed unused exports.

        * platform/network/BlobData.h:
        (WebCore::BlobDataItem::offset):
        (WebCore::BlobDataItem::BlobDataItem):
        Use a wrapper class for files, not a path. Changed to be more class-like accordingly.

        * platform/network/BlobData.cpp:
        (WebCore::BlobData::appendData):
        (WebCore::BlobData::appendFile):
        (WebCore::BlobData::appendBlob): Deleted.
        (WebCore::BlobData::BlobData): Deleted.
        We never add blobs to BlobData, they are always resolved to data of file references.
        Lots of very confusing code to delete.

        * platform/network/BlobDataFileReference.h: Added.
        * platform/network/BlobDataFileReference.cpp: Added.
        (WebCore::BlobDataFileReference::size):
        (WebCore::BlobDataFileReference::expectedModificationTime):
        (WebCore::BlobDataFileReference::computeFileSystemData):
        A unique reference to a file referenced by blob, to be preserved when you slice
        or combine blobs.

        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::appendStorageItems):
        (WebCore::BlobRegistryImpl::registerFileBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::blobSize):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::getSizeForNext):
        (WebCore::BlobResourceHandle::didGetSize):
        (WebCore::BlobResourceHandle::readDataSync):
        (WebCore::BlobResourceHandle::readFileSync):
        (WebCore::BlobResourceHandle::readDataAsync):
        (WebCore::BlobResourceHandle::readFileAsync):
        * platform/network/BlobResourceHandle.h:
        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved):
        Updated for BlobDataItem interface changes.

2014-05-06  Christophe Dumez  <ch.dumez@samsung.com>

        [HTML] Default argument to HTMLTableRowElement.insertCell() should be -1
        https://bugs.webkit.org/show_bug.cgi?id=132615

        Reviewed by Darin Adler.

        HTMLTableRowElement.insertCell()'s argument default value should be -1, not
        0, as per the specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tabular-data.html#the-tr-element

        The new behavior matches the one of Firefox 29 and IE11, and soon Blink:
        https://codereview.chromium.org/263323004/

        Test: fast/dom/HTMLTableRowElement/insertCell-default-argument.html

        * html/HTMLTableRowElement.h:
        * html/HTMLTableRowElement.idl:

2014-05-06  Oliver Hunt  <oliver@apple.com>

        Fix build.

        * WebCore.exp.in:

2014-05-06  Andreas Kling  <akling@apple.com>

        Add missing line from r168384.

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::~ChildNodesLazySnapshot):

2014-05-06  Oliver Hunt  <oliver@apple.com>

        Can't make a booking at virginamerica.com
        https://bugs.webkit.org/show_bug.cgi?id=132626

        Reviewed by Geoffrey Garen.

        Test: fast/dom/assign-to-prototype-accessor-on-prototype-should-be-silent.html

        We can't throw an exception when a site incorrectly attempts
        to use a dom property setter directly on the prototype as
        there are sites that do this as compatibility workarounds
        for old browsers. Instead we treat use of the setter on
        the prototype object in the same way we do getters, and just
        log a warning to the console.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportDeprecatedSetterError):
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::setJSTestNondeterministicNondeterministicWriteableAttr):
        (WebCore::setJSTestNondeterministicNondeterministicExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicGetterExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicSetterExceptionAttr):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (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/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):

2014-05-06  Andreas Kling  <akling@apple.com>

        ChildNodesLazySnapshot::m_childNodes needs two heap allocations.
        <https://webkit.org/b/132616>

        This seems a bit silly, since ChildNodesLazySnapshot is always
        allocated on the stack.

        Change it to be a bool + a Vector instead of using the nullity
        as a presence indicator. This way we also don't end up with an
        out-of-line ~OwnPtr for the Vector.

        Reviewed by Geoff Garen.

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::ChildNodesLazySnapshot):
        (WebCore::ChildNodesLazySnapshot::nextNode):
        (WebCore::ChildNodesLazySnapshot::takeSnapshot):
        (WebCore::ChildNodesLazySnapshot::hasSnapshot):

2014-05-06  Alexey Proskuryakov  <ap@apple.com>

        Eliminate BlobStorageData
        https://bugs.webkit.org/show_bug.cgi?id=132617

        Reviewed by Anders Carlsson.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/BlobData.h:
        (WebCore::BlobData::create):
        (WebCore::BlobData::BlobData):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::loadResourceSynchronously):
        (WebCore::BlobRegistryImpl::appendStorageItems):
        (WebCore::BlobRegistryImpl::registerFileBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURLForSlice):
        (WebCore::BlobRegistryImpl::getBlobDataFromURL):
        (WebCore::BlobRegistryImpl::blobSize):
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::createAsync):
        (WebCore::BlobResourceHandle::loadResourceSynchronously):
        (WebCore::BlobResourceHandle::BlobResourceHandle):
        (WebCore::BlobResourceHandle::doStart):
        (WebCore::BlobResourceHandle::getSizeForNext):
        (WebCore::BlobResourceHandle::didGetSize):
        (WebCore::BlobResourceHandle::seek):
        (WebCore::BlobResourceHandle::readSync):
        (WebCore::BlobResourceHandle::readDataSync):
        (WebCore::BlobResourceHandle::readFileSync):
        (WebCore::BlobResourceHandle::readAsync):
        (WebCore::BlobResourceHandle::readDataAsync):
        (WebCore::BlobResourceHandle::readFileAsync):
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        * platform/network/BlobResourceHandle.h:
        * platform/network/BlobStorageData.h: Removed.
        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::addEncodedBlobToSoupMessageBody):

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

        Fix the iOS build.

        WebCore::Editor::replaceNodeFromPasteboard(WebCore::Node*, WTF::String const&) is Mac-only.
        Also sort the export file.

        * WebCore.exp.in:

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

        Begin Removal of Old Multi-Column Code.
        https://bugs.webkit.org/show_bug.cgi?id=132480

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::regionBasedColumnsEnabled): Deleted.
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::updateLayerPositionFlags):
        * page/Settings.in:
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::clearPaginationInformation):
        (WebCore::LayoutState::addForcedColumnBreak): Deleted.
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::isPaginatingColumns): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::addChildToContinuation):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::recomputeLogicalWidth):
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats):
        (WebCore::RenderBlock::simplifiedLayout):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::offsetForContents):
        (WebCore::RenderBlock::computeIntrinsicLogicalWidths):
        (WebCore::RenderBlock::createAnonymousBoxWithSameTypeAs):
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation):
        (WebCore::RenderBlock::renderName):
        (WebCore::RenderBlock::addChildToAnonymousColumnBlocks): Deleted.
        (WebCore::RenderBlock::containingColumnsBlock): Deleted.
        (WebCore::RenderBlock::splitFlow): Deleted.
        (WebCore::RenderBlock::makeChildrenAnonymousColumnBlocks): Deleted.
        (WebCore::RenderBlock::columnsBlockForSpanningElement): Deleted.
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): Deleted.
        (WebCore::RenderBlock::updateLogicalWidthAndColumnWidth): Deleted.
        (WebCore::RenderBlock::isTopLayoutOverflowAllowed): Deleted.
        (WebCore::RenderBlock::isLeftLayoutOverflowAllowed): Deleted.
        (WebCore::RenderBlock::paintColumnRules): Deleted.
        (WebCore::RenderBlock::initialBlockOffsetForPainting): Deleted.
        (WebCore::RenderBlock::blockDeltaForPaintingNextColumn): Deleted.
        (WebCore::RenderBlock::paintColumnContents): Deleted.
        (WebCore::ColumnRectIterator::ColumnRectIterator): Deleted.
        (WebCore::ColumnRectIterator::advance): Deleted.
        (WebCore::ColumnRectIterator::columnRect): Deleted.
        (WebCore::ColumnRectIterator::hasMore): Deleted.
        (WebCore::ColumnRectIterator::adjust): Deleted.
        (WebCore::ColumnRectIterator::update): Deleted.
        (WebCore::RenderBlock::hitTestColumns): Deleted.
        (WebCore::RenderBlock::adjustForColumnRect): Deleted.
        (WebCore::RenderBlock::availableLogicalWidth): Deleted.
        (WebCore::RenderBlock::columnGap): Deleted.
        (WebCore::RenderBlock::computeColumnCountAndWidth): Deleted.
        (WebCore::RenderBlock::requiresColumns): Deleted.
        (WebCore::RenderBlock::setComputedColumnCountAndWidth): Deleted.
        (WebCore::RenderBlock::updateColumnProgressionFromStyle): Deleted.
        (WebCore::RenderBlock::computedColumnWidth): Deleted.
        (WebCore::RenderBlock::computedColumnCount): Deleted.
        (WebCore::RenderBlock::columnInfo): Deleted.
        (WebCore::RenderBlock::columnCount): Deleted.
        (WebCore::RenderBlock::columnRectAt): Deleted.
        (WebCore::RenderBlock::adjustPointToColumnContents): Deleted.
        (WebCore::RenderBlock::adjustRectForColumns): Deleted.
        (WebCore::RenderBlock::flipForWritingModeIncludingColumns): Deleted.
        (WebCore::RenderBlock::adjustStartEdgeForWritingModeIncludingColumns): Deleted.
        (WebCore::RenderBlock::adjustForColumns): Deleted.
        (WebCore::RenderBlock::adjustIntrinsicLogicalWidthsForColumns): Deleted.
        (WebCore::RenderBlock::paginationUnit): Deleted.
        (WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer): Deleted.
        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer): Deleted.
        (WebCore::RenderBlock::computeLineGridPaginationOrigin): Deleted.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::pixelSnappedLogicalRightOffsetForLine):
        (WebCore::RenderBlock::createAnonymousBlock):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::createAnonymousColumnsBlock): Deleted.
        (WebCore::RenderBlock::createAnonymousColumnSpanBlock): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustIntrinsicLogicalWidthsForColumns):
        (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths):
        (WebCore::RenderBlockFlow::recomputeLogicalWidthAndColumnWidth):
        (WebCore::RenderBlockFlow::columnGap):
        (WebCore::RenderBlockFlow::computeColumnCountAndWidth):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::inNormalFlow):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::updateMinimumPageHeight):
        (WebCore::RenderBlockFlow::computeOverflow):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::hasOverhangingFloat):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        (WebCore::RenderBlockFlow::requiresColumns):
        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):
        (WebCore::RenderBlockFlow::updateColumnProgressionFromStyle):
        (WebCore::RenderBlockFlow::computedColumnWidth):
        (WebCore::RenderBlockFlow::computedColumnCount):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::hasOverhangingFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent):
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::canHaveBoxInfoInRegion):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderers):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::computeRectForRepaint):
        (WebCore::RenderInline::offsetFromContainer):
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updatePagination):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::checkContainingBlockChainForPagination): Deleted.
        (WebCore::RenderLayer::useRegionBasedColumns): Deleted.
        (WebCore::RenderLayer::paintPaginatedChildLayer): Deleted.
        (WebCore::RenderLayer::paintChildLayerIntoColumns): Deleted.
        (WebCore::RenderLayer::hitTestPaginatedChildLayer): Deleted.
        (WebCore::RenderLayer::hitTestChildLayerColumns): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::shouldCheckColumnBreaks):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::pushMappingToContainer):
        (WebCore::RenderObject::offsetFromContainer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::hasColumns): Deleted.
        (WebCore::RenderObject::setHasColumns): Deleted.
        (WebCore::RenderObject::isAnonymousColumnsBlock): Deleted.
        (WebCore::RenderObject::isAnonymousColumnSpanBlock): Deleted.
        (WebCore::RenderObject::adjustForColumns): Deleted.
        (WebCore::RenderObject::offsetForColumns): Deleted.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRectForRepaint):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight):
        (WebCore::RenderView::pageOrViewLogicalHeight):
        (WebCore::RenderView::unextendedBackgroundRect):
        (WebCore::RenderView::backgroundRect):
        (WebCore::RenderView::shouldDisableLayoutStateForSubtree):
        (WebCore::RenderView::pageNumberForBlockProgressionOffset):
        (WebCore::RenderView::pageCount):
        (WebCore::RenderView::paginationUnit): Deleted.
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2014-05-06  Brady Eidson  <beidson@apple.com>

        Don't select an image that is about to have its menu shown.
        <rdar://problem/16807845> and https://bugs.webkit.org/show_bug.cgi?id=132579

        Reviewed by Tim Horton.

        * WebCore.exp.in:

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::replaceNodeFromPasteboard): New method that first selects
          the Node and then immediately pastes over it. Since it’s synchronous the 
          selection never has a chance to paint.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Don’t select the image.

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

        [Mac] make metadata cue attributes consistent
        https://bugs.webkit.org/show_bug.cgi?id=132610

        Reviewed by Jer Noble.

        No new tests, updated http/tests/media/track-in-band-hls-metadata.html.

        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithAVMetadataItemInContext): Don't include keys @dataTypeNamespace
            or @pictureType, @dataType -> @type.

2014-05-06  Brady Eidson  <beidson@apple.com>

        "Flash of content without image" when pasting a raw image from the pasteboard
        <rdar://problem/16826199> and https://bugs.webkit.org/show_bug.cgi?id=132612

        Reviewed by Tim Horton.

        Let an ArchiveResource be flagged as "should load immediately":
        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::ArchiveResource):
        * loader/archive/ArchiveResource.h:
        (WebCore::ArchiveResource::setShouldLoadImmediately):
        (WebCore::ArchiveResource::shouldLoadImmediately):

        Set that flag on the ArchiveResource for the image.
        Note we quite explicitly do this only in the "read a single image" from the pasteboard
        case, because we don't want to do this synchronous step for multiple images at once
        such as when pasting a WebArchive:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readImage):

        When creating a new CachedResource, if there is an ArchiveResource that is set to
        load immediately, populate the CachedResource immediately instead of scheduling a load:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2014-05-06  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix for debug after r168367.

        * platform/NotImplemented.cpp:
        Added include NotImplemented.h.

2014-05-06  Alex Christensen  <achristensen@webkit.org>

        Removed unnecessary notImplemented.h includes.
        https://bugs.webkit.org/show_bug.cgi?id=132587

        Reviewed by Anders Carlsson.

        * Modules/webdatabase/Database.cpp:
        * accessibility/AccessibilityObject.cpp:
        * bindings/js/Dictionary.h:
        * bindings/js/SerializedScriptValue.cpp:
        * html/HTMLMediaSession.cpp:
        * html/ImageDocument.cpp:
        * html/parser/HTMLFormattingElementList.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * page/mac/EventHandlerMac.mm:
        * platform/NotImplemented.cpp:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/mac/PlatformScreenMac.mm:
        * platform/mac/WidgetMac.mm:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        * rendering/RenderGrid.cpp:
        * workers/SharedWorkerGlobalScope.cpp:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerMessagingProxy.cpp:
        Removed notImplemented from list of includes.

2014-05-06  Enrica Casucci  <enrica@apple.com>

        Unreviewed build fix after http://trac.webkit.org/changeset/168364

        * rendering/RenderLineBreak.cpp:

2014-05-06  Christophe Dumez  <ch.dumez@samsung.com>

        [HTML] Default argument to HTMLTableSectionElement.insertRow() should be -1
        https://bugs.webkit.org/show_bug.cgi?id=132570

        Reviewed by Darin Adler.

        HTMLTableSectionElement.insertRow()'s argument default value should be -1, not
        0, as per the specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tabular-data.html#the-tbody-element

        The new behavior matches the one of Firefox 29 and IE11, and soon Blink:
        https://code.google.com/p/chromium/issues/detail?id=369803

        Test: fast/dom/HTMLTableSectionElement/insertRow-default-argument.html

        * html/HTMLTableSectionElement.h:
        * html/HTMLTableSectionElement.idl:

2014-05-05  Enrica Casucci  <enrica@apple.com>

        REGRESSION(r155957): Selection rects are incorrect when the selection contains BR elements.
        https://bugs.webkit.org/show_bug.cgi?id=132596
        <rdar://problem/16692206>

        Reviewed by Antti Koivisto.

        This patch adds an implementation of collectSelectionRects to RenderLineBreak.
        It uses the same logic used by RenderText to compute and annotate the returned rect
        which is computed, like the caret rect, using information from the rootline box.

        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::collectSelectionRects):
        * rendering/RenderLineBreak.h:

2014-05-06  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Optimize the number of regions invalidations
        https://bugs.webkit.org/show_bug.cgi?id=132611

        Reviewed by David Hyatt.

        It is possible to invalidate the region chain of a flow thread
        during the layout of the region when its height is not final.

        This patch places the check after the height of the region
        is determined, reducing the number of invalidations.

        Tests: Less invalidations and repaints in the repaint tests for
        the flow threads.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::updateLogicalHeight):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::layoutBlock):
        (WebCore::RenderNamedFlowFragment::invalidateRegionIfNeeded):
        * rendering/RenderNamedFlowFragment.h:

2014-05-03  Sam Weinig  <sam@webkit.org>

        [Extended Background] Respect repeat-x/repeat-y when creating margin tiles
        https://bugs.webkit.org/show_bug.cgi?id=132534

        Reviewed by Beth Dakin.

        If the background image that is causing margin tiles only repeats in dimension only create
        the tiles in that dimension.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateExtendBackgroundIfNecessary):
        (WebCore::FrameView::calculateExtendedBackgroundMode):
        (WebCore::FrameView::updateTilesForExtendedBackgroundMode):
        (WebCore::FrameView::setBackgroundExtendsBeyondPage): Deleted.
        (WebCore::FrameView::needsExtendedBackgroundRectForPainting): Deleted.
        (WebCore::FrameView::setHasExtendedBackgroundRectForPainting): Deleted.
        * page/FrameView.h:
        * page/Settings.cpp:
        (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::hasHorizontalMargins):
        (WebCore::TileController::hasVerticalMargins):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):
        * rendering/RenderLayerBacking.h:

2014-05-06  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver does not announce text changes for content editable regions in Safari
        https://bugs.webkit.org/show_bug.cgi?id=132577

        Reviewed by Mario Sanchez Prada.

        When text or children are changed inside of a contenteditable region, we need to 
        convert those actions into AXValueChange notifications.

        Test: accessibility/content-editable-set-inner-text-generates-axvalue-notification.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::childrenChanged):
        (WebCore::AccessibilityNodeObject::hasContentEditableAttributeSet): Deleted.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasContentEditableAttributeSet):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textChanged):

2014-05-06  Dirk Schulze  <krit@webkit.org>

        [SVG2] Share "on"- event attributes with HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=132604

        Reviewed by Mihnea Ovidenie.

        Share "on" event attribute parsing between SVGElement and HTMLElement.

        Tests: fast/dom/script-tests/event-attribute-availability.js:

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::populateEventNameForAttributeLocalNameMap):
        (WebCore::populateEventNameForAttributeLocalNameMap): Deleted.
        * html/HTMLElement.h: Make populateEventNameForAttributeLocalNameMap
            public for use in SVGElement.
        * svg/SVGElement.cpp: Use HTMLElement code to parse "on" event
            attributes.
        (WebCore::SVGElement::parseAttribute):

2014-05-05  Zan Dobersek  <zdobersek@igalia.com>

        [Soup] Use std::unique_ptr<char[]> for the read buffer in SocketStreamHandle
        https://bugs.webkit.org/show_bug.cgi?id=132559

        Reviewed by Carlos Garcia Campos.

        Manage the read buffer array through a std::unique_ptr<char[]> object.
        This avoids handling with the raw pointer and also ensures that the memory
        allocated with the new[] operator is deleted with the delete[] operator,
        a problem exposed by the AddressSanitizer in WebSocket tests.

        * platform/network/soup/SocketStreamHandle.h:
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::connected):
        (WebCore::SocketStreamHandle::readBytes):
        (WebCore::SocketStreamHandle::platformClose):

2014-05-05  Dirk Schulze  <krit@webkit.org>

        Adapt inline SVG sizing behavior to Firefox and Blink
        https://bugs.webkit.org/show_bug.cgi?id=132569

        Reviewed by Dean Jackson.

        This patch is ported from Blink CR 308992. Thanks to David Vest for helping
        with back porting his Blink patch. From the commit message:

        "The basis of this change is to map explicit width and height
        attributes to CSS properties, essentially promoting them to
        presentation attributes. Note that implicit "100%" width and height
        are not mapped.
        
        This enables us to remove the concept of "percentage intrinsic size"
        and rely on normal CSS rules to resolve percentage values.
        
        The change has been approved by the SVG WG and the spec is being
        updated. Minutes here:
        
        http://www.w3.org/2014/04/07-svg-minutes.html#item03"

        The new model was indeed approved by the SVG WG and is basically following
        the CSS 2.1 model for replaced elements.

        With this patch WebKit, Firefox and Blink have the same behavior for inline SVG.
        This is the first successful approach to unify the sizing behavior of SVG
        across UAs.

        Tests: svg/as-object/sizing/svg-in-object-placeholder-height-auto.html
               svg/as-object/sizing/svg-in-object-placeholder-height-fixed.html
               svg/as-object/sizing/svg-in-object-placeholder-height-percentage.html
               svg/in-html/sizing/svg-inline.html

        * css/svg.css: Root SVG elements still need to be sized with height: 100% and
            width: 100%. This is necessary since width and height are presentation
            attributes now.
        (svg:root):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computeIntrinsicRatioInformation): Remove all special
            behavior for intrinsic and percentage based sizes in SVG. This simplifies and
            unifies the code a lot. Most of the logic that is used is in RenderBox and
            RenderReplaced now. RenderSVGRoot was cleaned up a lot and is much lighter. 
            And so it SVGSVGElement.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight):
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeAspectRatioInformationForRenderBox):
        (WebCore::RenderReplaced::computeIntrinsicRatioInformation):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderReplaced.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        (WebCore::RenderSVGRoot::hasRelativeDimensions):
        (WebCore::RenderSVGRoot::hasRelativeIntrinsicLogicalWidth): Deleted.
        (WebCore::RenderSVGRoot::hasRelativeLogicalHeight): Deleted.
        * rendering/svg/RenderSVGRoot.h:
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGPresentationAttributeStyle):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::isPresentationAttribute):
        (WebCore::SVGSVGElement::collectStyleForPresentationAttribute):
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::currentViewportSize):
        (WebCore::SVGSVGElement::hasIntrinsicWidth):
        (WebCore::SVGSVGElement::hasIntrinsicHeight):
        (WebCore::SVGSVGElement::intrinsicWidth):
        (WebCore::SVGSVGElement::intrinsicHeight):
        (WebCore::SVGSVGElement::widthAttributeEstablishesViewport): Deleted.
        (WebCore::SVGSVGElement::heightAttributeEstablishesViewport): Deleted.
        * svg/SVGSVGElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::containerSize):
        * xml/XMLErrors.cpp: If an error occurs in a stand alone SVG file, we create
            an XHTML document with the error message and append the SVG file.
            This SVG file now follows the CSS sizing behavior as inline SVG.
            Therefore, we need to set width and height to 100% explicitly.
        (WebCore::XMLErrors::insertErrorMessageBlock):

2014-05-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] REGRESSION(167145): JavaScript media controls are broken
        https://bugs.webkit.org/show_bug.cgi?id=131573

        Reviewed by Brent Fulgham.

        * PlatformEfl.cmake: Add the localized strings file to the list of user agent scripts.
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::mediaControlsScript): Include the localized strings file in the script body.

2014-05-05  Jeremy Jones  <jeremyj@apple.com>

        Implement scan backward and forward in video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=132517

        Reviewed by Simon Fraser.

        Implement scanning forward and backward. This implements methods in 
        WebAVPlayerController and forwards them through WebVideoFullscreenModelMediaElement
        and on to HTMLMediaElement.

        * WebCore.exp.in: necessary exports.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController seekToTime:]):
        Use fastSeek in this case.
        (-[WebAVPlayerController canScanForward]): If you can play, you can scan.
        (+[WebAVPlayerController keyPathsForValuesAffectingCanScanForward]): ditto
        (-[WebAVPlayerController beginScanningForward:]): ditto
        (-[WebAVPlayerController endScanningForward:]): ditto
        (-[WebAVPlayerController canScanBackward]): If you can play, you can scan.
        (+[WebAVPlayerController keyPathsForValuesAffectingCanScanBackward]): ditto
        (-[WebAVPlayerController beginScanningBackward:]): ditto
        (-[WebAVPlayerController endScanningBackward:]): ditto
        (-[WebAVPlayerController canSeekToBeginning]):
        This looks at seekableRanges to determine if any seeking is possible.
        (+[WebAVPlayerController keyPathsForValuesAffectingCanSeekToBeginning]):
        depends on seekableRanges.
        (-[WebAVPlayerController seekToBeginning:]): seek to -ininity
        (-[WebAVPlayerController canSeekToEnd]):
        This looks at seekableRanges to determine if any seeking is possible.
        (+[WebAVPlayerController keyPathsForValuesAffectingCanSeekToEnd]):
        depends on seekableRanges.
        (-[WebAVPlayerController seekToEnd:]): seek to INFINITY.
        * platform/ios/WebVideoFullscreenModel.h:
        Add 4 new functions.
        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        ditto
        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::fastSeek): forwards to HTMLMediaEelement
        (WebVideoFullscreenModelMediaElement::beginScanningForward): forwards to HTMLMediaEelement
        (WebVideoFullscreenModelMediaElement::beginScanningBackward): forwards to HTMLMediaEelement
        (WebVideoFullscreenModelMediaElement::endScanning): forwards to HTMLMediaEelement

2014-05-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Prefetch DNS hostnames on tap highlight
        https://bugs.webkit.org/show_bug.cgi?id=132509

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        * dom/Element.cpp:
        * dom/Element.h:
        (WebCore::Element::absoluteLinkURL()):

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

        [iOS WK2] Flickery scrolling inside overflow-scrolling: touch
        https://bugs.webkit.org/show_bug.cgi?id=132591
        <rdar://problem/16760466>

        Reviewed by Tim Horton.

        Avoid triggering layer tree commits that touch the layer's boundsOrigin
        while the user is scrolling in the UI process.
        
        Fix the WKOverflowScrollViewDelegate to pass along an "inUserInteration"
        flag to the ScrollingTree to say that we're in the middle of a user interaction
        (and also to send a final non-interactive update). That gets passed along
        to the web process, and turned into "SyncScrollingLayerPosition" update.
        AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll() consults
        this, and uses it to set a flag on the ScrollableArea to say that the scroll
        is a user scroll.
        
        RenderLayerBacking then makes use of this (in existing code, shared with WK1)
        to avoid triggering layer bounds setting. Instead, it now just calls syncBoundsOrigin(),
        which updates the GraphicsLayer without touching platform layers. This is necessary
        so that GraphicsLayer geometry is up-to-date (used for tiled layer visibility
        computations).
        
        Finally, a hack in GraphicsLayerCA::computeVisibleRect() is conditionalized
        for WebKit1 by checking the type of platform layer.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTree.h:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::syncBoundsOrigin):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

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

        Stop using BlobData on client side
        https://bugs.webkit.org/show_bug.cgi?id=132582

        Reviewed by Sam Weinig.

        Blob registration now uses either a single file path, or a vector of much simpler
        BlobPart objects, not an array with arbitrarily sliced blobs or files, which can't happen.

        * Modules/websockets/WebSocket.cpp:(WebCore::WebSocket::didReceiveBinaryData):
        Use a new simpler Blob constructor.

        * WebCore.xcodeproj/project.pbxproj: Added BlobPart, removed BlobRegistrationData.

        * bindings/js/JSBlobCustom.cpp: (WebCore::JSBlobConstructor::constructJSBlob):
        Use Vector<BlobPart> instead of BlobData (1 line of code instead of 5).

        * dom/DataTransfer.cpp: (WebCore::DataTransfer::hasFileOfType): Updated for
        File::contentTypeFromFilePathOrName rename.

        * fileapi/Blob.cpp: (WebCore::Blob::Blob):
        * fileapi/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::deserialize):
        * fileapi/File.cpp:
        (WebCore::File::File):
        (WebCore::File::contentTypeFromFilePathOrName):
        (WebCore::createBlobDataForFileWithType): Deleted.
        (WebCore::createBlobDataForFile): Deleted.
        (WebCore::createBlobDataForFileWithName): Deleted.
        (WebCore::File::contentTypeFromFilePath): Deleted.
        * fileapi/File.h: (WebCore::File::deserialize): Deleted.
        Added and updated constructors to not use BlobData. Changed special case constructors
        to use name tags instead of non-enforced comments.

        * fileapi/ThreadableBlobRegistry.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::BlobRegistryContext::BlobRegistryContext): Updated with new data members
        that were split out of BlobData.
        (WebCore::ThreadableBlobRegistry::registerFileBlobURL): Added.
        (WebCore::ThreadableBlobRegistry::registerBlobURL): Updated to pass Content-Type
        explicitly, as it's no longer hidden in BlobData.

        * fileapi/WebKitBlobBuilder.h:
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        (WebCore::BlobBuilder::finalize):
        (WebCore::BlobBuilder::appendBytesData): Deleted.
        Updated to use BlobPart. There is no longer any need to special case Files,
        the registry takes care of that.

        * platform/network/BlobData.h:
        * platform/network/BlobData.cpp:
        (WebCore::BlobDataItem::detachFromCurrentThread): Deleted.
        (WebCore::BlobData::detachFromCurrentThread): Deleted.
        BlobData will only be used on main thread by the registry.

        * platform/network/BlobPart.h: Added. A new class to encapsulate a list of blobs
        that are combined into a new blob, as exposed to JS via Blob constructor.

        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerFileBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURL):
        * platform/network/BlobRegistryImpl.h:
        Updated for the new registration methods. We no longer have arbitrary BlobDatas
        coming in.

        * platform/network/FormData.cpp: Don't include BlobData for now (but really,
        BlobStorageData is the same thing, and they will be merged soon).
        Unfortunately, FormData is used by both client and registry side, and there is
        no clear delimitation at the time.
 
        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::responseBlob): Use the new simpler
        way to create a Blob.

2014-05-05  Benjamin Poulain  <benjamin@webkit.org>

        Clean up Image Document and tweak the layout and viewport
        https://bugs.webkit.org/show_bug.cgi?id=132552

        Reviewed by Sam Weinig.

        The #ifdef in every function was making quite a mess. A lot of that code does
        not make sense on iOS.

        This patch make a clean split between mouse related stuff and iOS.

        Also:
        -Change the viewport to be only width based, and avoid scaling in portrait.
        -Center the image horizontally in the view.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::imageUpdated):
        (WebCore::ImageDocument::scale):
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::imageFitsInWindow):
        (WebCore::ImageDocument::windowSizeChanged):
        (WebCore::ImageDocument::imageClicked):
        * html/ImageDocument.h:

2014-05-05  Beth Dakin  <bdakin@apple.com>

        Need a delegate that informs the UI process when the page's pin state changes
        https://bugs.webkit.org/show_bug.cgi?id=132583
        -and corresponding-
        <rdar://problem/16806231>

        Reviewed by Anders Carlsson.

        We should default all of these pin-state value to true.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):

2014-05-05  Christophe Dumez  <ch.dumez@samsung.com>

        Named element cache can become invalid during HTMLCollection::updateNamedElementCache()
        https://bugs.webkit.org/show_bug.cgi?id=132575

        Reviewed by Ryosuke Niwa.

        Make sure the named element cache object stays valid in
        HTMLCollection::updateNamedElementCache() while it is populating it.

        The method was previously creating and setting the cache first, and then start
        traversing the DOM tree to populate it. As a consequence, hasNamedElementCache()
        would start returning true before the cache is actually populated.
        The issue is that finding matches in the DOM tree can cause
        HTMLCollection::invalidateCache() to be called under certain circumstances and
        thus the named element cache object can become invalid while
        updateNamedElementCache() is populating it.

        To avoid the issue, this patch updates updateNamedElementCache() so that the
        named element cache map is set *after* traversing the DOM tree. This way,
        hasNamedElementCache() returns false while the cache is being populated and
        there is no chance of it being invalidated too early.

        Test: fast/dom/htmlcollection-selectedOptions-namedItem-crash.html

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::updateNamedElementCache):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::setNameItemCache):
        (WebCore::HTMLCollection::createNameItemCache): Deleted.
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache):

2014-05-05  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Special case ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture() for image documents
        https://bugs.webkit.org/show_bug.cgi?id=132553

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageElement):
        * html/ImageDocument.h:

2014-05-05  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Webkit-blend-mode fails for accelerated parent with overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=126160

        When the isolating layer has overflow:hidden, it will create a descendant clipping layer
        (m_childContainmentLayer), which will restrict the bleding layer to reading the backdrop
        from the isolating layer.
        The solution in this patch is to forbid the isolating layer to create a descendant clipping
        layer and make all the children to get their own ancestor clipping layers instead.

        Reviewed by Dean Jackson.

        Tests: css3/compositing/blend-mode-accelerated-parent-overflow-hidden.html
               css3/compositing/blend-mode-clip-accelerated-blending-canvas.html
               css3/compositing/blend-mode-clip-accelerated-blending-child.html
               css3/compositing/blend-mode-clip-accelerated-blending-double.html
               css3/compositing/blend-mode-clip-accelerated-blending-with-siblings.html
               css3/compositing/blend-mode-clip-accelerated-transformed-blending.html
               css3/compositing/blend-mode-clip-rect-accelerated-blending.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        when the compositing ancestor isolates blending we take it into account for computing
        the clipping rect for this layer, because it was not allowed to create the descendant
        clipping layer. 
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        when the compositing ancestor isolates blending we decide if a layer is clipped by ancestor
        by computing the clipping rect taking into account all the ancestors up to and including
        the compositing ancestor.
        (WebCore::RenderLayerCompositor::clipsCompositingDescendants):
        if a layer isolates blending, it is not allowed to create a descendant clipping layer.

2014-05-05  Dirk Schulze  <krit@webkit.org>

        AX: tabindex support in SVG2
        https://bugs.webkit.org/show_bug.cgi?id=130212

        Reviewed by Chris Fleizach.

        The patch is mainly based on a patch for Blink by Erik Dahlström.
        https://src.chromium.org/viewvc/blink?revision=172964&view=revision

        It adds support for tabindex to SVG by reusing the HTML code.

        Spec: https://svgwg.org/svg2-draft/interact.html#sequential-focus-navigation-and-the-tabindex-attribute
        IDL attribute: https://svgwg.org/svg2-draft/types.html#__svg__SVGElement__tabIndex

        Test: svg/custom/tabindex-order.html

        * dom/Element.cpp:
        (WebCore::Element::setTabIndex): Moved from HTMLElement and shared with all elements.
        * dom/Element.h:
        * html/HTMLAnchorElement.cpp: Remove outdated comment.
        (WebCore::HTMLAnchorElement::canStartSelection):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setTabIndex): Deleted.
        * html/HTMLElement.h:
        * svg/SVGAElement.cpp: Uses the same logic as HTMLAnchorElement now.
        (WebCore::SVGAElement::tabIndex):
        (WebCore::SVGAElement::supportsFocus):
        (WebCore::SVGAElement::isMouseFocusable):
        (WebCore::SVGAElement::isKeyboardFocusable):
        (WebCore::SVGAElement::canStartSelection):
        * svg/SVGAElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::tabIndex): Return -1 if element can not be focused.
        (WebCore::SVGElement::parseAttribute):
        (WebCore::SVGElement::isMouseFocusable):
        (WebCore::SVGElement::isKeyboardFocusable): Deleted. Use function on Element.
        * svg/SVGElement.h:
        * svg/SVGElement.idl:
        * svg/SVGEllipseElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGraphicsElement.h: Remove supportsFocus() from inheriting functions.
            Don't just return true. SVG elements should not be focusable by default.
            Instead check if tabindex was set explicitly.
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTextElement.h:

2014-05-05  Jeremy Jones  <jeremyj@apple.com>

        Implement beginScrubbing and endScrubbing for video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=132520

        Reviewed by Eric Carlson.

        Plumb through beginScrubbing and endScrubbing from AVKit down to HTMLMediaElement.
        This keeps the playback state consistent while scrubbing and allows playback state
        to return to the original state when scrubbing is complete.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController beginScrubbing:]):
        (-[WebAVPlayerController endScrubbing:]):
        * platform/ios/WebVideoFullscreenModel.h:
        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::beginScrubbing):
        (WebVideoFullscreenModelMediaElement::endScrubbing):

2014-05-05  Tim Horton  <timothy_horton@apple.com>

        More long hangs under IOSurfacePool::evict
        https://bugs.webkit.org/show_bug.cgi?id=132576
        <rdar://problem/16769469>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::evict):
        If the pool is too full, we should be evicting in-use surfaces
        even if the size of the in-use surfaces has dropped below maximumInUseBytes,
        otherwise we can get stuck in an infinite loop with 0 cached surfaces
        and 1+ in-use surfaces.

2014-05-05  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Remove regionLayoutUpdate event
        https://bugs.webkit.org/show_bug.cgi?id=132564

        Reviewed by Simon Fraser.

        The regionLayoutUpdate event was removed from the regions spec and was replaced by two other events: 
        regionOversetChange and regionFragmentChange.

        No new tests needed, this patch removes a feature.

        * dom/EventNames.h:
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::dispatchRegionLayoutUpdateEvent): Deleted.
        * dom/WebKitNamedFlow.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::resetNonPersistentData):
        (WebCore::InspectorCSSAgent::willRemoveNamedFlow):
        (WebCore::UpdateRegionLayoutTask::UpdateRegionLayoutTask): Deleted.
        (WebCore::UpdateRegionLayoutTask::scheduleFor): Deleted.
        (WebCore::UpdateRegionLayoutTask::unschedule): Deleted.
        (WebCore::UpdateRegionLayoutTask::reset): Deleted.
        (WebCore::UpdateRegionLayoutTask::timerFired): Deleted.
        (WebCore::InspectorCSSAgent::didUpdateRegionLayout): Deleted.
        (WebCore::InspectorCSSAgent::regionLayoutUpdated): Deleted.
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didUpdateRegionLayoutImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didUpdateRegionLayout): Deleted.
        * inspector/protocol/CSS.json:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::updateOversetState):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::removeRegionFromThread):
        (WebCore::RenderNamedFlowThread::layout):
        (WebCore::RenderNamedFlowThread::dispatchRegionLayoutUpdateEventIfNeeded): Deleted.
        (WebCore::RenderNamedFlowThread::regionLayoutUpdateEventTimerFired): Deleted.
        * rendering/RenderNamedFlowThread.h:

2014-05-05  Rik Cabanier  <cabanier@adobe.com>

        Enhance IDL compiler so it supports unrestricted float and double
        https://bugs.webkit.org/show_bug.cgi?id=132460

        Reviewed by Dirk Schulze.

        Updated IDL compiler so it supports unrestricted types.
        Also updated the IDL files so they use unrestricted float and
        double.

        Tests:
        * canvas/philip/tests/2d.gradient.linear.nonfinite.html:
        * canvas/philip/tests/2d.gradient.object.invalidoffset.html:
        * canvas/philip/tests/2d.gradient.radial.nonfinite.html:
        * canvas/philip/tests/2d.imageData.get.nonfinite.html:
        * canvas/philip/tests/2d.imageData.put.nonfinite.html:
        * canvas/philip/tests/2d.missingargs.html:
        * fast/canvas/canvas-getImageData-invalid-expected.txt:
        * fast/canvas/canvas-putImageData-expected.txt:
        * fast/canvas/canvas-putImageData.js:

        * Modules/battery/BatteryManager.idl:
        * Modules/gamepad/Gamepad.idl:
        * Modules/geolocation/Coordinates.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/VideoPlaybackQuality.idl:
        * Modules/mediastream/MediaSourceStates.idl:
        * Modules/proximity/DeviceProximityEvent.idl:
        * Modules/speech/SpeechGrammar.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognitionAlternative.idl:
        * Modules/speech/SpeechSynthesisEvent.idl:
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioProcessingEvent.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetGValueTypeName):
        (GetGlibTypeName):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):
        (JSValueToNative):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetObjCType):
        (GenerateHeader):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * css/CSSPrimitiveValue.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/ClientRect.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/Touch.idl:
        * dom/TransitionEvent.idl:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitTransitionEvent.idl:
        * dom/WheelEvent.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMeterElement.idl:
        * html/HTMLProgressElement.idl:
        * html/MediaController.idl:
        * html/TextMetrics.idl:
        * html/TimeRanges.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/track/DataCue.idl:
        * html/track/TextTrackCue.idl:
        * html/track/VTTCue.idl:
        * html/track/VTTRegion.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * page/DOMWindow.idl:
        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        * page/PerformanceResourceTiming.idl:
        * page/SpeechInputResult.idl:
        * page/WebKitPoint.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimatedNumber.idl:
        * svg/SVGAnimationElement.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGGlyphRefElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumber.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSegArcAbs.idl:
        * svg/SVGPathSegArcRel.idl:
        * svg/SVGPathSegCurvetoCubicAbs.idl:
        * svg/SVGPathSegCurvetoCubicRel.idl:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl:
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl:
        * svg/SVGPathSegCurvetoQuadraticAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticRel.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl:
        * svg/SVGPathSegLinetoAbs.idl:
        * svg/SVGPathSegLinetoHorizontalAbs.idl:
        * svg/SVGPathSegLinetoHorizontalRel.idl:
        * svg/SVGPathSegLinetoRel.idl:
        * svg/SVGPathSegLinetoVerticalAbs.idl:
        * svg/SVGPathSegLinetoVerticalRel.idl:
        * svg/SVGPathSegMovetoAbs.idl:
        * svg/SVGPathSegMovetoRel.idl:
        * svg/SVGPoint.idl:
        * svg/SVGRect.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGZoomEvent.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * xml/XPathResult.idl:

2014-05-05  Tim Horton  <timothy_horton@apple.com>

        Use a layer delegate instead of web_disableAllActions wherever possible
        https://bugs.webkit.org/show_bug.cgi?id=132560
        <rdar://problem/16459284>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::commonInit):
        If we own the platform layer, set its delegate to the action-disabling WebActionDisablingCALayerDelegate.
        If we don't, its actual owner might want to control the delegate, so continue using web_disableAllActions.

        * platform/graphics/cocoa/WebActionDisablingCALayerDelegate.h: Added.
        * platform/graphics/cocoa/WebActionDisablingCALayerDelegate.mm: Added.
        (+[WebActionDisablingCALayerDelegate shared]):
        (-[WebActionDisablingCALayerDelegate actionForLayer:forKey:]):
        Add a class that can act as the delegate of a CALayer, and disables all actions.

        * platform/graphics/cocoa/WebCoreCALayerExtras.h: Renamed from Source/WebCore/platform/graphics/mac/WebCoreCALayerExtras.h.
        * platform/graphics/cocoa/WebCoreCALayerExtras.mm: Renamed from Source/WebCore/platform/graphics/mac/WebCoreCALayerExtras.mm.
        (-[CALayer web_disableAllActions]):
        Move WebCoreCALayerExtras from mac/ to cocoa/.

2014-05-05  Martin Hock  <mhock@apple.com>

        Session-aware plugin autostart data
        https://bugs.webkit.org/show_bug.cgi?id=131758
        <rdar://problem/15906540>

        Reviewed by Alexey Proskuryakov.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):
        * page/PlugInClient.h:

2014-05-05  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Elements with overflow:auto are not painted inside regions when following a float
        https://bugs.webkit.org/show_bug.cgi?id=131161

        Reviewed by David Hyatt.

        When a float-avoiding element (such as overflow:auto) is flowed into a flow thread after a float, its 
        logical left is not set on its frameRect or its layer's topLeft, but is instead kept in its RenderBoxRegionInfo
        structure. In some situation, this causes paint rejection to kick-in because intersecting the layer's rect
        (which DOESN'T contain the logical left from the region info object) with the computed background rect 
        (which contains the logical left from the region info object) results in an empty rect.

        Test: fast/regions/overflow-auto-after-float.html

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

2014-05-05  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] Slider displayed wrong in regions
        https://bugs.webkit.org/show_bug.cgi?id=132243

        Reviewed by Mihnea Ovidenie.

        In case a box didn't have a range, getRegionRangeForBox was searching for
        the top-most unplittable ancestor. This is not correct in every case. It's
        possible to have a box with range that has children without ranges (e.g. an
        absolutely positioned inline box with shadow descendants).

        I've modified getRegionRangeForBox to search for the first ancestor that
        has a cached range and use that instead of looking for an unsplittable box.
        The range of the box is the region at the top of the box, clamped by the
        range of the ancestor. This will be correct all the time once all the layout
        systems are region range aware and are able to cache it.

        Test: fast/regions/positioned-slider-in-regions.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::hasRegionRangeForBox):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        * rendering/RenderFlowThread.h:

2014-05-05  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] ASSERT when hovering over region
        https://bugs.webkit.org/show_bug.cgi?id=128809

        Reviewed by Mihnea Ovidenie.

        There's no point in hit-testing a box for a region if it's not contained inside
        that region.

        Test: fast/regions/hit-test-box-non-containing-region.html

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

2014-05-04  Andreas Kling  <akling@apple.com>

        Optimize JSRopeString for resolving directly to AtomicString.
        <https://webkit.org/b/132548>

        Add two bindings generator attributes for parameters to influence
        the way that JS rope strings are resolved:

        - AtomicString

            Generates code that avoids allocating a new StringImpl if there
            is already an existing AtomicString we can reuse.

        - RequiresExistingAtomicString

            Generates code that fails immediately if the provided string
            is not found in the AtomicString table. This is now used for
            document.getElementById(), and works because any existing ID
            is guaranteed to be in the table.

        Reviewed by Filip Pizlo.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        (JSValueToNative):
        * bindings/scripts/IDLAttributes.txt:
        * dom/Document.idl:

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

        [iOS WK2] Compositing layers in iframes are misplaced
        https://bugs.webkit.org/show_bug.cgi?id=132554
        <rdar://problem/16203027>

        Reviewed by Benjamin Poulain.

        Have requiresScrollLayer() only consider frameView.delegatesScrolling()
        for the main frame, so that iframes get scroll layers (even though they
        will never scroll), so that the rest of geometry code works as on other
        platforms.

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

2014-05-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr in m_taskTimer of Notification class
        https://bugs.webkit.org/show_bug.cgi?id=132544

        Reviewed by Andreas Kling.

        No new tests, no behavior change.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * Modules/notifications/Notification.h: Use std::unique_ptr instead of OwnPtr.

2014-05-04  Tim Horton  <timothy_horton@apple.com>

        Long hangs under IOSurfacePool::evict
        https://bugs.webkit.org/show_bug.cgi?id=132549
        <rdar://problem/16769469>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::willAddSurface):
        Run eviction before adding the new surface to m_bytesCached/m_inUseBytesCached.
        We use the additionalSize parameter to make space for the new surface.

        (WebCore::IOSurfacePool::evict):
        If we want to free up the entire pool, we can do so by throwing away everything.
        This also avoids an underflow if additionalSize is larger than the maximum pool size.

2014-05-04  Pratik Solanki  <psolanki@apple.com>

        Shortcircuit shouldUseCredentialStorage callback
        https://bugs.webkit.org/show_bug.cgi?id=132308
        <rdar://problem/16806708>

        Reviewed by Alexey Proskuryakov.

        If we are going to return true from the shouldUseCredentialStorage callback then we don't
        really need to have CFNetwork/Foundation call us. We can just disable the callback and
        CFNetwork will assume true. Add a separate subclass that implements this callback when we
        need to return false. We can also eliminate the corresponding async callbacks. This avoids
        pingponging between dispatch queue and main thread in the common case.

        No new tests because no change in functionality.

        * WebCore.exp.in:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::makeDelegate):
        (WebCore::ResourceHandle::delegate):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleWithCredentialStorageAsOperationQueueDelegate connectionShouldUseCredentialStorage:]):
        * platform/network/soup/ResourceHandleSoup.cpp:

2014-05-04  Brent Fulgham  <bfulgham@apple.com>

        [iOS] deviceScaleFactor is being double-applied when rendering captions in full screen mode 
        https://bugs.webkit.org/show_bug.cgi?id=132481
        <rdar://problem/16507482>

        Reviewed by Jer Noble.

        Add a new 'syncTextTrackBounds' method (and relaying functions) to keep the text track container in sync
        with changes to the video player's display layer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::syncTextTrackBounds: Added.
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Don't set the platform scale factor here. It is already
        being accounted for in the createTextTrackRepresentationImage method.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Synchronize the text track representation
        with any new video layer changes.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::syncTextTrackBounds): Added.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::syncTextTrackBounds): Added.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): Use new sync function.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenFrame): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::syncTextTrackBounds): Added. Keep the text track layer size in sync with
        the current video layer size. This may change during animations, rotations, etc.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setTextTrackRepresentation): Use new sync function.

2014-05-04  Beth Dakin  <bdakin@apple.com>

        Top content inset: Margin tiles should not display in the inset area when pinned 
        to the top of the page
        https://bugs.webkit.org/show_bug.cgi?id=132535
        -and corresponding-
        <rdar://problem/16613039>

        Reviewed by Simon Fraser.

        Prior to this change, topContentInset was implemented by positioning 
        RenderLayerCompositor’s m_rootContentLayer based on the inset value. In order to 
        ensure that no content is displayed in the inset area when we are pinned to the 
        top of the page, we’ll have to take a different approach. In this patch, when you 
        are pinned to the top of the page, the m_rootContentLayer is positioned at (0,0), 
        much like it would be without an inset, but the m_clip layer IS positioned at (0, 
        topContentInset). Then for all y-scroll values between 0 and topContentInset, the 
        positions of the clip layer and the contents layer are adjusted so that the clip 
        layer approaches a position of (0,0), and the root layer approaches a position of 
        (0, topContentInset). This makes sure that any content above the top the document 
        is aways clipped out of the inset area.

        In order to achieve this, the scrolling thread needs to know about the 
        topContentInset, the clip layer, and the root contents layer.

        AsyncScrollingCoordinator::updateScrollingNode() now takes an additional parameter 
        for the clip layer. Also export the topContentInset symbol for UI-side 
        compositing.
        * WebCore.exp.in:

        Here is the new computation. Implemented in one spot that can be called from the 
        scrolling thread, AsyncScrollingCoordinator and RenderLayerCompositor.
        * page/FrameView.cpp:
        (WebCore::FrameView::yPositionForInsetClipLayer):
        (WebCore::FrameView::yPositionForRootContentLayer):
        * page/FrameView.h:

        Set the topContentInset, the insetClipLayer, and the scrolledContentsLayer when 
        appropriate.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):

        Set or sync the positions for the inset layer and the contents layer.
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        * page/scrolling/AsyncScrollingCoordinator.h:

        Convenience functions for getting the clipLayer() and the rootContentLayer() from 
        the RenderLayerCompositor.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::insetClipLayerForFrameView):
        (WebCore::ScrollingCoordinator::rootContentLayerForFrameView):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateScrollingNode):

        ScrollingStateScrolling nodes have two new members now. m_insetClipLayer and 
        m_topContentInset. We can use m_scrolledContentsLayer for the rootContentsLayer 
        since previously that member was not used for FrameViews; it was only used for 
        accelerated overflow:scroll nodes.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setTopContentInset):
        (WebCore::ScrollingStateScrollingNode::setInsetClipLayer):
        * page/scrolling/ScrollingStateScrollingNode.h:

        Similarly, ScrollingTreeScrollingNode has two new members for m_topContentInset 
        and m_clipLayer.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::topContentInset):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):

        Compute positions for the two new layers.
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

        Now use the static FrameView functions to compute the positions for these layers.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::positionForClipLayer):
        (WebCore::RenderLayerCompositor::clipLayer):
        (WebCore::RenderLayerCompositor::rootContentLayer):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        * rendering/RenderLayerCompositor.h:

2014-05-04  Benjamin Poulain  <benjamin@webkit.org>

        Clear the Selector Query caches on memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=132545

        Reviewed by Andreas Kling.

        The Selector Query Cache can use quite a bit of memory if many
        complex selectors are compiled. This patch makes sure the cache gets
        cleared on memory pressure.

        * dom/Document.cpp:
        (WebCore::Document::clearSelectorQueryCache):
        (WebCore::Document::setCompatibilityMode):
        (WebCore::Document::updateBaseURL):
        * dom/Document.h:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQueryCache::invalidate): Deleted.
        * dom/SelectorQuery.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):

2014-05-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert OwnPtr to std::unique_ptr in CDM
        https://bugs.webkit.org/show_bug.cgi?id=132467

        Reviewed by Andreas Kling.

        Use std::unique_ptr in CDM class.

        No new tests, no behavior change.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::create):
        (WebCore::CDM::CDM):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.h:
        (WebCore::CDMPrivateMediaPlayer::CDMPrivateMediaPlayer):
        (WebCore::CDMPrivateMediaPlayer::create):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::create):
        (WebCore::MediaKeys::MediaKeys):
        * Modules/encryptedmedia/MediaKeys.h:
        * WebCore.exp.in:

2014-05-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r168232.
        https://bugs.webkit.org/show_bug.cgi?id=132543

        broke ~15 tests on WK2 debug (Requested by kling on #webkit).

        Reverted changeset:

        "Shortcircuit shouldUseCredentialStorage callback"
        https://bugs.webkit.org/show_bug.cgi?id=132308
        http://trac.webkit.org/changeset/168232

2014-05-03  Andreas Kling  <akling@apple.com>

        RenderSVGResourcePattern should deal in RenderElement&.
        <https://webkit.org/b/132536>

        Tweak buildPattern() and buildTileImageTransform() to take RenderElement&
        instead of RenderObject* since we know that these functions will always
        be called with non-null RenderElement subclasses.

        Reviewed by Sam Weinig.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::shouldTransformOnTextPainting):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        * rendering/svg/RenderSVGResourcePattern.h:

2014-05-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: optimize direct / indirect adjacent's traversal backtracking
        https://bugs.webkit.org/show_bug.cgi?id=132319

        Reviewed by Benjamin Poulain.

        Since adjacent backtracking stack reference is pre-allocated
        in prologue in http://trac.webkit.org/changeset/166834,
        clearing stack phase is not needed. So we can drop
        JumpToClearAdjacentTail from backtracking action and simplify
        backtracking handling.
        And optimize direct / indirect adjacent's traversal backtracking by
        using appropriate backtracking height.

        When solving adjacent traversal backtracking action,
        1) When there's no descendant relation on the right, traversal
        failure becomes global failure.
        2) When `tagNameMatchedBacktrackingStartHeightFromDescendant` ==
        `heightFromDescendant` + 1, the descendant backtracking starts with
        the parent of the current element. So we can use the current element
        and the backtracking action is JumpToDescendantTreeWalkerEntryPoint.
        3) Otherwise, currently we take the conservative approach,
        JumpToDescendantTail.

        NOTE:
        And if `hasDescendantRelationOnTheRight` is true and there's no child
        fragment on the right, the backtracking element register is not
        effective. So we should ensure that fragment doesn't use the
        backtracking element register. Such a fragment fulfills the following
        conditions. 1. tagNameMatchedBacktrackingStartHeightFromDescendant is
        always 1 (tagNames.size(), that contains only descendant fragment) 2.
        heightFromDescendant is always 0 (-- See
        computeBacktrackingHeightFromDescendant implementation) Therefore such
        a fragment's action always becomes
        JumpToDescendantTreeWalkerEntryPoint. So we can ensure that the
        backtracking element register is not used.

        Test: fast/selectors/backtracking-adjacent.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::solveDescendantBacktrackingActionForChild):
        (WebCore::SelectorCompiler::solveAdjacentTraversalBacktrackingAction):
        (WebCore::SelectorCompiler::solveBacktrackingAction):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::isAfterChildRelation): Deleted.

2014-05-03  Andreas Kling  <akling@apple.com>

        Clear the JSString cache when under memory pressure.
        <https://webkit.org/b/132539>

        The WeakGCMap used for fast mapping from StringImpl* to JSString*
        can actually get pretty big, and if we find ourselves under memory
        pressure, it's entirely inessential.

        1.1 MB progression on Membuster3.

        Reviewed by Sam Weinig.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):

2014-05-03  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Support disabling speculative tiling
        https://bugs.webkit.org/show_bug.cgi?id=132512

        Reviewed by Tim Horton.

        Move ScrollView::setScrollVelocity() and ScrollView::computeCoverageRect() to FrameView.
        When speculative tiling is disabled, return an unmodified exposed rect.

        Time/velocity adjusments are completely unnecessary at the moment since speculative tiling
        is enabled as soon as the view scrolls.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollVelocity):
        (WebCore::FrameView::computeCoverageRect):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::setScrollVelocity): Deleted.
        (WebCore::ScrollView::computeCoverageRect): Deleted.

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

        Shortcircuit shouldUseCredentialStorage callback
        https://bugs.webkit.org/show_bug.cgi?id=132308
        <rdar://problem/16806708>

        Reviewed by Alexey Proskuryakov.

        If we are going to return true from the shouldUseCredentialStorage callback then we don't
        really need to have CFNetwork/Foundation call us. We can just disable the callback and
        CFNetwork will assume true. Add a separate subclass that implements this callback when we
        need to return false. We can also eliminate the corresponding async callbacks. This avoids
        pingponging between dispatch queue and main thread in the common case.

        No new tests because no change in functionality.

        * WebCore.exp.in:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::makeDelegate):
        (WebCore::ResourceHandle::delegate):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleWithCredentialStorageAsOperationQueueDelegate connectionShouldUseCredentialStorage:]):
        * platform/network/soup/ResourceHandleSoup.cpp:

2014-05-03  Andreas Kling  <akling@apple.com>

        Invalidate scrollbars when custom scrollbar style changes dynamically.
        <https://webkit.org/b/132529>

        Add a ScrollView::styleDidChange() and call that from RenderView::styleDidChange()
        so that the scrollbars are sure to get repainted with potentially different style.

        Reviewed by Antti Koivisto.

        Test: fast/css/scrollbar-dynamic-style-change.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::styleDidChange):
        * platform/ScrollView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::styleDidChange):

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

        Very fuzzy layers under non-decompasable matrices
        https://bugs.webkit.org/show_bug.cgi?id=132516
        <rdar://problem/16717478>

        Reviewed by Sam Weinig.
        
        r155977 added code to modify layer contentsScale based on a root-relative
        scale, so that scaled-up layers remained sharp. It does this by decomposing
        an accumulated matrix, but failed to test whether the decomposition
        succeeded. This would result in contentsScale of 0, which is clamped to 0.1,
        resulting in very fuzzy layers.
        
        Fix by testing for success of decomposition.

        Test: compositing/contents-scale/non-decomposable-matrix.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::maxScaleFromTransform):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::decompose2): Return early for identity matrices,
        with fix for m11 and m22.
        (WebCore::TransformationMatrix::decompose4): Return early for identity matrices.
        * platform/graphics/transforms/TransformationMatrix.h:
        Make Decomposed2Type and Decomposed4Type into C++ structs.
        (WebCore::TransformationMatrix::Decomposed2Type::operator==): Added to make it easier
        to write code that asserts that decomposition is correct.
        (WebCore::TransformationMatrix::Decomposed4Type::operator==): Ditto.

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

        Fix crash in WebKit client app when zooming
        https://bugs.webkit.org/show_bug.cgi?id=132475
        <rdar://problem/16703405>

        Reviewed by Tim Horton.

        It's possible for a WebTiledBackingLayer CALayer to remain in the CALayer
        hierarchy after we've called -invalidate on it, which clears the _tileController.
        Project the getters against null derefs to handle this.

        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer isOpaque]):
        (-[WebTiledBackingLayer acceleratesDrawing]):
        (-[WebTiledBackingLayer contentsScale]):

2014-05-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r168209.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::write):

2014-05-03  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Fieldset legend has a horizontal line through, when the fieldset is painted on odd device pixel position.
        https://bugs.webkit.org/show_bug.cgi?id=132521
        <rdar://problem/16803305>

        Reviewed by Simon Fraser.

        Use device pixel snapping when the fieldset's border gets clipped out for the legend's text. It ensures that
        the device pixel snapped border gets properly clipped out.

        Existing fieldset tests cover it.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):

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

        CodeCleanup: Remove *MaintainsPixelAlignment from GraphicsLayer*.
        https://bugs.webkit.org/show_bug.cgi?id=132501

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setMaintainsPixelAlignment): Deleted.
        (WebCore::GraphicsLayer::maintainsPixelAlignment): Deleted.
        (WebCore::GraphicsLayer::pixelAlignmentOffset): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::computePixelAlignment):
        (WebCore::GraphicsLayerCA::setMaintainsPixelAlignment): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::keepLayersPixelAligned): Deleted.
        * rendering/RenderLayerCompositor.h:

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

        [iOS WK2] Tiled layer content missing on pages with animated tiled layers
        https://bugs.webkit.org/show_bug.cgi?id=132507
        <rdar://problem/16765740>

        Reviewed by Tim Horton.

        Updating the tiling area of content TileControllers while
        CSS animations are running depends on GraphicsLayerUpdater
        triggering repeated layer flushes. With UI-side compositing, those
        flushes were happening, but nothing triggered RemoteLayerTreeDrawingArea
        to flush changes to the UI process.
        
        Fix by having RenderLayerCompositor schedule a flush, rather
        than just doing a flush, in response to GraphicsLayerUpdater.
        
        Also change the name of the GraphicsLayerUpdaterClient function
        to indicate that it suggests that a flush is required soon, rather than
        that the flushing has to be synchronous.

        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::displayRefreshFired):
        * platform/graphics/GraphicsLayerUpdater.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushLayersSoon):
        (WebCore::RenderLayerCompositor::flushLayers): Deleted.
        * rendering/RenderLayerCompositor.h:

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

        Use displayNameForTrack instead of textTrack->label() for captions.
        https://bugs.webkit.org/show_bug.cgi?id=131311

        Reviewed by Darin Adler.

        Use the same mechanism as the desktop to build the captions list so it has the correct
        names in the correct order including none and automatic.

        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::setMediaElement):
        move legible track code into updateLegibleOptions()

        (WebVideoFullscreenModelMediaElement::handleEvent):
        updateLegibleOptions on addTrack and removeTrack

        (WebVideoFullscreenModelMediaElement::selectLegibleMediaOption):
        select the corresponding TextTrack on HTMLMediaElement.

        (WebVideoFullscreenModelMediaElement::updateLegibleOptions):
        use the same mechanism as desktop to build the captions menu.

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

        CSS-based Media Controls Show Different times content longer than 1 hour.
        https://bugs.webkit.org/show_bug.cgi?id=132443

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-timeline-container .hour-long-time):
        This class has a wider width for longer duration times.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateDuration):
        Apply .hour-long-time class as appropriate.

        (Controller.prototype.formatTime):
        More robust formatting to handle hours.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-timeline-container .hour-long-time):
        This class has a wider width for longer duration times.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.formatTime):
        More robust formatting to handle hours.

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

        [MSE][Mac] AVAssetTrack returns incorrect track size
        https://bugs.webkit.org/show_bug.cgi?id=132469

        Reviewed by Brent Fulgham.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):  Remove the sizeChanged() notification.
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame): Cache the last parsed video frame size.
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize): Return the cached value.

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

        Subpixel rendering[iOS]: Use pixelSnappedRoundedRectForPainting() to clip text area rect.
        https://bugs.webkit.org/show_bug.cgi?id=132499
        <rdar://problem/16631050>

        Reviewed by Simon Fraser.

        Snap to device pixels properly instead of relying on float arithmetics while converting from RoundedRect
        to FloatRoundedRect. This is the second, cleanup part of the text-area decoration is off-by-one painting issue.

        Currently not testable.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintTextFieldDecorations):

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

        Remove HistogramSupport.
        <https://webkit.org/b/132354>

        Prune some leftover Chromium gunk that no other ports ever used.

        Reviewed by Simon Fraser.

        * CMakeLists.txt:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBHistograms.h: Removed.
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::open):
        (WebCore::IDBBackingStoreLevelDB::openInMemory):
        (WebCore::recordInternalError): Deleted.
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::cssPropertyID):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::histogramMutationEventUsage): Deleted.
        * dom/ShadowRoot.cpp:
        * fileapi/Blob.cpp:
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        * platform/HistogramSupport.cpp: Removed.
        * platform/HistogramSupport.h: Removed.
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):
        (WebCore::histogramLevelDBError): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateNeedsCompositedScrolling):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

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

        Stop flipping the ImageControlsButton
        <rdar://problem/16773238> and https://bugs.webkit.org/show_bug.cgi?id=132502

        Reviewed by Tim Horton.

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

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

        Fullscreen UI does not appear after WebProcess has crashed
        https://bugs.webkit.org/show_bug.cgi?id=132442

        Reviewed by Darin Adler.

        Clean up immediately when there is a WebProcess crash.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::invalidate):
        Clean-up resources immediately.

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

        Unreviewed, rolling out r168192.
        https://bugs.webkit.org/show_bug.cgi?id=132498

        Was not the correct fix (blurry!) (Requested by bfulgham_ on
        #webkit).

        Reverted changeset:

        "[iOS] deviceScaleFactor is being double-applied when
        rendering captions in full screen mode"
        https://bugs.webkit.org/show_bug.cgi?id=132481
        http://trac.webkit.org/changeset/168192

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

        Remove Blob contentDisposition handling
        https://bugs.webkit.org/show_bug.cgi?id=132490

        Reviewed by Sam Weinig.

        Dead code.

        * platform/network/BlobData.h:
        (WebCore::BlobData::contentDisposition): Deleted.
        (WebCore::BlobData::setContentDisposition): Deleted.
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::registerBlobURLForSlice):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        * platform/network/BlobStorageData.h:
        (WebCore::BlobStorageData::create):
        (WebCore::BlobStorageData::contentType):
        (WebCore::BlobStorageData::BlobStorageData):
        (WebCore::BlobStorageData::contentDisposition): Deleted.

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

        Implement FormData decoding using KeyedDecoder
        https://bugs.webkit.org/show_bug.cgi?id=132494

        Reviewed by Tim Horton.

        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeEnum):
        * platform/network/FormData.cpp:
        (WebCore::decodeElement):
        (WebCore::FormData::decode):
        * platform/network/FormData.h:

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

        [iOS] deviceScaleFactor is being double-applied when rendering captions in full screen mode
        https://bugs.webkit.org/show_bug.cgi?id=132481

        Reviewed by Jer Noble.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Don't set the platform scale factor here. It is already
        being accounted for in the createTextTrackRepresentationImage method.

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

        [iOS WK2] Don't create backing store for -webkit-overflow-scrolling:touch that can't scroll
        https://bugs.webkit.org/show_bug.cgi?id=132487
        <rdar://problem/16758041>

        Reviewed by Sam Weinig.

        Previously, -webkit-overflow-scrolling:touch would cause us to make compositing
        layers for any element that had overflow: auto or scroll on either axis. This
        created lots of backing store when not required.
        
        Improve this to only create compositing for scrolling when there is actually
        scrollable overflow. This makes things slightly more complex, because we can
        only know when layout is up to date.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint): usesCompositedScrolling() tells
        us if we're actually doing composited overflow.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasTouchScrollableOverflow):
        (WebCore::RenderLayer::handleTouchEvent):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Only update
        scrolling and clipping layers if layout is not pending.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateScrollingLayers): The caller calls
        updateInternalHierarchy(), so no need to do it here.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForScrolling): We
        can only determine that we're scrollable after layout.
        (WebCore::isStickyInAcceleratedScrollingLayerOrViewport):
        (WebCore::isMainFrameScrollingOrOverflowScrolling):

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

        Clean up FormDataElement
        https://bugs.webkit.org/show_bug.cgi?id=132483

        Reviewed by Sam Weinig.

        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        (WebCore::FormData::deepCopy):
        (WebCore::FormData::expandDataStore):
        (WebCore::FormData::flatten):
        (WebCore::FormData::resolveBlobReferences):
        (WebCore::FormData::generateFiles):
        (WebCore::FormData::hasGeneratedFiles):
        (WebCore::FormData::hasOwnedGeneratedFiles):
        (WebCore::FormData::removeGeneratedFilesIfNeeded):
        (WebCore::encodeElement):
        (WebCore::decodeElement):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::operator==):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        (WebCore::setHTTPBody):
        * platform/network/curl/FormDataStreamCurl.cpp:
        (WebCore::FormDataStream::read):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::setupFormData):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::addFormElementsToSoupMessage):

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

        [iOS] Wireless playback button not blue when active
        https://bugs.webkit.org/show_bug.cgi?id=132473

        Reviewed by Simon Fraser.

        The playback button's class was being set to 'undefined', due to Controller.ClassNames.active being undefined.

        * Modules/mediacontrols/mediaControlsApple.js:

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

        Don't abuse Blob deserialization constructor in WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=132478

        Reviewed by Sam Weinig.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::enqueueBlobFrame): This is the important change -
        Blob::create was called for no reason. If the blob came from a worker, it was
        already cloned for cross-thread messaging, otherwise there is no reason to make
        a new one.

        * fileapi/Blob.h:
        (WebCore::Blob::deserialize):
        (WebCore::Blob::create): Deleted.
        * fileapi/File.h:
        (WebCore::File::deserialize):
        (WebCore::File::create): Deleted.
        Renamed a special case of "create" function to avoid explaining what it is for.

        * Modules/websockets/ThreadableWebSocketChannel.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::send): Print a full URL in LOG(),
        not one shortened to 1024 characters.
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendBlob):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):

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

        Add and implement KeyedDecoder::decodeBytes
        https://bugs.webkit.org/show_bug.cgi?id=132479

        Reviewed by Tim Horton.

        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeBytes):

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

        [iOS] WebKit2 File Upload Support
        https://bugs.webkit.org/show_bug.cgi?id=132024

        Reviewed by Enrica Casucci.

        * English.lproj/Localizable.strings:
        New localized strings for <input type="file"> on iOS.

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

        AX: WK2: iOS web page scrolling doesn't work with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=132028

        Reviewed by Mario Sanchez Prada.

        With the AX tree residing in the WebProcess, scrolling needs to be implemented in
        WebCore using accessibilityScroll: in order for accessibility clients to scroll through the AX API.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::scrollViewAncestor):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityConvertPointToViewSpace:]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollToVisible]):
        (-[WebAccessibilityObjectWrapper accessibilityScroll:]):
        (-[WebAccessibilityObjectWrapper postScrollStatusChangeNotification]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollPosition]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollSize]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollVisibleRect]):

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

        Pause playback on exit fullscreen when inline playback not allowed.
        https://bugs.webkit.org/show_bug.cgi?id=132450

        Reviewed by Jer Noble.

        Use correct method of determining if inline playback is allowed.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        Use m_mediaSession->requiresFullscreenForVideoPlayback to detect if inline playback is allowed.

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::requestExitFullscreen):
        Prevent duplicate exit requests.

2014-05-02  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Remove support for non-separable blend modes from background-blend-mode
        https://bugs.webkit.org/show_bug.cgi?id=132327

        Reviewed by Dean Jackson.

        Removed support for non-separable background blend modes from the CSS parser.
        Covered by existing tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):

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

        Clean up #include <OwnPtr.h>|<PassOwnPtr.h> in Supplementable classes
        https://bugs.webkit.org/show_bug.cgi?id=132466

        Reviewed by Tim Horton.

        Since r168144, Supplementable classes don't need to include OwnPtr.h or PassOwnPtr.h.
        Clean up those inclusions.

        No new tests, just clean up patch.

        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/gamepad/NavigatorGamepad.cpp:
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::create): Deleted. Don't need to have a factory function.
        * Modules/geolocation/GeolocationController.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediastream/UserMediaController.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/notifications/NotificationController.cpp:
        * Modules/quota/StorageErrorCallback.h:
        * Modules/vibration/Vibration.h:
        * Modules/webdatabase/Database.cpp:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocket.cpp:
        * Modules/websockets/WebSocket.h:

2014-05-01  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove TiledBackingStore stuff from Frame
        https://bugs.webkit.org/show_bug.cgi?id=132458

        Reviewed by Andreas Kling.

        Although TiledBackingStore is using for the CoordinatedGraphics,
        CoordinatedGraphics does not use tiledBackingStore of Frame.

        This patch removed TiledBackingStore related code of the Frame.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::setView):
        (WebCore::Frame::setTiledBackingStoreEnabled): Deleted.
        (WebCore::Frame::tiledBackingStorePaintBegin): Deleted.
        (WebCore::Frame::tiledBackingStorePaint): Deleted.
        (WebCore::Frame::tiledBackingStorePaintEnd): Deleted.
        (WebCore::Frame::tiledBackingStoreContentsRect): Deleted.
        (WebCore::Frame::tiledBackingStoreVisibleRect): Deleted.
        (WebCore::Frame::tiledBackingStoreBackgroundColor): Deleted.
        * page/Frame.h:
        (WebCore::Frame::tiledBackingStore): Deleted.
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setTiledBackingStoreEnabled): Deleted.
        * page/Settings.h:
        (WebCore::Settings::tiledBackingStoreEnabled): Deleted.

2014-05-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate all uses of DeviceMotionController and DeviceOrientationController to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=132461

        Unreviewed build fix.

        No new tests.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * platform/ios/DeviceMotionClientIOS.h:
        (WebCore::DeviceMotionClientIOS::create): Deleted.
        * platform/ios/DeviceOrientationClientIOS.h:
        (WebCore::DeviceOrientationClientIOS::create): Deleted.

2014-05-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert OwnPtr and PassOwnPtr uses to std::unique_ptr in Supplement
        https://bugs.webkit.org/show_bug.cgi?id=132165

        Reviewed by Darin Adler.

        According to convert from PassOwnPtr to std::unique_ptr, provideTo() callers also begin
        to use std::make_unique.

        * Modules/battery/BatteryController.cpp:
        (WebCore::provideBatteryTo):
        * Modules/battery/BatteryController.h:
        * Modules/battery/NavigatorBattery.cpp:
        (WebCore::NavigatorBattery::from):
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::from):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::from):
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::from):
        * Modules/indexeddb/PageGroupIndexedDatabase.cpp:
        (WebCore::PageGroupIndexedDatabase::from):
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::provideUserMediaTo):
        (WebCore::UserMediaController::create): Deleted.
        * Modules/mediastream/UserMediaController.h:
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::provideNavigatorContentUtilsTo):
        (WebCore::NavigatorContentUtils::create): Deleted.
        * Modules/navigatorcontentutils/NavigatorContentUtils.h:
        * Modules/notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::from):
        * Modules/notifications/NotificationController.cpp:
        (WebCore::provideNotification):
        (WebCore::NotificationController::create): Deleted.
        * Modules/notifications/NotificationController.h:
        * Modules/notifications/WorkerGlobalScopeNotifications.cpp:
        (WebCore::WorkerGlobalScopeNotifications::from):
        * Modules/proximity/DeviceProximityController.cpp:
        (WebCore::provideDeviceProximityTo):
        (WebCore::DeviceProximityController::create): Deleted.
        * Modules/proximity/DeviceProximityController.h:
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::from):
        * Modules/quota/NavigatorStorageQuota.cpp:
        (WebCore::NavigatorStorageQuota::from):
        * Modules/quota/WorkerNavigatorStorageQuota.cpp:
        (WebCore::WorkerNavigatorStorageQuota::from):
        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        (WebCore::DOMWindowSpeechSynthesis::from):
        * Modules/speech/SpeechRecognitionController.cpp:
        (WebCore::provideSpeechRecognitionTo):
        * Modules/vibration/Vibration.cpp:
        (WebCore::provideVibrationTo):
        (WebCore::Vibration::create): Deleted.
        * Modules/vibration/Vibration.h:
        * dom/DeviceMotionController.cpp:
        (WebCore::provideDeviceMotionTo):
        (WebCore::DeviceMotionController::create): Deleted.
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::provideDeviceOrientationTo):
        (WebCore::DeviceOrientationController::create): Deleted.
        * dom/DeviceOrientationController.h:
        * page/SpeechInput.cpp:
        (WebCore::provideSpeechInputTo):
        (WebCore::SpeechInput::create): Deleted.
        * page/SpeechInput.h:
        * platform/Supplementable.h:
        (WebCore::Supplement::provideTo):
        (WebCore::Supplementable::provideSupplement):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::from):

2014-05-01  Andreas Kling  <akling@apple.com>

        HTMLMediaElement: Remove two unnecessary virtual overrides.
        <https://webkit.org/b/132445>

        Now that ENABLE_PLUGIN_PROXY_FOR_VIDEO is gone, we can remove
        these overrides:

            - defaultEventHandler()
            - willRespondToMouseClickEvents()

        Reviewed by Darin Adler.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:

2014-05-01  Benjamin Poulain  <bpoulain@apple.com>

        ViewportConfiguration::minimumScale() uses the initial scale as initial value
        https://bugs.webkit.org/show_bug.cgi?id=132451
        <rdar://problem/16780111>

        Reviewed by Enrica Casucci.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::minimumScale):
        The initial minimum scale was set to the initial scale, preventing some pages from zooming
        out.

2014-05-01  Alexey Proskuryakov  <ap@apple.com>

        Build fix for !ENABLE(BLOB) builds.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURLForSlice):

2014-05-01  Alexey Proskuryakov  <ap@apple.com>

        Move size computation for Blob constructor into BlobRegistryImpl
        https://bugs.webkit.org/show_bug.cgi?id=132439

        Reviewed by Sam Weinig.

        * Modules/websockets/WebSocket.cpp: (WebCore::WebSocket::didReceiveBinaryData):
        Don't pass the size, anyone who cares can get it from BlobData.

        * bindings/js/JSBlobCustom.cpp: (WebCore::JSBlobConstructor::constructJSBlob):
        Updated for BlobBuilder changes.

        * fileapi/Blob.cpp: (WebCore::Blob::Blob):
        * fileapi/Blob.h: (WebCore::Blob::create):
        No longer take a precomputed size with BlobData, BlobRegistry will compute it as
        part of registration.

        * fileapi/File.h:
        * fileapi/File.cpp:
        (WebCore::File::File): Don't pass a size (that's unknown anyway).
        (WebCore::File::captureSnapshot): Deleted. Finally, only the registry is responsible
        for snapshot tracking now (I doubt that either new or old code is particularly compliant).

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        Plumbing to make this version of registerBlobURL return a size. I may make size
        calculation lazy and the function async later, but this is needed to move the behavior
        to the right place first.

        * fileapi/WebKitBlobBuilder.h:
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::BlobBuilder):
        (WebCore::BlobBuilder::append):
        (WebCore::BlobBuilder::appendBytesData):
        (WebCore::BlobBuilder::finalize):
        (WebCore::BlobBuilder::getBlob): Deleted.
        Don't track sizes or modification times, registry will do that with appropriate laziness.
        Cleaned up the API - now that BlobBuilder is not exposed to JS as an object, it
        does not need to be reusable.

        * platform/network/BlobRegistry.h: Made this version of registerBlobURL return a size.
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::appendStorageItems): Assert that length computations are accurate.
        (WebCore::BlobRegistryImpl::registerBlobURL): Compute a size to return, and record
        modification time as necessary.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::responseBlob): Don't pass the
        size, which can be computed from data. Soon, I want to add a constructor that doesn't
        require wrapping a single Vector as BlobData to construct a Blob.

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

        [iOS] audio and video should automatically play to active external device
        https://bugs.webkit.org/show_bug.cgi?id=132428

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Set 
            AVPlayer.usesExternalPlaybackWhileExternalScreenIsActive.

2014-05-01  David Hyatt  <hyatt@apple.com>

        REGRESSION (r168046): [New Multicolumn] Selection into and out of column-span elements doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=132066

        Reviewed by Oliver Hunt.

        Make a new SelectionIterator struct that knows how to drill into and out of
        column span placeholders. Also change spans to be selection roots (in the painting
        sense).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::selectionGaps):
        * rendering/RenderView.cpp:
        (WebCore::SelectionIterator::SelectionIterator):
        (WebCore::SelectionIterator::checkForSpanner):
        (WebCore::SelectionIterator::current):
        (WebCore::SelectionIterator::next):
        (WebCore::RenderView::subtreeSelectionBounds):
        (WebCore::RenderView::repaintSubtreeSelection):
        (WebCore::RenderView::setSubtreeSelection):

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

        Don't always make backing store for -webkit-backface-visibility:hidden
        https://bugs.webkit.org/show_bug.cgi?id=132420

        Reviewed by Sam Weinig.
        
        Previously, -webkit-backface-visibility:hidden unconditionally created
        compositing layers with backing store. This results in high memory use
        on pages with this style applied to many elements (a cargo-cult "optimization").
        
        Fix by only having -webkit-backface-visibility:hidden create compositing layers
        if some ancestor has a 3D transform. That's the only scenario in which the
        element can be flipped around to reveal the back side, so the only time we need
        to do compositing for this property. In future, we could be smarter, and only
        consider 3D transforms in the current preserve-3d context.

        Tests: compositing/backing/backface-visibility-in-3dtransformed.html
               compositing/backing/backface-visibility-in-transformed.html
               compositing/backing/backface-visibility.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore):
        (WebCore::RenderLayerCompositor::requiresCompositingForBackfaceVisibility):
        * rendering/RenderLayerCompositor.h:

2014-05-01  Alex Christensen  <achristensen@webkit.org>

        Finish updating ANGLE.
        https://bugs.webkit.org/show_bug.cgi?id=132434

        Reviewed by Dean Jackson.

        * CMakeLists.txt:
        Removed Uniform.cpp which is no longer in ANGLE.

2014-05-01  David Hyatt  <hyatt@apple.com>

        REGRESSION (new multi-column): WebKit2.ResizeReversePaginatedWebView fails on debug bots
        https://bugs.webkit.org/show_bug.cgi?id=132429

        Reviewed by Alexey Proskuryakov.
        
        Make sure to get the column count directly from the column set.
        I was returning the theoretical column count from the flow thread,
        and that wasn't the right value.

        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pageCount):

2014-05-01  Brent Fulgham  <bfulgham@apple.com>

        Fix handling of attributes prior to compiling shader
        https://bugs.webkit.org/show_bug.cgi?id=132430

        Reviewed by Dean Jackson.

        WebGL programs that called bindAttribLocations prior to compiling shader sources
        would perform the bind using the non-hashed symbol name, but would later create
        the attributes as hashed names. Consequently, the program would refer to
        attributes that were never actually part of any shader, resulting in some amazing
        display artifacts.

        This patch adds a dictionary of hashed symbol names so that we can tell the WebGL
        program the proper name that will be used when the shader is eventually compiled,
        allowing the WebGL program to link against the proper symbol after compiling and
        linking completes.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::generateHashedName): Function uses the ANGLE hashing
        function to generate correct symbol.
        (WebCore::GraphicsContext3D::mappedSymbolName): If we haven't compiled shaders yet, look
        in our set of potentially unused attributes.
        (WebCore::GraphicsContext3D::originalSymbolName): Ditto, for reverse lookup.

2014-05-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make selection gaps painting subpixel aware.
        https://bugs.webkit.org/show_bug.cgi?id=132169

        Reviewed by Simon Fraser.

        Push selection gaps painting to device pixel boundaries instead of integral CSS pixel positions.

        Test: fast/inline/hidpi-selection-gap-on-subpixel-position.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):

2014-05-01  David Kilzer  <ddkilzer@apple.com>

        Really remove ENABLE_PLUGIN_PROXY_FOR_VIDEO
        <http://webkit.org/b/132432>

        Reviewed by Tim Horton.

        * platform/graphics/wince/MediaPlayerPrivateWinCE.h: Remove
        methods and ivar in ENABLE(PLUGIN_PROXY_FOR_VIDEO).

2014-05-01  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Clamping the number of repetitions in repeat()
        https://bugs.webkit.org/show_bug.cgi?id=131023

        Reviewed by Brent Fulgham.

        The ED suggests now to be able to clamp the number of repetitions when
        using the repeat() function, taking precautions about excessive memory
        usage.

        The implemented max repetitions is 10K.

        Test: fast/css-grid-layout/grid-element-repeat-max-repetitions.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackRepeatFunction):

2014-04-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Seeking between two buffered ranges enquues incorrect buffers.
        https://bugs.webkit.org/show_bug.cgi?id=132416

        Reviewed by Eric Carlson.

        std::equal_range(begin, end, value) will return an empty range if equal values cannot
        be found. But the range is not necessarily [end, end).  It may be some other value n,
        such that the empty range is [n, n). Check to see if the returned range is empty in
        findSampleContainingPresentationTime() and its reverse version, and if so, explicitly
        return presentationEnd() or reversePresentationEnd() respectively.

        Drive-by fix: make the comparator functions take const& arguments to minimize object
        creation.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::SampleIsLessThanMediaTimeComparator::operator()):
        (WebCore::SampleIsGreaterThanMediaTimeComparator::operator()):
        (WebCore::SampleMap::findSampleContainingPresentationTime):
        (WebCore::SampleMap::reverseFindSampleContainingPresentationTime):

2014-05-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Inline text selection painting should not snap to integral CSS pixel position.
        https://bugs.webkit.org/show_bug.cgi?id=132164

        Reviewed by Darin Adler.

        Inline text selection painting now snaps to device pixels. It uses the same rounding logic as
        other painting functions.

        Test: fast/inline/hidpi-select-inline-on-subpixel-position.html

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::alignSelectionRectToDevicePixels): Deleted.
        * rendering/InlineTextBox.h:

2014-05-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] There are many warnings with software backend
        https://bugs.webkit.org/show_bug.cgi?id=132422

        Reviewed by Gyuyoung Kim.

        ecore_evas_gl_x11_window_get should be called when only engine is opengl_x11.

        This patch refactors not to call unnecessary API by checking engine type.
        In addition, removed unnecessary isUsingEcoreX().

        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::applyFallbackCursor):
        (WebCore::getEcoreXWindow):
        (WebCore::isUsingEcoreX): Deleted.
        * platform/efl/EflScreenUtilities.h:

2014-05-01  Rik Cabanier  <cabanier@adobe.com>

        Calling createPattern with a broken image must throw an invalidstate error
        https://bugs.webkit.org/show_bug.cgi?id=132407

        Reviewed by Dirk Schulze.

        Per the WebIDL spec, passing non-finite parameter to a method that
        takes doubles, should generate a type error.

        Tests:
        * canvas/philip/tests/2d.imageData.create2.nonfinite.html:
        * fast/canvas/canvas-2d-imageData-create-nonfinite.html:

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

2014-04-30  David Hyatt  <hyatt@apple.com>

        REGRESSION (r168046): [New Multicolumn] LeftToRight-rl.html (and all the other reversed/block-axis pagination tests) fail
        https://bugs.webkit.org/show_bug.cgi?id=132419

        Reviewed by Andreas Kling.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting):
        Don't flip here. The old code needed to do that, but the new code doesn't.

2014-04-30  Alexey Proskuryakov  <ap@apple.com>

        Roll out fix for https://bugs.webkit.org/show_bug.cgi?id=131637:
        Clean up unnecessary methods in the BackForwardClient interface

        It broke a regression test and an API test.

        * WebCore.exp.in:
        * history/BackForwardClient.h:
        (WebCore::BackForwardClient::backItem):
        (WebCore::BackForwardClient::currentItem):
        (WebCore::BackForwardClient::forwardItem):
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        * history/BackForwardController.h:
        (WebCore::BackForwardController::client):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::BackForwardList):
        (WebCore::BackForwardList::close):
        * history/BackForwardList.h:
        (WebCore::BackForwardList::create):
        (WebCore::BackForwardList::page):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        More iOS build fixing. MediaPlayerPrivateIOS is defunct and can be removed.
        Fix some build errors in other media files.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h: Removed.
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm: Removed.

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build, which no longer needs these calls
        to enter/exitFullscreen.

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

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE_PLUGIN_PROXY_FOR_VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=132396

        Reviewed by Eric Carlson.

        Remove ENABLE_PLUGIN_PROXY_FOR_VIDEO and related code.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::setNeedWidgetUpdate): Deleted.
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::showPlaybackTargetPicker):
        (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets):
        (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createElementRenderer):
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        (WebCore::HTMLVideoElement::setDisplayMode):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::createMediaPlayerProxyPlugin): Deleted.
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin): Deleted.
        * loader/SubframeLoader.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateEmbeddedObject):
        * page/Settings.cpp:
        (WebCore::Settings::setVideoPluginProxyEnabled): Deleted.
        * page/Settings.h:
        (WebCore::Settings::isVideoPluginProxyEnabled): Deleted.
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::mediaLayerMustBeUpdatedOnMainThread): Deleted.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::NullMediaPlayerPrivate::deliverNotification): Deleted.
        (WebCore::NullMediaPlayerPrivate::setMediaPlayerProxy): Deleted.
        (WebCore::NullMediaPlayerPrivate::setControls): Deleted.
        (WebCore::MediaPlayer::deliverNotification): Deleted.
        (WebCore::MediaPlayer::setMediaPlayerProxy): Deleted.
        (WebCore::MediaPlayer::setControls): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::deliverNotification): Deleted.
        (WebCore::MediaPlayerPrivateInterface::setMediaPlayerProxy): Deleted.
        (WebCore::MediaPlayerPrivateInterface::setControls): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::mediaLayerMustBeUpdatedOnMainThread): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::canHaveChildren):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::mediaLayerMustBeUpdatedOnMainThread): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Some accerated overflow-scroll doesn't scroll correctly
        https://bugs.webkit.org/show_bug.cgi?id=132375

        Reviewed by Tim Horton.
        
        We set the size of the scrolling layer (which becomes the bounds of
        the UIScrollView) to a non-pixel-snapped padding box size, but the
        size of the contents layer is an integral-snapped scroll size.
        This would result in a fractional difference between the two, which
        makes us thing that the element is scrollable when it really is not.
        
        Fix by setting the size of the scroll layer to pixel snapped client size,
        which is what we also use for scrollability computation.
        
        Added some FIXMEs in code that requires pixel snapping.
        
        Also use #if PLATFORM(IOS)/#else to bracket some code that never runs on iOS
        but tries to do something similar to iOS-only code.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2014-04-30  David Hyatt  <hyatt@apple.com>

        REGRESSION (r168046): [New Multicolumn] Painting order is wrong for columns and fixed positioned elements
        https://bugs.webkit.org/show_bug.cgi?id=132377

        Reviewed by Simon Fraser.

        Added fast/multicol/fixed-stack.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeSelfPaintingLayer):
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        Change the flow thread layer for multicolumn layout to be normal flow only and to
        stay self-painting. This has the effect of keeping the flow thread layer grouped
        with the enclosing multicolumn layer, and this keeps the paint order correct when
        compositing kicks in (or when something would otherwise try to get between the
        two layers).

2014-04-30  Eric Carlson  <eric.carlson@apple.com>

        [iOS] do not pause video when entering background while playing to external device
        https://bugs.webkit.org/show_bug.cgi?id=132374

        Reviewed by Jer Noble.

        * WebCore.exp.in: Update beginInterruption signature.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canOverrideBackgroundPlaybackRestriction): New, return true when
            playing to external device.
        * html/HTMLMediaElement.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::beginInterruption): Add interruption type to beginInterruption.
        * platform/audio/MediaSession.h:

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::beginInterruption): Ditto.
        (WebCore::MediaSessionManager::applicationWillEnterBackground): Ditto.
        (WebCore::MediaSessionManager::systemWillSleep): Ditto.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper interruption:]): Ditto.

        * platform/audio/mac/AudioDestinationMac.h: Make most methods private. Add 
            canOverrideBackgroundPlaybackRestriction. Add missing overrides.
        * testing/Internals.cpp:
        (WebCore::Internals::beginMediaSessionInterruption): Pass interruption type.

2014-04-30  Manuel Rego Casasnovas  <rego@igalia.com>

        Unreviewed, rolling out r167879 and r167942.
        https://bugs.webkit.org/show_bug.cgi?id=132408

        OrderIterator changes caused regressions in flexbox (Requested
        by rego on #webkit).

        We're keeping the new layout test introduced in r167942
        (fast/flexbox/order-iterator-crash.html) to avoid similar
        regressions in the future.

        Reverted changesets:

        "OrderIterator refactoring to avoid extra loops"
        https://bugs.webkit.org/show_bug.cgi?id=119061
        http://trac.webkit.org/changeset/167879

        "REGRESSION (r167879): Heap-use-after-free in
        WebCore::RenderFlexibleBox"
        https://bugs.webkit.org/show_bug.cgi?id=132337
        http://trac.webkit.org/changeset/167942

2014-04-30  Enrica Casucci  <enrica@apple.com>

        Cursor gets thinner on empty lines.
        https://bugs.webkit.org/show_bug.cgi?id=132411
        <rdar://problem/15994556>

        Reviewed by Benjamin Poulain.

        RenderLineBreak::localCaretRect should not define
        locally the constant caretWidth, but use the one from
        RenderObject.h which knows about the differences between
        iOS and the other platforms.

        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::localCaretRect):

2014-04-30  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GStreamer] Use GstMetaVideo
        https://bugs.webkit.org/show_bug.cgi?id=132247

        Reviewed by Philippe Normand.

        In WebKitVideoSink we announce the usage of GstMetaVideo, but we do
        not use it when handling the video frames. This might break
        some decoders and filters that rely on buffer's meta, rather
        that in the caps structures.

        This patch enables the use of GstMetaVideo through the GstVideoFrame
        API. And it is used everywhere the buffer mapping is required.

        Also this patch changes to nullptr where zeros were used.

        Also, compile conditionally the video buffer conversion when it is
        ARGB/BGRA, since it is only required for the Cairo backend.

        No new tests, already covered by current tests.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::getVideoSizeAndFormatFromCaps): init the GstVideoInfo before
        used and remove caps fixate check since it is done by
        gst_video_info_from_caps().
        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer): use GstVideoFrame for buffer mapping
        and unmapping.
        (ImageGStreamer::~ImageGStreamer): ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture): ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::currentVideoSinkCaps):
        return nullptr if failed.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender): rely on GstVideoInfo rather than on the
        caps. Use GstVideoFrame for buffer mapping and unmapping. Add guards
        for buffer transformation, since it's only used by Cairo.
        (webkitVideoSinkDispose): remove glib version guards.
        (webkitVideoSinkSetCaps): update the value of the private
        GstVideoInfo.

2014-04-30  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK][GStreamer] Remove unnecessary GLIB_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=132390

        Reviewed by Philippe Normand.

        Since EFL port use GLib 2.38 and GTK+, 2.33.2, I assume it is OK
        remove, in GTK+ and GST, the existing glib version guards.

        No new tests, already covered by current tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkDispose):
        (webkitVideoSinkFinalize): Deleted.

2014-04-30  Alex Christensen  <achristensen@webkit.org>

        Updated ANGLE.
        https://bugs.webkit.org/show_bug.cgi?id=132367
        <rdar://problem/16211451>

        Reviewed by Dean Jackson.

        * CMakeLists.txt
        Fixed ANGLE compiling with the update.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        Removed SH_MAP_LONG_VARIABLE_NAMES which is no longer defined in ANGLE.
        See https://chromium.googlesource.com/angle/angle/+/3cdfcce86b38ef31a0afd71855887193a7924468
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        Updated type names from ANGLE.

2014-04-30  Alexey Proskuryakov  <ap@apple.com>

        Move Blob.slice() implementation into BlobRegistryImpl
        https://bugs.webkit.org/show_bug.cgi?id=132402

        Reviewed by Anders Carlsson.

        Part or centralizing the responsibility for file size tracking.

        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::slice): Deleted.
        * fileapi/Blob.h:
        (WebCore::Blob::slice):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURLForSlice):
        (WebCore::registerBlobURLTask): Deleted.
        (WebCore::registerBlobURLFromTask): Deleted.
        * fileapi/ThreadableBlobRegistry.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::appendStorageItems):
        (WebCore::BlobRegistryImpl::registerBlobURLForSlice):
        (WebCore::BlobRegistryImpl::blobSize):
        * platform/network/BlobRegistryImpl.h:

2014-04-30  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r168041.

        * WebCore.exp.in: Add missing iOS exports.

2014-04-30  Beth Dakin  <bdakin@apple.com>

        Always-visible scrollbars continuously repaint after non-momentum scrollling
        https://bugs.webkit.org/show_bug.cgi?id=132403
        -and corresponding-
        <rdar://problem/16553878>

        Reviewed by Simon Fraser.

        No longer universally opt into presentation value mode whenever the scroll 
        position changes on the scrolling thread. We really only want it for momentum 
        scrolls, and this will ensure that we always set it to NO once we have set it to 
        YES.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

        Expose shouldUsePresentationValue.
        * platform/mac/NSScrollerImpDetails.h:

2014-04-30  Anders Carlsson  <andersca@apple.com>

        Move the legacy WebKit API into WebKitLegacy.framework and move it inside WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132399
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        Allow WebKitLegacy to link against WebCore.

        * Configurations/WebCore.xcconfig:

2014-04-30  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] ASSERTs in fast/dynamic/continuation-detach-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=132392

        Reviewed by Dean Jackson.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        Add ASSERTs in case we ever try to set regions from the wrong flow thread
        as part of the box's region range.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        Add a bunch of code that handles the discovery of a span from an outer flow thread
        being inserted into an inner flow thread. This forces us to delete that placeholder
        and shift the outer spanning content into the inner flow thread in order to get a new
        mapping/placeholder created in the inner flow thread.

        (WebCore::RenderMultiColumnFlowThread::flowThreadRelativeWillBeRemoved):
        Tighten this code to use the parent() just in case we change the invariant of
        parent = containingBlock later.

        * rendering/RenderMultiColumnFlowThread.h:
        Add a static guard when shifting a spanner to prevent the outer flow thread from
        thinking the spanner belongs to it when it gets punted out of the inner flow thread.
        A better long-term solution might be to make the spanner map global instead of
        per-flow thread.

        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        Cache the flow thread so that we can get back to it in order to detect if the
        placeholder belongs to us or not.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree):
        Notifications from insertedIntoTree are problematic, since this can be called during
        the layout of the outer flow thread for content inside an inner flow thread that is
        not getting a layout yet. This makes the currentFlowThread in the flow thread controller
        inaccurate, so we have to add code to clear it out and put it back.

2014-04-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Make "contenteditable" regions into AXTextAreas
        https://bugs.webkit.org/show_bug.cgi?id=132379

        Reviewed by Mario Sanchez Prada.

        Make contenteditable regions into AXTextAreas. This will allow for a more standardized
        interface for interaction with assistive technologies.

        Test: accessibility/content-editable-as-textarea.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hasContentEditableAttributeSet):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::contentEditableAttributeIsEnabled):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::documentBasedSelectedTextRange):
        (WebCore::AccessibilityRenderObject::selectedText):
        (WebCore::AccessibilityRenderObject::selectedTextRange):
        (WebCore::AccessibilityRenderObject::renderObjectIsObservable):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::ariaSelectedTextRange): Deleted.
        * accessibility/AccessibilityRenderObject.h:

2014-04-30  Brian J. Burg  <burg@cs.washington.edu>

        Clean up unnecessary methods in the BackForwardClient interface
        https://bugs.webkit.org/show_bug.cgi?id=131637

        Reviewed by Andreas Kling.

        Demote back/current/forwardItem and iOS-specific methods from the
        BackForwardClient interface. Convert the class to not be refcounted.

        No new tests, no behavior was changed.

        * WebCore.exp.in:
        * history/BackForwardClient.h:
        (WebCore::BackForwardClient::~BackForwardClient): Deleted.
        (WebCore::BackForwardClient::backItem): Deleted.
        (WebCore::BackForwardClient::currentItem): Deleted.
        (WebCore::BackForwardClient::forwardItem): Deleted.
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        * history/BackForwardController.h: Take ownership of the passed BackForwardClient.
        (WebCore::BackForwardController::client): Return a reference.
        * history/BackForwardList.h: Remove the Page field, since it isn't used any more.
        (WebCore::BackForwardList::create): Deleted.
        * page/Page.h: Remove RefPtr from PageClient.
        * page/Page.cpp:
        (WebCore::PageClients::PageClients): Initialize client to nullptr.

2014-04-30  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] Support caption activation via JS webkitHasClosedCaptions method
        https://bugs.webkit.org/show_bug.cgi?id=132320

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-text-track-container .hidden): Added.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Added call to
        new 'updateCaptionsContainer'.
        (WebCore::HTMLMediaElement::updateCaptionContainer): Added.
        * html/HTMLMediaElement.h:

2014-04-30  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=132363
        Make Blob RawData immutable

        Reviewed by Anders Carlsson.

        * Modules/websockets/WebSocket.cpp: (WebCore::WebSocket::didReceiveBinaryData):
        Create RawData in one step.

        * WebCore.exp.in: Don't export a constructor that we no longer have (and the new one is inline).

        * fileapi/Blob.cpp: Removed entirely dead code.

        * fileapi/WebKitBlobBuilder.cpp:
        * fileapi/WebKitBlobBuilder.h:
        Updated to collect data in a plain Vector, so that we don't have to modify RawData.
        Removed FIXMEs about renaming - there used to be a BlobBuilder exposed to JS, but
        now this is just a helper to implement JS Blob constructor. We should probably
        still rename it, but not how the FIXME suggested.

        * platform/network/BlobData.cpp:
        (WebCore::BlobDataItem::detachFromCurrentThread): RawData::detachFromCurrentThread()
        was a no-op.
        (WebCore::BlobDataHandle::BlobDataHandle): Deleted. This was entirely dead code.
        (WebCore::BlobDataHandle::~BlobDataHandle): Ditto.

        * platform/network/BlobData.h: Made RawData immutable.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::responseBlob):
        Create RawData in one step.

2014-04-30  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Region offset not factored in when mapping to local coords
        https://bugs.webkit.org/show_bug.cgi?id=132383

        Reviewed by Anders Carlsson.

        Make sure to cache the offset of the multicolumn set from its parent and then
        add that in to the translation offset.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::mapAbsoluteToLocalPoint):

2014-04-30  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Move removeEquivalentProperties functions to EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=131093

        Reviewed by Csaba Osztrogonác.

        A follow-up to r167967. Use single line declaration for template methods.

        * editing/EditingStyle.h:

2014-04-30  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Enable runtime feature by default
        https://bugs.webkit.org/show_bug.cgi?id=132189

        Reviewed by Benjamin Poulain.

        * page/Settings.in: Set cssGridLayoutEnabled to true.

2014-04-30  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Wrap some specific grid code under compilation flag
        https://bugs.webkit.org/show_bug.cgi?id=132341

        Reviewed by Benjamin Poulain.

        Some static variables in RenderBox are only used for CSS Grid Layout code. Wrap them and the related methods
        under ENABLE_CSS_GRID_LAYOUT compilation flag.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        (WebCore::RenderBox::containingBlockLogicalHeightForContent):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        * rendering/RenderBox.h:

2014-04-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167962 and r167975.
        https://bugs.webkit.org/show_bug.cgi?id=132376

        Mysteriously broke many tests (Requested by ap on #webkit).

        Reverted changesets:

        "[Mac, iOS] Support caption activation via JS
        webkitHasClosedCaptions method"
        https://bugs.webkit.org/show_bug.cgi?id=132320
        http://trac.webkit.org/changeset/167962

        "Unreviewed test fix after r167962."
        http://trac.webkit.org/changeset/167975

2014-04-29  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Multiple tests assert in RenderGeometryMap
        https://bugs.webkit.org/show_bug.cgi?id=132285

        Reviewed by Simon Fraser.

        Implement offsetFromContainer for RenderMultiColumnFlowThread so that the
        geometry map gets the right offsets. This is really only relevant for the 
        geometry map, since I already overrode mapAbsoluteToLocalPoint and multicolumn
        flow threads are repaint containers (so mapLocalToAbsolute never needs offsetFromContainer).

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::offsetFromContainer):
        * rendering/RenderMultiColumnFlowThread.h:

2014-04-29  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] When pageScaleFactor * deviceScaleFactor = 1, the tile grid is completely messed up
        https://bugs.webkit.org/show_bug.cgi?id=132368

        Reviewed by Simon Fraser.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        The initial device scale factor was initialized to 1. We were returning the wrong zoomedOutContentsScale() and
        contentsScale() on retina devices until the next successful scale update.

2014-04-29  Alexey Proskuryakov  <ap@apple.com>

        Remove an unused override of BlobRegistryImpl::appendStorageItems
        https://bugs.webkit.org/show_bug.cgi?id=132365

        Reviewed by Andreas Kling.

        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::appendStorageItems): Deleted.
        * platform/network/BlobRegistryImpl.h:

2014-04-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac] tag the video layers with descriptive name to aid debugging
        https://bugs.webkit.org/show_bug.cgi?id=132371

        Reviewed by Darin Adler.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Set the AVPlayerLayer
            name in a debug build.

2014-04-29  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        [GTK][cmake] CMake variable (non)expansion causing 'File name too long' build error.
        https://bugs.webkit.org/show_bug.cgi?id=132244

        Reviewed by Martin Robinson.

        Removing quotes around include directory variable ${WebCore_INCLUDE_DIRECTORIES} in
        the include_directories cmake macro enables the variable to be expanded correctly.

        No tests created as this fixes a platform specific build issue.

        * PlatformGTK.cmake:

2014-04-29  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r167962.
        * Modules/mediacontrols/mediaControlsApple.css:
        (.hidden): Use common '.hidden' class for controls.
        (video::-webkit-media-text-track-container .hidden): Deleted.

2014-04-29  Brady Eidson  <beidson@apple.com>

        Handle selection services menu.
        <rdar://problem/16727798> and https://bugs.webkit.org/show_bug.cgi?id=132362

        Reviewed by Tim Horton.

        * WebCore.exp.in:

2014-04-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Removing unused argument in InlineFlowBox::placeBoxesInInlineDirection()
        https://bugs.webkit.org/show_bug.cgi?id=132369

        Reviewed by Darin Adler.

        This was not caught by our compiler because placeBoxesInInlineDirection()
        is mutually-recursive with placeBoxRangeInInlineDirection().

        No new tests are necessary because there should be no behavior change.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):

2014-04-29  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Switch video from GStreamer to Media Foundation.
        https://bugs.webkit.org/show_bug.cgi?id=132358

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        Removed dependencies on GStreamer.

2014-04-29  Simon Fraser  <simon.fraser@apple.com>

        Remove some PLATFORM(IOS) #ifdefs related to hasAcceleratedTouchScrolling()
        https://bugs.webkit.org/show_bug.cgi?id=132353

        Reviewed by Tim Horton & Darin Adler.

        Minor cleanup and refactoring to remove #idefs.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): No need for this #ifdef, usesCompositedScrolling()
        gives the right answser already.
        (WebCore::RenderLayer::visibleContentRectInternal): Use showsOverflowControls() to
        avoid #ifdef.
        (WebCore::RenderLayer::invalidateScrollbarRect): Ditto.
        (WebCore::RenderLayer::invalidateScrollCornerRect): Ditto.
        (WebCore::RenderLayer::verticalScrollbarWidth): Ditto.
        (WebCore::RenderLayer::horizontalScrollbarHeight): Ditto.
        (WebCore::RenderLayer::showsOverflowControls): Return false on iOS.
        (WebCore::RenderLayer::paintOverflowControls): Ditto.
        (WebCore::RenderLayer::calculateClipRects): Ditto.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        Just #ifdef in side of this function rather than having two similar functions.
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds):
        (WebCore::hasNonZeroTransformOrigin):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Use a local bool
        to reduce #ifdefs.
        (WebCore::layerOrAncestorIsTransformedOrScrolling): Deleted.

2014-04-29  Simon Fraser  <simon.fraser@apple.com>

        Remove Settings::compositedScrollingForFramesEnabled
        https://bugs.webkit.org/show_bug.cgi?id=132352

        Reviewed by Andreas Kling.

        The usesCompositedScrolling setting was only used by Chromium, so
        remove it and associated code.

        * page/FrameView.cpp:
        (WebCore::FrameView::usesCompositedScrolling): Deleted.
        * page/FrameView.h:
        * page/Settings.in:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):

2014-04-29  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Move removeEquivalentProperties functions to EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=131093

        Reviewed by Darin Adler.

        Moved the removeEquivalentProperties functions
        from StyleProperties to EditingStyle class.

        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::removeEquivalentProperties): Deleted.
        * css/StyleProperties.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::removeStyleAddedByNode):
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::EditingStyle::removeEquivalentProperties):
        (WebCore::extractPropertiesNotIn):
        * editing/EditingStyle.h:

2014-04-29  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Implement support for compositing
        https://bugs.webkit.org/show_bug.cgi?id=132298

        Reviewed by Simon Fraser.

        * rendering/RenderLayer.cpp:
        (WebCore::accumulateOffsetTowardsAncestor):
        Add in a case for the new columns that calls into the multi-column flow thread
        to get an offset to adjust by.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread):
        Make sure this code only runs for named flow threads.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canBeComposited):
        Turn on compositing support for in-flow RenderFlowThreads instead of always returning
        false

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationOffsetFromFlowToRegion):
        Changed this function to fix a couple of bugs exposed by compositing/columns tests. Its
        end goal is the same, but the approach is improved.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::endFlow):
        Don't pad out to a multiple of column height. You can't flip around a flow thread
        to get back to accurate physical coordinates if bogus padding is introduced. This
        seemed to have no effect on any layout tests when removed, so I don't think it 
        was really serving any useful purpose.

        (WebCore::RenderMultiColumnSet::columnTranslationForOffset):
        Don't factor in the overall flow thread portion, since this is handled by the callers
        now.

        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        Change this function to be ASSERT_NOT_REACHED(), since we want to know if someone calls
        it. It only runs for named flow thread compositing code, so it would be a mistake if
        this ever gets invoked.

2014-04-29  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSProxies should be cacheable
        https://bugs.webkit.org/show_bug.cgi?id=132351

        Reviewed by Geoffrey Garen.

        No new tests.

        Whenever we encounter a proxy in an inline cache we should try to cache on the 
        proxy's target instead of giving up.

        This patch adds support for a simple "recursive" inline cache if the base object
        we're accessing is a pure forwarding proxy. JSGlobalObject and its subclasses 
        are the only ones to benefit from this right now.

        This is performance neutral on the benchmarks we track. Currently we won't
        cache on JSDOMWindow due to HasImpureGetOwnPropertySlot, but this issue will be fixed soon.

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):

2014-04-29  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] Support caption activation via JS webkitHasClosedCaptions method
        https://bugs.webkit.org/show_bug.cgi?id=132320

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-text-track-container .hidden): Added.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Added call to
        new 'updateCaptionsContainer'.
        (WebCore::HTMLMediaElement::updateCaptionContainer): Added.
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::hide): Use CSS class .hidden instead of
        hard-coded "display:none".
        (WebCore::MediaControlTextTrackContainerElement::show): Ditto.
        * html/shadow/MediaControlElements.h:

2014-04-28  Roger Fong  <roger_fong@apple.com>

        Plugins hidden by images should autoplay.
        https://bugs.webkit.org/show_bug.cgi?id=132222.
        <rdar://problem/16653536>

        Reviewed by Jon Lee and Darin Adler.

        * WebCore.exp.in: Add exports needed by WK2.

2014-04-29  Filip Pizlo  <fpizlo@apple.com>

        Use LLVM as a backend for the fourth-tier DFG JIT (a.k.a. the FTL JIT)
        https://bugs.webkit.org/show_bug.cgi?id=112840

        Rubber stamped by Geoffrey Garen.

        It already has a lot of tests.

        * Configurations/FeatureDefines.xcconfig:

2014-04-29  Brady Eidson  <beidson@apple.com>

        Change Image Controls replacement to use selection and paste
        <rdar://problem/16302722> and https://bugs.webkit.org/show_bug.cgi?id=131992

        Reviewed by Tim Horton.

        * WebCore.exp.in: Remove deleted symbol.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::defaultEventHandler):

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showImageControlsMenu): Select the image element
          before showing the menu.
        (WebCore::ContextMenuController::replaceControlledImage): Deleted.
        * page/ContextMenuController.h:

2014-04-29  Jer Noble  <jer.noble@apple.com>

        [iOS] Remove workaround for <rdar://problem/16578727>.
        https://bugs.webkit.org/show_bug.cgi?id=132338

        Reviewed by Darin Adler.

        Now that <rdar://problem/16578727> is fixed, remove the workaround by replacing the
        call to -_updatePlaybackControlsViewController with one to -layoutIfNeeded.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):

2014-04-29  Zan Dobersek  <zdobersek@igalia.com>

        ScriptExecutionContext::Task should work well with C++11 lambdas
        https://bugs.webkit.org/show_bug.cgi?id=129795

        Reviewed by Darin Adler.

        Instead of having classes that subclass ScriptExecutionContext::Task and override
        the performTask(ScriptExecutionContext*) method, have the ScriptExecutionContext::Task
        take in a std::function<void (ScriptExecutionContext*)>-like object trough the constructor
        which would contain the code currently kept in the performTask() methods.

        This enables inlining C++11 lambdas into ScriptExecutionContext::postTask() calls. For
        cleanup tasks, the Task object can be implicitly constructed by using the initializer list
        constructor with the first argument being the ScriptExecutionContext::Task::CleanupTask tag.
        The ScriptExecutionContext class remains non-copyable and now stores the passed-in invokable
        object in the std::function wrapper, along with a boolean member that indicates whether the
        task is of cleanup nature.

        * Modules/quota/StorageErrorCallback.cpp:
        (WebCore::StorageErrorCallback::CallbackTask::CallbackTask):
        (WebCore::StorageErrorCallback::CallbackTask::performTask): Deleted.
        * Modules/quota/StorageErrorCallback.h:
        (WebCore::StorageErrorCallback::CallbackTask::create): Deleted.
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::~Database):
        (WebCore::Database::runTransaction):
        (WebCore::Database::scheduleTransactionCallback):
        (WebCore::DerefContextTask::create): Deleted.
        (WebCore::DerefContextTask::performTask): Deleted.
        (WebCore::DerefContextTask::isCleanupTask): Deleted.
        (WebCore::DerefContextTask::DerefContextTask): Deleted.
        (WebCore::callTransactionErrorCallback): Deleted.
        (WebCore::DeliverPendingCallbackTask::create): Deleted.
        (WebCore::DeliverPendingCallbackTask::performTask): Deleted.
        (WebCore::DeliverPendingCallbackTask::DeliverPendingCallbackTask): Deleted.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseCreationCallbackTask::create): Deleted.
        (WebCore::DatabaseCreationCallbackTask::performTask): Deleted.
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask): Deleted.
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::CloseSyncDatabaseOnContextThreadTask::create): Deleted.
        (WebCore::CloseSyncDatabaseOnContextThreadTask::performTask): Deleted.
        (WebCore::CloseSyncDatabaseOnContextThreadTask::CloseSyncDatabaseOnContextThreadTask): Deleted.
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::create): Deleted.
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::performTask): Deleted.
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::isCleanupTask): Deleted.
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::SafeReleaseTask): Deleted.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadDestroy):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::WorkerGlobalScopeDidInitializeTask::create): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::WorkerGlobalScopeDidInitializeTask::~WorkerGlobalScopeDidInitializeTask): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::WorkerGlobalScopeDidInitializeTask::WorkerGlobalScopeDidInitializeTask): Deleted.
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * bindings/js/JSCallbackData.h:
        (WebCore::DeleteCallbackDataTask::DeleteCallbackDataTask):
        (WebCore::DeleteCallbackDataTask::create): Deleted.
        (WebCore::DeleteCallbackDataTask::performTask): Deleted.
        (WebCore::DeleteCallbackDataTask::isCleanupTask): Deleted.
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask):
        (WebCore::JSGlobalObjectTask::~JSGlobalObjectTask): Deleted.
        (WebCore::JSGlobalObjectTask::performTask): Deleted.
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback):
        (GenerateCallbackImplementation):
        * dom/CrossThreadTask.h:
        (WebCore::CrossThreadTask1::performTask):
        (WebCore::CrossThreadTask2::performTask):
        (WebCore::CrossThreadTask3::performTask):
        (WebCore::CrossThreadTask4::performTask):
        (WebCore::CrossThreadTask5::performTask):
        (WebCore::CrossThreadTask6::performTask):
        (WebCore::CrossThreadTask7::performTask):
        (WebCore::CrossThreadTask8::performTask):
        (WebCore::createCallbackTask):
        (WebCore::CrossThreadTask1::create): Deleted.
        (WebCore::CrossThreadTask2::create): Deleted.
        (WebCore::CrossThreadTask3::create): Deleted.
        (WebCore::CrossThreadTask4::create): Deleted.
        (WebCore::CrossThreadTask5::create): Deleted.
        (WebCore::CrossThreadTask6::create): Deleted.
        (WebCore::CrossThreadTask7::create): Deleted.
        (WebCore::CrossThreadTask8::create): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::addConsoleMessage):
        (WebCore::Document::addMessage):
        (WebCore::Document::postTask):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::PerformTaskContext::PerformTaskContext): Deleted.
        (WebCore::Document::didReceiveTask): Deleted.
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::processMessagePortMessagesSoon):
        (WebCore::ScriptExecutionContext::timerAlignmentInterval):
        (WebCore::ProcessMessagesSoonTask::create): Deleted.
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::performTask): Deleted.
        (WebCore::ScriptExecutionContext::Task::~Task): Deleted.
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::Task::Task):
        (WebCore::ScriptExecutionContext::Task::performTask):
        (WebCore::ScriptExecutionContext::Task::isCleanupTask):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::create): Deleted.
        * dom/StringCallback.cpp:
        (WebCore::StringCallback::scheduleCallback):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::postListenerTask):
        (WebCore::CallCacheListenerTask::create): Deleted.
        (WebCore::CallCacheListenerTask::CallCacheListenerTask): Deleted.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerGlobalScope):
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        (WebCore::SharedWorkerConnectTask::create): Deleted.
        (WebCore::SharedWorkerConnectTask::performTask): Deleted.
        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::EventDispatcher::EventDispatcher):
        (WebCore::WorkerEventQueue::EventDispatcher::~EventDispatcher):
        (WebCore::WorkerEventQueue::EventDispatcher::dispatch):
        (WebCore::WorkerEventQueue::enqueueEvent):
        (WebCore::WorkerEventQueue::cancelEvent):
        (WebCore::WorkerEventQueue::close):
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::close):
        (WebCore::WorkerGlobalScope::postTask):
        (WebCore::WorkerGlobalScope::addConsoleMessage):
        (WebCore::WorkerGlobalScope::addMessage):
        (WebCore::CloseWorkerGlobalScopeTask::create): Deleted.
        (WebCore::CloseWorkerGlobalScopeTask::performTask): Deleted.
        (WebCore::CloseWorkerGlobalScopeTask::isCleanupTask): Deleted.
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postTaskToLoader):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeDestroyed):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeClosed):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        (WebCore::WorkerMessagingProxy::confirmMessageFromWorkerObject):
        (WebCore::WorkerMessagingProxy::reportPendingActivity):
        (WebCore::MessageWorkerGlobalScopeTask::create): Deleted.
        (WebCore::MessageWorkerGlobalScopeTask::MessageWorkerGlobalScopeTask): Deleted.
        (WebCore::MessageWorkerGlobalScopeTask::performTask): Deleted.
        (WebCore::MessageWorkerTask::create): Deleted.
        (WebCore::MessageWorkerTask::MessageWorkerTask): Deleted.
        (WebCore::MessageWorkerTask::performTask): Deleted.
        (WebCore::WorkerExceptionTask::create): Deleted.
        (WebCore::WorkerExceptionTask::WorkerExceptionTask): Deleted.
        (WebCore::WorkerExceptionTask::performTask): Deleted.
        (WebCore::WorkerGlobalScopeDestroyedTask::create): Deleted.
        (WebCore::WorkerGlobalScopeDestroyedTask::WorkerGlobalScopeDestroyedTask): Deleted.
        (WebCore::WorkerGlobalScopeDestroyedTask::performTask): Deleted.
        (WebCore::WorkerTerminateTask::create): Deleted.
        (WebCore::WorkerTerminateTask::WorkerTerminateTask): Deleted.
        (WebCore::WorkerTerminateTask::performTask): Deleted.
        (WebCore::WorkerThreadActivityReportTask::create): Deleted.
        (WebCore::WorkerThreadActivityReportTask::WorkerThreadActivityReportTask): Deleted.
        (WebCore::WorkerThreadActivityReportTask::performTask): Deleted.
        (WebCore::PostMessageToPageInspectorTask::create): Deleted.
        (WebCore::PostMessageToPageInspectorTask::PostMessageToPageInspectorTask): Deleted.
        (WebCore::PostMessageToPageInspectorTask::performTask): Deleted.
        (WebCore::NotifyNetworkStateChangeTask::create): Deleted.
        (WebCore::NotifyNetworkStateChangeTask::NotifyNetworkStateChangeTask): Deleted.
        (WebCore::NotifyNetworkStateChangeTask::performTask): Deleted.
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::postTask):
        (WebCore::WorkerRunLoop::postTaskAndTerminate):
        (WebCore::WorkerRunLoop::postTaskForMode):
        (WebCore::WorkerRunLoop::Task::create):
        (WebCore::WorkerRunLoop::Task::performTask):
        (WebCore::WorkerRunLoop::Task::Task):
        * workers/WorkerRunLoop.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):
        (WebCore::WorkerThreadShutdownFinishTask::create): Deleted.
        (WebCore::WorkerThreadShutdownFinishTask::performTask): Deleted.
        (WebCore::WorkerThreadShutdownFinishTask::isCleanupTask): Deleted.
        (WebCore::WorkerThreadShutdownStartTask::create): Deleted.
        (WebCore::WorkerThreadShutdownStartTask::performTask): Deleted.
        (WebCore::WorkerThreadShutdownStartTask::isCleanupTask): Deleted.

2014-04-29  Manuel Rego Casasnovas  <rego@igalia.com>

        REGRESSION (r167879): Heap-use-after-free in WebCore::RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=132337

        Reviewed by Simon Fraser.

        From Blink r154582 by <jchaffraix@chromium.org>

        This is a regression from the changes in OrderIterator. The issue is
        that we don't invalidate our iterator when a child is removed. This
        means that we could hold onto free'd memory until the next layout
        when we will recompute the iterator.

        The solution is simple: just clear the memory when we remove a child.

        Note that RenderGrid is not impacted by this bug as we don't use the
        iterator outside layout yet, but if we do it at some point the very same
        problem will arise, so the same treatment was applied to the class.

        Test: fast/flexbox/order-iterator-crash.html

        * rendering/OrderIterator.cpp:
        (WebCore::OrderIterator::invalidate): Clear m_children Vector.
        * rendering/OrderIterator.h:
        (WebCore::OrderIteratorPopulator::OrderIteratorPopulator): Use
        invalidate() method.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::removeChild): Invalidate m_orderIterator.
        * rendering/RenderFlexibleBox.h: Add removeChild() signature.
        * rendering/RenderGrid.cpp: Invalidate m_orderIterator.
        (WebCore::RenderGrid::removeChild):
        * rendering/RenderGrid.h: Add removeChild() header.

2014-04-29  Enrica Casucci  <enrica@apple.com>

        iOS build fix after http://trac.webkit.org/changeset/167937.
        Unreviewed.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustButtonStyle):

2014-04-29  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] off-by-one error in Shape::createRasterShape()
        https://bugs.webkit.org/show_bug.cgi?id=132154

        Reviewed by Bem Jones-Bey.

        This is a port of a patch for a bug that was reported by and fixed in Blink by
        David Vest: https://codereview.chromium.org/237123002/.  Shape::createRasterShape()
        now consistently reports "end-point exclusive" intervals. Before the patch
        an entire row of pixels was above the shape-image-threshold, the interval's end
        index was reported as image.width. Now it's image.width + 1, which is consistent
        with the way the end index is reported if the last above threshold pixel is within
        an image row.

        Two existing tests were revised to account for this change.

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShape::getExcludedIntervals):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):

2014-04-29  Bem Jones-Bey  <bjonesbe@adobe.com>

        Wrap CSS length conversion arguments in an object
        https://bugs.webkit.org/show_bug.cgi?id=131552

        Reviewed by Andreas Kling.

        This patch introduces a class CSSToLengthConversionData to wrap the
        data required to convert CSS lengths to Lengths. This simplifies the
        plumbing that goes on whenever we need to resolve CSS lengths and
        makes it easier to update the arguments needed for resolving these (in
        particular adding a RenderView for resolving viewport units at style
        recalc time; removing the computingFontSize bool also appears
        possible).

        Note that the zoom argument, which was previously a float in some
        places and a double in others is now a float.

        This is a port of a Blink patch by timloh@chromium.org.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLength):
        (WebCore::convertToLengthSize):
        (WebCore::convertToCenterCoordinate):
        (WebCore::cssValueToBasicShapeRadius):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::computeLengthPx):
        (WebCore::determineCategory):
        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::createCalculationValue):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        (WebCore::positionFromValue):
        (WebCore::CSSGradientValue::computeEndPoint):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::resolveRadius):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSGradientValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/CSSToLengthConversionData.cpp: Added.
        (WebCore::CSSToLengthConversionData::zoom):
        * css/CSSToLengthConversionData.h: Added.
        (WebCore::CSSToLengthConversionData::CSSToLengthConversionData):
        (WebCore::CSSToLengthConversionData::style):
        (WebCore::CSSToLengthConversionData::rootStyle):
        (WebCore::CSSToLengthConversionData::computingFontSize):
        (WebCore::CSSToLengthConversionData::copyWithAdjustedZoom):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::CSSToStyleMap):
        (WebCore::CSSToStyleMap::mapFillSize):
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):
        (WebCore::CSSToStyleMap::mapNinePieceImageQuad):
        * css/CSSToStyleMap.h:
        (WebCore::CSSToStyleMap::CSSToStyleMap): Deleted.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::csstoLengthConversionDataWithTextZoomFactor):
        (WebCore::ApplyPropertyMarqueeIncrement::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyValue):
        (WebCore::ApplyPropertyWordSpacing::applyValue):
        (WebCore::ApplyPropertyPageSize::mmLength):
        (WebCore::ApplyPropertyPageSize::inchLength):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):
        (WebCore::ApplyPropertyTextIndent::applyValue):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::colorMediaFeatureEval):
        (WebCore::color_indexMediaFeatureEval):
        (WebCore::monochromeMediaFeatureEval):
        (WebCore::orientationMediaFeatureEval):
        (WebCore::aspect_ratioMediaFeatureEval):
        (WebCore::device_aspect_ratioMediaFeatureEval):
        (WebCore::device_pixel_ratioMediaFeatureEval):
        (WebCore::resolutionMediaFeatureEval):
        (WebCore::gridMediaFeatureEval):
        (WebCore::computeLength):
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):
        (WebCore::min_colorMediaFeatureEval):
        (WebCore::max_colorMediaFeatureEval):
        (WebCore::min_color_indexMediaFeatureEval):
        (WebCore::max_color_indexMediaFeatureEval):
        (WebCore::min_monochromeMediaFeatureEval):
        (WebCore::max_monochromeMediaFeatureEval):
        (WebCore::min_aspect_ratioMediaFeatureEval):
        (WebCore::max_aspect_ratioMediaFeatureEval):
        (WebCore::min_device_aspect_ratioMediaFeatureEval):
        (WebCore::max_device_aspect_ratioMediaFeatureEval):
        (WebCore::min_device_pixel_ratioMediaFeatureEval):
        (WebCore::max_device_pixel_ratioMediaFeatureEval):
        (WebCore::min_heightMediaFeatureEval):
        (WebCore::max_heightMediaFeatureEval):
        (WebCore::min_widthMediaFeatureEval):
        (WebCore::max_widthMediaFeatureEval):
        (WebCore::min_device_heightMediaFeatureEval):
        (WebCore::max_device_heightMediaFeatureEval):
        (WebCore::min_device_widthMediaFeatureEval):
        (WebCore::max_device_widthMediaFeatureEval):
        (WebCore::min_resolutionMediaFeatureEval):
        (WebCore::max_resolutionMediaFeatureEval):
        (WebCore::animationMediaFeatureEval):
        (WebCore::transitionMediaFeatureEval):
        (WebCore::transform_2dMediaFeatureEval):
        (WebCore::transform_3dMediaFeatureEval):
        (WebCore::view_modeMediaFeatureEval):
        (WebCore::video_playable_inlineMediaFeatureEval):
        (WebCore::hoverMediaFeatureEval):
        (WebCore::pointerMediaFeatureEval):
        (WebCore::MediaQueryEvaluator::eval):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::convertToIntLength):
        (WebCore::StyleResolver::convertToFloatLength):
        (WebCore::createGridTrackBreadth):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::setStyle):
        (WebCore::StyleResolver::State::cssToLengthConversionData):
        * css/TransformFunctions.cpp:
        (WebCore::convertToFloatLength):
        (WebCore::transformsForValue):
        * css/TransformFunctions.h:
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * rendering/RenderThemeIOS.mm:
        (WebCore::applyCommonButtonPaddingToStyle):
        (WebCore::RenderThemeIOS::adjustButtonStyle):

2014-04-29  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] complex calc args for inset round vanish
        https://bugs.webkit.org/show_bug.cgi?id=132293

        Reviewed by Bem Jones-Bey.

        In order to use calc in the rounded parameters for inset shapes, we need
        to pass RenderStyle for the value creation as we did for the width arguments.
        Without taking RenderStyle into account, we hit an assert not reache
        in CSSPrimitiveValue::init in the debug builds.

        I've added new parsing test.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::init):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue):

2014-04-29  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] complex calc values for shape-margin return null for computed style
        https://bugs.webkit.org/show_bug.cgi?id=132313

        Reviewed by Bem Jones-Bey.

        We need to pass RenderStyle* to the cssValuePool when parsing
        shape-margin in order to use calc() as a parameter.

        I've added the new test case to parsing-shape-margin.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):

2014-04-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Row span info is wrong for table cells when a footer section is placed above a body section
        https://bugs.webkit.org/show_bug.cgi?id=131832

        Reviewed by Mario Sanchez Prada.

        If a <footer> section is placed before the body, it renders AX row information and order incorrectly.
        This also affects ARIA tables because they add their children by looking at renderer children, instead
        interrogating the RenderTable directly.

        Test: accessibility/table-with-footer-section-above-body.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::addChildrenFromSection):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):

2014-04-29  Chris Fleizach  <cfleizach@apple.com>

        AX: SpeechSynthesisUtterance cannot addEventListener
        https://bugs.webkit.org/show_bug.cgi?id=132321

        Reviewed by Mario Sanchez Prada.

        Modified an existing test (speech-synthesis-speak.html) to use addEventTarget.

        * Modules/speech/SpeechSynthesisUtterance.idl:

2014-04-29  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-outside polygon fails when first vertex is 0,0
        https://bugs.webkit.org/show_bug.cgi?id=132132

        Reviewed by Bem Jones-Bey.

        ShapeInterval now distinguishes between x1==x2 - isEmpty() and x1,x2 haven't been
        set yet - isUndefined(). Removed the ShapeInterval setX1() and setX2() methods, since
        they're no longer used.

        The polygon algorithm for computing excluded intervals now ignores horizontal
        edges. It also ignores edges whose lower vertex matches the top of the line, if
        the edge's Y direction is upwards (away from the top of the line). The rationale
        for this was explained here:
        http://hansmuller-webkit.blogspot.com/2012/11/revised-horizontal-box-algorithm.html

        Test: fast/shapes/shape-outside-floats/shape-outside-polygon-zero-vertex.html

        * rendering/shapes/PolygonShape.cpp:
        (WebCore::OffsetPolygonEdge::clippedEdgeXRange):
        (WebCore::PolygonShape::getExcludedIntervals):
        * rendering/shapes/ShapeInterval.h:
        (WebCore::ShapeInterval::ShapeInterval):
        (WebCore::ShapeInterval::isUndefined):
        (WebCore::ShapeInterval::x1):
        (WebCore::ShapeInterval::x2):
        (WebCore::ShapeInterval::width):
        (WebCore::ShapeInterval::isEmpty):
        (WebCore::ShapeInterval::setX1):
        (WebCore::ShapeInterval::setX2):
        (WebCore::ShapeInterval::overlaps):
        (WebCore::ShapeInterval::contains):
        (WebCore::ShapeInterval::unite):

2014-04-29  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Fix getClientRects() for content nodes
        https://bugs.webkit.org/show_bug.cgi?id=117407

        Reviewed by David Hyatt.

        This patch modifies getClientRects() to return a list of fragments
        for a fragmented box instead of a single rectangle positioned inside
        the region where the box center would appear.

        The approach is to split the border box of the element in regions using
        the layout positioning. Then each fragment is mapped to the view coordinates
        and the result added to the list of rectangles. To preserve the originating
        region when mapping the fragment through the ancestor tree I've introduced
        the concept of a current region. The current region is stored inside a
        CurrentRenderRegionMaintainer object, created whenever an algorithm needing
        it needs to run. When the maintainer is destroyed, the cleanup is made
        automatically. The RenderFlowThread holds a pointer to this structure for
        easy access.

        Tests: fast/regions/cssom/client-rects-fixed-content.html
               fast/regions/cssom/client-rects-forced-breaks.html
               fast/regions/cssom/client-rects-inline-complex.html
               fast/regions/cssom/client-rects-inline.html
               fast/regions/cssom/client-rects-nested-regions.html
               fast/regions/cssom/client-rects-positioned.html
               fast/regions/cssom/client-rects-relative-position.html
               fast/regions/cssom/client-rects-simple-block.html
               fast/regions/cssom/client-rects-transforms.html
               fast/regions/cssom/client-rects-unsplittable-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteQuads): Split the box in fragments.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteQuads): Split the box in fragments.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowToRegion):
        (WebCore::RenderFlowThread::mapLocalToContainer):
        (WebCore::RenderFlowThread::currentRegion):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::absoluteQuadsForBoxInRegion): Get
        the fragments for this box in the region.
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::absoluteQuadsForBox): Virtual function
        that can be used to implement fragments to client rects mapping.
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::rectFlowPortionForBox): Small change to correctly
        map empty rectangles to containers.
        (WebCore::CurrentRenderRegionMaintainer::CurrentRenderRegionMaintainer):
        (WebCore::CurrentRenderRegionMaintainer::~CurrentRenderRegionMaintainer):
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::absoluteQuadsForBoxInRegion):
        (WebCore::CurrentRenderRegionMaintainer::region):

2014-04-29  Andrei Bucur  <abucur@adobe.com>

        Store the containing region map inside the flow thread
        https://bugs.webkit.org/show_bug.cgi?id=131647

        Reviewed by Mihnea Ovidenie.

        The patch moves the containing region map inside the flow thread where
        it can be better handled in case the region chain changes and the map
        needs to be cleared.

        As a result of this move we are able to also cleanup the lines region
        information of a block flow when it is removed from the tree.

        Test: fast/regions/inline-strike-through.html

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::invalidateRegions):
        (WebCore::RenderFlowThread::removeLineRegionInfo):
        (WebCore::RenderFlowThread::checkLinesConsistency):
        (WebCore::RenderFlowThread::containingRegionMap):
        * rendering/RenderFlowThread.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::containingRegionMap):
        (WebCore::RootInlineBox::~RootInlineBox):
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::clearContainingRegion):
        (WebCore::RootInlineBox::setContainingRegion):

2014-04-28  Benjamin Poulain  <benjamin@webkit.org>

        SelectorCodeGenerator::generateElementIsNthChild() leaks the parent register :nth-child() is non-filtering
        https://bugs.webkit.org/show_bug.cgi?id=132311

        Reviewed by Andreas Kling.

        In two cases, the parent register was never returned to the register allocator:
        -Non filtering selectors (the early return).
        -Non marking selectors (at the moment: only querySelector API).

        Unfortunately, generateElementIsNthChild() makes function call, which forces us to do this manual allocation
        of the parentElement register. Long term, I want RegisterAllocator and FunctionCall to have a special type for that.

        Test: fast/selectors/several-nth-child.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):

2014-04-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: backtracking with current / parent element for child
        https://bugs.webkit.org/show_bug.cgi?id=132057

        Reviewed by Benjamin Poulain.

        Calculate appropriate backtracking start height from the closest
        descendant. And at first, we use it for a simple optimization.

        1. When backtracking start height equals to current height, we
        can simply jump to a descendant element check phase.
        2. When backtracking start height equals to current height + 1, we
        can simply jump to a descendant element traversing phase.

        We can apply this optimization to fragments with adjacent combinators.
        But, in the meantime, we start to implement it for a fragment with
        child combinator.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::TagNamePattern::TagNamePattern):
        (WebCore::SelectorCompiler::solveDescendantBacktrackingActionForChild):
        (WebCore::SelectorCompiler::solveBacktrackingAction):
        (WebCore::SelectorCompiler::equalTagNames):
        (WebCore::SelectorCompiler::equalTagNamePatterns):
        (WebCore::SelectorCompiler::computeBacktrackingStartHeightFromDescendant):
        (WebCore::SelectorCompiler::computeBacktrackingHeightFromDescendant):
        (WebCore::SelectorCompiler::requiresAdjacentTail):
        (WebCore::SelectorCompiler::requiresDescendantTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToParentNode):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToParentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateParentElementTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAncestorTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):

2014-04-28  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Restore the scroll position and scale from the HistoryItem (mostly)
        https://bugs.webkit.org/show_bug.cgi?id=132307

        Reviewed by Simon Fraser.

        * WebCore.exp.in:

2014-04-28  Beth Dakin  <bdakin@apple.com>

        Scrollbars do not update properly when topContentInset changes dynamically
        https://bugs.webkit.org/show_bug.cgi?id=132309
        -and corresponding-
        <rdar://problem/16642232>

        Reviewed by Tim Horton.

        It is not sufficient to do a layout and call updateScrollbars(). We must also call 
        RenderLayerCompositor::frameViewDidChangeSize() in order to properly adjust the 
        size and position of all of the scrolling-related layers.
        * page/FrameView.cpp:
        (WebCore::FrameView::topContentInsetDidChange):

2014-04-28  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] event.offsetX/offsetY don't work correctly
        https://bugs.webkit.org/show_bug.cgi?id=132284

        Reviewed by Simon Fraser.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        Change the code here to only trigger for CSS Regions and not for
        multi-column. Add a FIXME pointing out that the code is broken even for
        CSS regions.

         * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::mapAbsoluteToLocalPoint):
        Override mapAbsoluteToLocalPoint in order to guess a region and attempt
        to translate the point from that region to the flow thread local coordinate
        space.

        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromRegionToFlow):
        * rendering/RenderMultiColumnFlowThread.h:
        New helper function that just wraps calling the region's logical translation
        function and converting to/from physical coordinates.

2014-04-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167857.
        https://bugs.webkit.org/show_bug.cgi?id=132305

        the change was rolled out, roll out the new expectations as
        well (Requested by thorton on #webkit).

        Reverted changeset:

        "Unreviewed. Updating one bindings test baseline after
        r167855."
        http://trac.webkit.org/changeset/167857

2014-04-28  Dean Jackson  <dino@apple.com>

        [Mac] Use the animated version of setHighlighted on NSButtonCell where available
        https://bugs.webkit.org/show_bug.cgi?id=132295
        <rdar://problem/16747240>

        Reviewed by Beth Dakin.

        Like setState, there is an animated version of setHighlighted available.

        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates): Use private version of _setHighlighted where possible.

2014-04-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167855.
        https://bugs.webkit.org/show_bug.cgi?id=132301

        Broke the windows build (Requested by bfulgham on #webkit).

        Reverted changeset:

        "ScriptExecutionContext::Task should work well with C++11
        lambdas"
        https://bugs.webkit.org/show_bug.cgi?id=129795
        http://trac.webkit.org/changeset/167855

2014-04-24  Andy Estes  <aestes@apple.com>

        [iOS] Implement WebQuickLookHandleClient for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=132157

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported QuickLookHandle::previewUTI().
        * platform/network/ios/QuickLook.h:
        * platform/network/ios/QuickLook.mm:
        (WebCore::QuickLookHandle::previewFileName): Changed to return a WTF::String.
        (WebCore::QuickLookHandle::previewUTI): Added.

2014-04-28  Chris Fleizach  <cfleizach@apple.com>

        REGRESSION: Intermittent crash in SpeechSynthesis::didFinishSpeaking
        https://bugs.webkit.org/show_bug.cgi?id=111613

        Reviewed by Mark Lam.

        I think it's possible that didFinishSpeaking ends up calling directly back into start speaking, and the utterance reference
        we were holding can get cleared, so protecting this should avoid a few asserts.

        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):

2014-04-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167871.
        https://bugs.webkit.org/show_bug.cgi?id=132290

        broke a newmulticol test (spanner-nested-dynamic) (Requested
        by thorton on #webkit).

        Reverted changeset:

        "Store the containing region map inside the flow thread"
        https://bugs.webkit.org/show_bug.cgi?id=131647
        http://trac.webkit.org/changeset/167871

2014-04-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167853.
        https://bugs.webkit.org/show_bug.cgi?id=132288

        caused crashes+timeouts+layout test failures described in the
        bug (Requested by thorton on #webkit).

        Reverted changeset:

        "Coalesce responses on network process side"
        https://bugs.webkit.org/show_bug.cgi?id=132229
        http://trac.webkit.org/changeset/167853

2014-04-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] flickery scrolling with overflow-scrolling:touch
        https://bugs.webkit.org/show_bug.cgi?id=132150

        Reviewed by Tim Horton.

        Fix typo in a comment.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):

2014-04-28  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Builtin cursors do not properly handle transparency
        https://bugs.webkit.org/show_bug.cgi?id=131866

        Reviewed by Gustavo Noronha Silva.

        Tested by ManualTests/cursor.html.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::createNamedCursor): Instead of interpreting the source bitmap as an A1 image, use
        it as a 1-bit black and white image. We do this by:
            1. Painting the result to a full color image with transparency instead of an alpha-only surface.
            2. Masking a white background using the cursor alpha surface.
            3. Painting the black parts of the cursor by painting the source surface, where black pixels
            will be interpreted as full opaque pixels.

2014-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings symbols file.

        * bindings/gobject/webkitdom.symbols: Add missing symbols.

2014-04-28  Manuel Rego Casasnovas  <rego@igalia.com>

        OrderIterator refactoring to avoid extra loops
        https://bugs.webkit.org/show_bug.cgi?id=119061

        Reviewed by Darin Adler.

        This patch removes order values Vector and use a Vector of pairs instead. The pairs are formed by a child
        (RenderBox) and the index of this child. In addition, OrderIterator code is simplified.

        It provides a helper class OrderIteratorPopulator, used for manipulating the Vector directly. Which allows to
        consolidate the code into a single implementation across flexbox and grid. OrderIteratorPopulator part is based
        on a patch from Blink r153971 by <jchaffraix@chromium.org>.

        Current implementation is O(number of children * number of order values). Now it will just do a sort operation
        and then a regular loop. So if you have different order values in a flexbox or grid the performance will
        improve.

        Comparing results of perf-tests:
        * Layout/auto-grid-lots-of-data: ~0.5% worse.
        * Layout/fixed-grid-lots-of-data: ~0.5% worse.
        * Layout/fixed-grid-lots-of-data (setting 100 different order values): ~50% better.
        * Layout/flexbox-lots-of-data: ~5% better.

        No new tests, already covered by current tests.

        * rendering/OrderIterator.cpp:
        (WebCore::OrderIterator::currentChild): Return current child according to m_childrenIndex.
        (WebCore::OrderIterator::first): Initialize m_childrenIndex and return current child.
        (WebCore::OrderIterator::next): Increase m_childrenIndex and return current child.
        (WebCore::compareByOrderValueAndIndex): Sorts the Vector by order value and index.
        (WebCore::OrderIteratorPopulator::~OrderIteratorPopulator): Calls compareByOrderValueAndIndex() if there is any
        child with non default order value.
        (WebCore::OrderIteratorPopulator::collectChild): Adds the child and index to the Vector. Update
        m_allChildrenHaveDefaultOrderValue accordingly.
        (WebCore::OrderIterator::OrderIterator): Deleted.
        (WebCore::OrderIterator::setOrderValues): Deleted.
        (WebCore::OrderIterator::reset): Deleted.
        * rendering/OrderIterator.h:
        (WebCore::OrderIteratorPopulator::OrderIteratorPopulator): New helper class to manipulate the Vector.
        (WebCore::OrderIterator::currentChild): Deleted.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox): Remove OrderIterator intialization.
        (WebCore::RenderFlexibleBox::layoutBlock): Remove unneeded code related to old OrderValues vector.
        (WebCore::RenderFlexibleBox::prepareOrderIteratorAndMargins): Populate OrderIterator using collectChild().
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): Deleted.
        * rendering/RenderFlexibleBox.h: Rename computeMainAxisPreferredSizes() to prepareOrderIteratorAndMargins().
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid): Remove OrderIterator initialization.
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Populate OrderIterator using collectChild().

2014-04-28  Zan Dobersek  <zdobersek@igalia.com>

        std::bitset<>::test() does unnecessary bounds checks on CSSPropertyID bitsets
        https://bugs.webkit.org/show_bug.cgi?id=131685

        Reviewed by Darin Adler.

        Use std::bitset<>::operator[]() instead of std::bitset<>::test() to avoid
        bounds checks which are not necessary as long as a CSSPropertyID value is used.

        * css/CSSParser.cpp:
        (WebCore::filterProperties):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::hasProperty):
        (WebCore::StyleResolver::CascadedProperties::set):

2014-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] TextTrack kind and mode attributes are enums since r166180
        https://bugs.webkit.org/show_bug.cgi?id=132228

        Reviewed by Martin Robinson.

        Improve coding style according to review comments, that I forgot
        to do before landing previous commit.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_text_track_get_kind):
        (webkit_dom_text_track_get_mode):
        (webkit_dom_text_track_set_mode):

2014-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] TextTrack kind and mode attributes are enums since r166180
        https://bugs.webkit.org/show_bug.cgi?id=132228

        Reviewed by Martin Robinson.

        We don't support enum values yet in GObject DOM bindings, but they
        are internally strings anyway, so we can keep the old
        implementations using strings as custom functions until we
        properly support enums.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_text_track_get_kind):
        (webkit_dom_text_track_get_mode):
        (webkit_dom_text_track_set_mode):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:

2014-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] TextTrack::addCue can raise an exception since r163974
        https://bugs.webkit.org/show_bug.cgi?id=132227

        Reviewed by Martin Robinson.

        webkit_dom_text_track_add_cue() now receives a GError paramater
        which is an API break. Add
        webkit_dom_text_track_add_cue_with_error and keep
        webkit_dom_text_track_add_cue as deprecated to keep API
        compatibility.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_text_track_add_cue):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetEffectiveFunctionName):

2014-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] TextTrackCue API changed in r163649
        https://bugs.webkit.org/show_bug.cgi?id=132226

        Reviewed by Martin Robinson.

        TextTrackCue is now a base class and part of its API was moved to
        the derived class VTTCue. Update the GObject DOM bindings to keep
        backwards compatibility.

        * PlatformGTK.cmake: Generate bindings for DataCue and VTTCue.
        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_text_track_cue_get_cue_as_html): Mark as deprecated in
        favor of VTTCue API.
        (webkit_dom_text_track_cue_get_vertical): Ditto.
        (webkit_dom_text_track_cue_set_vertical): Ditto.
        (webkit_dom_text_track_cue_get_snap_to_lines): Ditto.
        (webkit_dom_text_track_cue_set_snap_to_lines): Ditto.
        (webkit_dom_text_track_cue_get_line): Ditto.
        (webkit_dom_text_track_cue_set_line): Ditto.
        (webkit_dom_text_track_cue_get_position): Ditto.
        (webkit_dom_text_track_cue_set_position): Ditto.
        (webkit_dom_text_track_cue_get_size): Ditto.
        (webkit_dom_text_track_cue_set_size): Ditto.
        (webkit_dom_text_track_cue_get_align): Ditto.
        (webkit_dom_text_track_cue_set_align): Ditto.
        (webkit_dom_text_track_cue_get_text): Ditto.
        (webkit_dom_text_track_cue_set_text): Ditto.
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols: Add new deprecated symbols.
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap): Add generic wrap for TextTrackCue now that it's a
        base class to generate DataCue or VTTCue objects.
        * bindings/gobject/WebKitDOMPrivate.h:
        * bindings/gobject/webkitdom.symbols: Add DataCue symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (IsPolymorphic): Add TextTrackCue to the list of polymorphic classes.

2014-04-27  Andrei Bucur  <abucur@adobe.com>

        Store the containing region map inside the flow thread
        https://bugs.webkit.org/show_bug.cgi?id=131647

        Reviewed by Mihnea Ovidenie.

        The patch moves the containing region map inside the flow thread where
        it can be better handled in case the region chain changes and the map
        needs to be cleared.

        As a result of this move we are able to also cleanup the lines region
        information of a block flow when it is removed from the tree.

        Test: fast/regions/inline-strike-through.html

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::invalidateRegions):
        (WebCore::RenderFlowThread::removeLineRegionInfo):
        (WebCore::RenderFlowThread::checkLinesConsistency):
        (WebCore::RenderFlowThread::containingRegionMap):
        * rendering/RenderFlowThread.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::containingRegionMap):
        (WebCore::RootInlineBox::~RootInlineBox):
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::clearContainingRegion):
        (WebCore::RootInlineBox::setContainingRegion):

2014-04-27  Darin Adler  <darin@apple.com>

        REGRESSION (r159345): The hover state for links in the top navigation of Yahoo.com doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=132241
        rdar://problem/16501924

        Reviewed by Andreas Kling.

        Test: fast/text/simple-lines-hover-underline.html

        Checked that this does not hurt performance by running the
        run-perf-tests PerformanceTests/Layout/line-layout.html command before and after.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hitTestInlineChildren): Use simpleLineLayout function rather than
        getting at the data member directly.
        (WebCore::RenderBlockFlow::firstLineBaseline): Ditto.
        (WebCore::RenderBlockFlow::inlineBlockBaseline): Ditto.
        (WebCore::RenderBlockFlow::lineCount): Ditto.
        (WebCore::RenderBlockFlow::paintInlineChildren): Ditto.
        (WebCore::RenderBlockFlow::hasLines): Ditto.
        (WebCore::RenderBlockFlow::simpleLineLayout): Added logic to determine which path to use if
        m_lineLayoutPath is undetermined, and call createLineBoxes if it's not simple.
        (WebCore::RenderBlockFlow::ensureLineBoxes): Factored out most of the code into a new
        createLineBoxes function.
        (WebCore::RenderBlockFlow::createLineBoxes): Ditto.

        * rendering/RenderBlockFlow.h: Made simpleLineLayout function no longer an inline.
        Added a private createLineBoxes function.

2014-04-27  Praveen R Jadhav  <praveen.j@samsung.com>

        [MediaStream] .ended shouldn't be part of MediaStream IDL
        https://bugs.webkit.org/show_bug.cgi?id=132104

        Reviewed by Eric Carlson.

        .ended attribute is spec'ed out of MediaStream IDL. Instead, .active
        is introduced to handle more scenarios. This patch replaces all 'ended'
        attribute calls with corresponding 'active' attributes. 

        MediaStream-add-remove-tracks.html is updated.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack): Replaced ended() with active().
        (WebCore::MediaStream::removeTrack): setEnded() isn't called. setActive()
        is retained which propagates oninactive event.
        (WebCore::MediaStream::trackDidEnd): setEnded() isn't called.
        (WebCore::MediaStream::removeRemoteSource): Replaced ended() with active().
        (WebCore::MediaStream::addRemoteTrack): Replaced ended() with active().
        (WebCore::MediaStream::removeRemoteTrack): Replaced ended() with active().
        (WebCore::MediaStream::ended): Deleted.
        (WebCore::MediaStream::setEnded): Deleted.
        (WebCore::MediaStream::streamDidEnd): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didRemoveRemoteStream): Replaced setEnded()
        with setActive().
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::setActive): Updated comment from bug 
        https://bugs.webkit.org/show_bug.cgi?id=131973
        (WebCore::MediaStreamPrivate::setEnded): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivate::ended): Deleted.

2014-04-25  Andy Estes  <aestes@apple.com>

        [iOS] Stop creating a WKWebResourceQuickLookDelegate for every WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=132215

        Reviewed by Dan Bernstein.

        * WebCore.exp.in: Moved QuickLook symbols to the USE(QUICK_LOOK) stanza.
        * platform/network/ios/QuickLook.h: Changed one of the create() overloads to no longer take a delegate argument.
        * platform/network/ios/QuickLook.mm: Moved WKWebResourceQuickLookDelegate to here and renamed to WebResourceLoaderQuickLookDelegate.
        (WebCore::QuickLookHandle::create): Created a WebResourceLoaderQuickLookDelegate only if QuickLook can handle the response.

2014-04-27  Sam Weinig  <sam@webkit.org>

        [iOS WebKit2] Add support for text autosizing
        <rdar://problem/16545245>
        https://bugs.webkit.org/show_bug.cgi?id=132237

        Reviewed by Tim Horton.

        Move text autosizing width from Frame to Page, as it is a Page level concept.

        * WebCore.exp.in:
        * page/Frame.cpp:
        (WebCore::Frame::textAutosizingWidth): Deleted.
        (WebCore::Frame::setTextAutosizingWidth): Deleted.
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::textAutosizingWidth):
        (WebCore::Page::setTextAutosizingWidth):

2014-04-27  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Updating one bindings test baseline after r167855.

        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback):

2014-04-27  Darin Adler  <darin@apple.com>

        Webpages can trigger loads with invalid URLs
        https://bugs.webkit.org/show_bug.cgi?id=132224
        rdar://problem/16697142

        Reviewed by Alexey Proskuryakov.

        Invalid URLs can be a way to trick the user about what website they
        are looking at.  Still trying to figure out a good way to regression-test this.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Pass a URL rather than a String to
        the navigation scheduler.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData): Ditto.

        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation): Take a URL rather
        than a string.
        (WebCore::ScheduledURLNavigation::url): Ditto.
        (WebCore::ScheduledRedirect::ScheduledRedirect): Ditto.
        (WebCore::ScheduledLocationChange::ScheduledLocationChange): Ditto.
        (WebCore::ScheduledRefresh::ScheduledRefresh): Ditto.
        (WebCore::NavigationScheduler::shouldScheduleNavigation): Added a check that
        prevents navigation to any URL that is invalid, except for JavaScript URLs,
        which need not be valid.
        (WebCore::NavigationScheduler::scheduleRedirect): Use URL instead of String.
        (WebCore::NavigationScheduler::scheduleLocationChange): Use URL instead of
        String. Also got rid of empty string check since empty URLs are also invalid,
        and so shouldScheduleNavigation will take care of it.
        (WebCore::NavigationScheduler::scheduleRefresh): Use URL instead of String.

        * loader/NavigationScheduler.h: Take URL instead of String. Also removed some
        unneeded incldues and uses of WTF_MAKE_NONCOPYABLE. NavigationScheduler is
        already noncopyable because it has a reference for a data member, and the
        disabler doesn't have any real reason to be noncopyable.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe): Pass a URL rather than a
        String to the NavigationScheduler.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Ditto.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::urlWithUniqueSecurityOrigin): Return a URL instead
        of a String.
        * page/SecurityOrigin.h: Updated for above change.

2014-04-27  Zan Dobersek  <zdobersek@igalia.com>

        ScriptExecutionContext::Task should work well with C++11 lambdas
        https://bugs.webkit.org/show_bug.cgi?id=129795

        Reviewed by Darin Adler.

        Instead of having classes that subclass ScriptExecutionContext::Task and override
        the performTask(ScriptExecutionContext*) method, have the ScriptExecutionContext::Task
        take in a std::function<void (ScriptExecutionContext*)>-like object trough the constructor
        which would contain the code currently kept in the performTask() methods.

        This enables inlining C++11 lambdas into ScriptExecutionContext::postTask() calls. For
        cleanup tasks, the Task object can be implicitly constructed by using the initializer list
        constructor with the first argument being the ScriptExecutionContext::Task::CleanupTask tag.
        The ScriptExecutionContext class remains non-copyable and now stores the passed-in invokable
        object in the std::function wrapper, along with a boolean member that indicates whether the
        task is of cleanup nature.

        * Modules/quota/StorageErrorCallback.cpp:
        (WebCore::StorageErrorCallback::CallbackTask::CallbackTask):
        (WebCore::StorageErrorCallback::CallbackTask::performTask): Deleted.
        * Modules/quota/StorageErrorCallback.h:
        (WebCore::StorageErrorCallback::CallbackTask::create): Deleted.
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::~Database):
        (WebCore::Database::runTransaction):
        (WebCore::Database::scheduleTransactionCallback):
        (WebCore::DerefContextTask::create): Deleted.
        (WebCore::DerefContextTask::performTask): Deleted.
        (WebCore::DerefContextTask::isCleanupTask): Deleted.
        (WebCore::DerefContextTask::DerefContextTask): Deleted.
        (WebCore::callTransactionErrorCallback): Deleted.
        (WebCore::DeliverPendingCallbackTask::create): Deleted.
        (WebCore::DeliverPendingCallbackTask::performTask): Deleted.
        (WebCore::DeliverPendingCallbackTask::DeliverPendingCallbackTask): Deleted.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseCreationCallbackTask::create): Deleted.
        (WebCore::DatabaseCreationCallbackTask::performTask): Deleted.
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask): Deleted.
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::CloseSyncDatabaseOnContextThreadTask::create): Deleted.
        (WebCore::CloseSyncDatabaseOnContextThreadTask::performTask): Deleted.
        (WebCore::CloseSyncDatabaseOnContextThreadTask::CloseSyncDatabaseOnContextThreadTask): Deleted.
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::create): Deleted.
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::performTask): Deleted.
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::isCleanupTask): Deleted.
        (WebCore::SQLCallbackWrapper::SafeReleaseTask::SafeReleaseTask): Deleted.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadDestroy):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::WorkerGlobalScopeDidInitializeTask::create): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::WorkerGlobalScopeDidInitializeTask::~WorkerGlobalScopeDidInitializeTask): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::WorkerGlobalScopeDidInitializeTask::WorkerGlobalScopeDidInitializeTask): Deleted.
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * bindings/js/JSCallbackData.h:
        (WebCore::DeleteCallbackDataTask::DeleteCallbackDataTask):
        (WebCore::DeleteCallbackDataTask::create): Deleted.
        (WebCore::DeleteCallbackDataTask::performTask): Deleted.
        (WebCore::DeleteCallbackDataTask::isCleanupTask): Deleted.
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask):
        (WebCore::JSGlobalObjectTask::~JSGlobalObjectTask): Deleted.
        (WebCore::JSGlobalObjectTask::performTask): Deleted.
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementation):
        * dom/CrossThreadTask.h:
        (WebCore::CrossThreadTask1::performTask):
        (WebCore::CrossThreadTask2::performTask):
        (WebCore::CrossThreadTask3::performTask):
        (WebCore::CrossThreadTask4::performTask):
        (WebCore::CrossThreadTask5::performTask):
        (WebCore::CrossThreadTask6::performTask):
        (WebCore::CrossThreadTask7::performTask):
        (WebCore::CrossThreadTask8::performTask):
        (WebCore::createCallbackTask):
        (WebCore::CrossThreadTask1::create): Deleted.
        (WebCore::CrossThreadTask2::create): Deleted.
        (WebCore::CrossThreadTask3::create): Deleted.
        (WebCore::CrossThreadTask4::create): Deleted.
        (WebCore::CrossThreadTask5::create): Deleted.
        (WebCore::CrossThreadTask6::create): Deleted.
        (WebCore::CrossThreadTask7::create): Deleted.
        (WebCore::CrossThreadTask8::create): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::addConsoleMessage):
        (WebCore::Document::addMessage):
        (WebCore::Document::postTask):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::PerformTaskContext::PerformTaskContext): Deleted.
        (WebCore::Document::didReceiveTask): Deleted.
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::processMessagePortMessagesSoon):
        (WebCore::ScriptExecutionContext::timerAlignmentInterval):
        (WebCore::ProcessMessagesSoonTask::create): Deleted.
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::performTask): Deleted.
        (WebCore::ScriptExecutionContext::Task::~Task): Deleted.
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::Task::Task):
        (WebCore::ScriptExecutionContext::Task::performTask):
        (WebCore::ScriptExecutionContext::Task::isCleanupTask):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::create): Deleted.
        * dom/StringCallback.cpp:
        (WebCore::StringCallback::scheduleCallback):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::postListenerTask):
        (WebCore::CallCacheListenerTask::create): Deleted.
        (WebCore::CallCacheListenerTask::CallCacheListenerTask): Deleted.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerGlobalScope):
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        (WebCore::SharedWorkerConnectTask::create): Deleted.
        (WebCore::SharedWorkerConnectTask::performTask): Deleted.
        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::EventDispatcher::EventDispatcher):
        (WebCore::WorkerEventQueue::EventDispatcher::~EventDispatcher):
        (WebCore::WorkerEventQueue::EventDispatcher::dispatch):
        (WebCore::WorkerEventQueue::enqueueEvent):
        (WebCore::WorkerEventQueue::cancelEvent):
        (WebCore::WorkerEventQueue::close):
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::close):
        (WebCore::WorkerGlobalScope::postTask):
        (WebCore::WorkerGlobalScope::addConsoleMessage):
        (WebCore::WorkerGlobalScope::addMessage):
        (WebCore::CloseWorkerGlobalScopeTask::create): Deleted.
        (WebCore::CloseWorkerGlobalScopeTask::performTask): Deleted.
        (WebCore::CloseWorkerGlobalScopeTask::isCleanupTask): Deleted.
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postTaskToLoader):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeDestroyed):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeClosed):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        (WebCore::WorkerMessagingProxy::confirmMessageFromWorkerObject):
        (WebCore::WorkerMessagingProxy::reportPendingActivity):
        (WebCore::MessageWorkerGlobalScopeTask::create): Deleted.
        (WebCore::MessageWorkerGlobalScopeTask::MessageWorkerGlobalScopeTask): Deleted.
        (WebCore::MessageWorkerGlobalScopeTask::performTask): Deleted.
        (WebCore::MessageWorkerTask::create): Deleted.
        (WebCore::MessageWorkerTask::MessageWorkerTask): Deleted.
        (WebCore::MessageWorkerTask::performTask): Deleted.
        (WebCore::WorkerExceptionTask::create): Deleted.
        (WebCore::WorkerExceptionTask::WorkerExceptionTask): Deleted.
        (WebCore::WorkerExceptionTask::performTask): Deleted.
        (WebCore::WorkerGlobalScopeDestroyedTask::create): Deleted.
        (WebCore::WorkerGlobalScopeDestroyedTask::WorkerGlobalScopeDestroyedTask): Deleted.
        (WebCore::WorkerGlobalScopeDestroyedTask::performTask): Deleted.
        (WebCore::WorkerTerminateTask::create): Deleted.
        (WebCore::WorkerTerminateTask::WorkerTerminateTask): Deleted.
        (WebCore::WorkerTerminateTask::performTask): Deleted.
        (WebCore::WorkerThreadActivityReportTask::create): Deleted.
        (WebCore::WorkerThreadActivityReportTask::WorkerThreadActivityReportTask): Deleted.
        (WebCore::WorkerThreadActivityReportTask::performTask): Deleted.
        (WebCore::PostMessageToPageInspectorTask::create): Deleted.
        (WebCore::PostMessageToPageInspectorTask::PostMessageToPageInspectorTask): Deleted.
        (WebCore::PostMessageToPageInspectorTask::performTask): Deleted.
        (WebCore::NotifyNetworkStateChangeTask::create): Deleted.
        (WebCore::NotifyNetworkStateChangeTask::NotifyNetworkStateChangeTask): Deleted.
        (WebCore::NotifyNetworkStateChangeTask::performTask): Deleted.
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::postTask):
        (WebCore::WorkerRunLoop::postTaskAndTerminate):
        (WebCore::WorkerRunLoop::postTaskForMode):
        (WebCore::WorkerRunLoop::Task::create):
        (WebCore::WorkerRunLoop::Task::performTask):
        (WebCore::WorkerRunLoop::Task::Task):
        * workers/WorkerRunLoop.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):
        (WebCore::WorkerThreadShutdownFinishTask::create): Deleted.
        (WebCore::WorkerThreadShutdownFinishTask::performTask): Deleted.
        (WebCore::WorkerThreadShutdownFinishTask::isCleanupTask): Deleted.
        (WebCore::WorkerThreadShutdownStartTask::create): Deleted.
        (WebCore::WorkerThreadShutdownStartTask::performTask): Deleted.
        (WebCore::WorkerThreadShutdownStartTask::isCleanupTask): Deleted.

2014-04-27  Antti Koivisto  <antti@apple.com>

        Coalesce responses on network process side
        https://bugs.webkit.org/show_bug.cgi?id=132229

        Reviewed by Andreas Kling.

        * WebCore.exp.in:

2014-04-27  David Kilzer  <ddkilzer@apple.com>

        Roll out changes not part of the patch reviewed for Bug 132089
        <http://webkit.org/b/132089>

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):

2014-04-26  Darin Adler  <darin@apple.com>

        Frame and page lifetime fixes in WebCore::createWindow
        https://bugs.webkit.org/show_bug.cgi?id=132089

        Reviewed by Sam Weinig.

        Speculative fix because I was unable to reproduce the crash that was
        reported with the test case attached to this bug.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow): Changed code to remove the assumption that calls
        out will not destroy the page or frame. Use RefPtr for the frame, and
        added early exits if frame->page() becomes null at any point before we
        use a page pointer.

2014-04-26  Alexey Proskuryakov  <ap@apple.com>

        Local files should not be allowed to read pasteboard data during drag
        https://bugs.webkit.org/show_bug.cgi?id=131767

        Reviewed by Sam Weinig.

        Test: fast/files/local-file-drag-security.html

        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::tryDHTMLDrag):
        Make an old Dashboard quirk really Dashboard only.

2014-04-24  Darin Adler  <darin@apple.com>

        REGRESSION (r164133): Selection doesn't paint when scrolling some pages
        https://bugs.webkit.org/show_bug.cgi?id=132172
        rdar://problem/16719473

        Reviewed by Brent Fulgham.

        Tests: fast/dynamic/remove-invisible-node-inside-selection.html
               fast/dynamic/remove-node-inside-selection.html

        * editing/FrameSelection.cpp:
        (WebCore::clearRenderViewSelection): Changed to take a Node& because having
        this take a Position& was unnecessary and strange, when really it just needs
        to take a document as an argument.
        (WebCore::DragCaretController::nodeWillBeRemoved): Updated for the above.
        (WebCore::FrameSelection::respondToNodeModification): Added code to set the
        m_pendingSelectionUpdate flag and call RenderView::setNeedsLayout so the
        selection will be recomputed after it's temporarily cleared when one of
        the selected nodes is removed.

2014-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r167689): Hovering file name in a file input causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=132214

        Reviewed by Andreas Kling.

        The bug was caused by callDefaultEventHandlersInTheBubblingOrder unconditionally
        accessing path.contextAt(0) even if the event path was empty.

        Fixed the bug by exiting early when the event path is empty.

        Test: fast/events/shadow-event-path-2.html

        * dom/EventDispatcher.cpp:
        (WebCore::callDefaultEventHandlersInTheBubblingOrder):

2014-04-25  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r167828): http/tests/media/hls/video-controls-live-stream.html fails

        * English.lproj/mediaControlsLocalizedStrings.js:
        Add 'Live Broadcast' to the localized strings list.

2014-04-25  Brady Eidson  <beidson@apple.com>

        Add a selection overlay.
        <rdar://problem/16727797> and https://bugs.webkit.org/show_bug.cgi?id=132200

        Reviewed by David Hyatt.

        No new tests (WK2 feature in development).

        * WebCore.xcodeproj/project.pbxproj:

        Add a SelectionRectGathterer class.
        It creates a Notifier (given a RenderView) then accepts Rects from the RenderView.
        When the Notifier is destroyed, the appropriate EditorClient is notified of the gathered rects.
        * editing/SelectionRectGatherer.cpp: Added.
        (WebCore::SelectionRectGatherer::SelectionRectGatherer):
        (WebCore::SelectionRectGatherer::addRect):
        (WebCore::SelectionRectGatherer::addRects):
        (WebCore::SelectionRectGatherer::Notifier::Notifier):
        (WebCore::SelectionRectGatherer::Notifier::~Notifier):
        (WebCore::SelectionRectGatherer::clearAndCreateNotifier):
        * editing/SelectionRectGatherer.h: Added.

        * page/EditorClient.h:
        (WebCore::EditorClient::selectionRectsDidChange):

        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::setSelection): Clear the gatherer’s rects then create a Notifier.
        (WebCore::RenderView::setSubtreeSelection): Give all the selection rects to be painted to
          the SelectionRectGatherer.
        * rendering/RenderView.h:

2014-04-08  Jer Noble  <jer.noble@apple.com>

        Support "Live" streams in media controls.
        https://bugs.webkit.org/show_bug.cgi?id=131390

        Reviewed by Brent Fulgham.

        Test: http/tests/media/hls/video-controls-live-stream.html

        Support "Live" streams by adding an isLive property to our media controls.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-status-display):
        (video:-webkit-full-screen::-webkit-media-controls-status-display):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): isLive defaults to false.
        (Controller.prototype.setIsLive): Set the isLive property and conditionally reconfigure the controls.
        (Controller.prototype.configureInlineControls): Don't add the timeline if we are live.
        (Controller.prototype.configureFullScreenControls): Ditto.
        (Controller.prototype.updateStatusDisplay): Added.
        (Controller.prototype.handleLoadStart): Call updateStatusDisplay().
        (Controller.prototype.handleError): Ditto.
        (Controller.prototype.handleAbort): Ditto.
        (Controller.prototype.handleSuspend): Ditto.
        (Controller.prototype.handleStalled): Ditto.
        (Controller.prototype.handleWaiting): Ditto.
        (Controller.prototype.updateDuration): Ditto.
        (Controller.prototype.updateReadyState): Ditto.

2014-04-25  Dean Jackson  <dino@apple.com>

        Allow a platform-specific size enumeration to be passed into popup-menu display
        https://bugs.webkit.org/show_bug.cgi?id=132195

        Reviewed by Brent Fulgham. With some in-person review comments from Sam Weinig.

        Platforms like OS X use a set of predefined sizes for built-in controls
        used for <select>: normal, small and mini. Expose that information to
        the PopupMenuClient via the PopupMenuStyle, allowing it to be passed
        into the platform code in WebKitSystemInterface.

        * platform/PopupMenuStyle.h: Add a menu size enum.
        (WebCore::PopupMenuStyle::PopupMenuStyle):
        (WebCore::PopupMenuStyle::menuSize):
        * platform/mac/WebCoreSystemInterface.h: Pass in NSControlSize as a parameter
        to WKPopupMenu.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::menuStyle): Ask the RenderTheme to calculate the size
        of the menu button, so that it can be added to the PopupMenuStyle.
        * rendering/RenderTheme.h: New method to retrieve the menu size.
        (WebCore::RenderTheme::popupMenuSize): Convert an NSControlSize into a PopupMenuSize.
        * rendering/RenderThemeMac.h: Override the base function, and add a
        controlSizeForCell helper.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::controlSizeForCell): Used by this new
        code and the old setControlSizeForCell to calculate the NSControlSize
        that would be used for the button.
        (WebCore::RenderThemeMac::setControlSize): Call the new helper.
        (WebCore::RenderThemeMac::popupMenuSize): Return the value from the helper.

2014-04-25  Javier Fernandez  <jfernandez@igalia.com>

        REGRESSION(r167799): ASSERTION in parseGridTemplateShorthand in fast/css-grid-layout/grid-template-shorthand-get-set.html
        https://bugs.webkit.org/show_bug.cgi?id=132194

        Reviewed by Martin Robinson.

        Properly resolving the grid-template shorthand for the corresponding longhand
        properties.

        No new tests, grid-template-shorthand-get-set.html already covers this case.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-04-25  David Hyatt  <hyatt@apple.com>

        Column rules not respecting scroll offsets.
        https://bugs.webkit.org/show_bug.cgi?id=109683

        Reviewed by Dean Jackson.

        Added fast/multicol/scrolling-column-rules.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        Make paintColumnRules virtual so that it works with both column implementations.

        (WebCore::RenderBlock::paintObject):
        Changed to call paintColumnRules with the adjusted scroll offset and to do it after
        bailing on the root background only check.

        * rendering/RenderBlock.h:
        paintColumnRules is now virtual.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::paintColumnRules):
        (WebCore::RenderBlockFlow::paintBoxDecorations): Deleted.
        * rendering/RenderBlockFlow.h:
        Got rid of paintBoxDecorations override since it failed when hasBoxDecorations was false
        anyway. Override paintColumnRules instead to paint at the right time.

2014-04-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash applying editing commands from iframe onload event

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

        This patch merges the Chromium bug workaround from
        <http://src.chromium.org/viewvc/blink?revision=162080&view=revision>,
        which prevents reentrancy in CompositeEditCommand::apply().

        Reviewed by Darin Adler.

        Test: editing/apply-style-iframe-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::HTMLNames::ReentrancyGuard::isRecursiveCall):
        (WebCore::HTMLNames::ReentrancyGuard::Scope::Scope):
        (WebCore::HTMLNames::ReentrancyGuard::Scope::~Scope):
        (WebCore::CompositeEditCommand::apply):
        If this is a recursive call, return early.

2014-04-25  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] fast/multicol/hit-test-* layout tests all fail
        https://bugs.webkit.org/show_bug.cgi?id=132081

        Reviewed by Dean Jackson.

        Added a bunch of tests in fast/multicol/newmulticol/compare-with-old-impl/hit-test-*.html

        * rendering/RenderBlock.h:
        Make offsetForContents public, since I need to call it from RenderMultiColumnSet.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::populate):
        Stop an ASSERT in the new columns code on the hit tests by making sure layout state is
        disabled when moving children around.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::positionForPoint):
        Refactor this function to call a helper function instead, translateRegionPointToFlowThread.

        (WebCore::RenderMultiColumnSet::translateRegionPointToFlowThread):
        This function is logical (unlike the mistaken physical function I first implemented in
        positionForPoint).

        (WebCore::RenderMultiColumnSet::updateHitTestResult):
        * rendering/RenderMultiColumnSet.h:
        Overridden to fill in the correct local coordinate when the HTML document is inside a paginated
        RenderView. Note that column spans don't actually work, but once we move over to a 
        non-column based pagination API, that will become irrelevant.

2014-04-25  Andreas Kling  <akling@apple.com>

        Mark some things with WTF_MAKE_FAST_ALLOCATED.
        <https://webkit.org/b/132198>

        Use FastMalloc for more things.

        Reviewed by Anders Carlsson.

        * bindings/js/ScriptController.h:
        * dom/DocumentOrderedMap.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * loader/HistoryController.h:
        * page/DeviceClient.h:
        * page/DeviceController.h:
        * page/EventHandler.h:
        * page/Page.h:
        * page/scrolling/ScrollingStateNode.h:
        * platform/graphics/FontGenericFamilies.h:
        * platform/graphics/FontPlatformData.h:

2014-04-25  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Rename objectShouldPaintInFlowRegion to something more clear
        https://bugs.webkit.org/show_bug.cgi?id=132050

        Reviewed by Andreas Kling.

        The objectShouldPaintInFlowRegion is no longer used only by the painting process
        but also for hit-testing, so it was renamed to something more generic (objectShouldFragmentInFlowRegion).

        No new tests required, it's just a method rename.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldFragmentInFlowRegion):
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion): Deleted.
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::ensureOverflowForBox):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):

2014-04-25  Enrica Casucci  <enrica@apple.com>

        iOS build fix after http://trac.webkit.org/changeset/167803
        Unreviewed.

        * page/Frame.cpp:
        (WebCore::Frame::checkOverflowScroll):
        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries):

2014-04-24  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Add support for offsetLeft and offsetTop.
        https://bugs.webkit.org/show_bug.cgi?id=132080

        Reviewed by Andrei Bucur.

        Added fast/multicol/client-spanners-complex.html and offset-top-left.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent):
        Patch the offsetLeft/Top loop to handle calling into RenderMultiColumnFlowThread
        in order to adjust the coordinates for the new multicolumn layout.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::mapFromFlowToRegion):
        Modified to use a helper that can be shared by offsetLeft/Top code. This code
        ran for client rects, and I'm moving/refactoring it for more sharing.

        (WebCore::RenderMultiColumnFlowThread::physicalTranslationOffsetFromFlowToRegion):
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromFlowToRegion):
        * rendering/RenderMultiColumnFlowThread.h:
        New functions that beef up what was in mapFromFlowToRegion and fix some bugs
        with the translation code.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset):
        Patched to factor in the flow thread portion rect of the specific multicolumn set.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderMultiColumnFlowThread):
        Added for toRenderMultiColumnFlowThread capability.

2014-04-25  Brent Fulgham  <bfulgham@apple.com>

        ScrollingCoordinator is unaware of topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=132158
        <rdar://problem/16706152>

        Reviewed by Darin Adler.

        Test: platform/mac/fast/scrolling/scroll-select-bottom-test.html

        The calculation of non-fast-scrollable regions does not currently take
        the topContentOffset into account. Consequently, the logic that decides
        whether to stay on the scrolling thread, or drop down to an individual
        page element, can make the wrong choice. This is especially true for
        small scrollable regions (such as <select> elements), where the
        topContentInset may be quite close to the size of the scrollable
         element itself.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion): Also
        include the topContentInset value in our calculation.

2014-04-25  Javier Fernandez  <jfernandez@igalia.com>

        REGRESSION(r167799): Breaks debug build
        https://bugs.webkit.org/show_bug.cgi?id=132194

        Reviewed by Andrei Bucur.

        Fix the debug bots after r167799

        No new tests, no new functionality.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateShorthand):

2014-04-25  Miyoung Shin  <myid.shin@samsung.com>

        Web process is crashed during dispatching touchEvent created by JS.
        https://bugs.webkit.org/show_bug.cgi?id=113225

        Reviewed by Benjamin Poulain.

        TouchEvent created by JS should have the necessary attributes
        of touches, targetTouches and changedTouches.
        It should be verified weather there are touchLists before dispatching touch event.

        Test: fast/events/touch/create-touch-event-without-touchList.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventPath::updateTouchLists):
        (WebCore::addRelatedNodeResolversForTouchList): Deleted.

2014-04-25  Philippe Normand  <pnormand@igalia.com>

        [GTK] File webkitRelativePath attribute was removed in r163483
        https://bugs.webkit.org/show_bug.cgi?id=132193

        Reviewed by Carlos Garcia Campos.

        Add the removed getter as deprecated API to keep backwards compatibility.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_file_get_webkit_relative_path):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:

2014-04-25  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Overflow selection doesn't work properly
        https://bugs.webkit.org/show_bug.cgi?id=130715

        Reviewed by David Hyatt.

        When hit-testing, painting block selection gaps and searching for the node at a specific point inside a flow thread,
        the region range of the box being checked must be validated in order to not return false positives. Otherwise, hit-testing
        at the top of region B could hit elements that overflow the bottom of region A.

        Tests: fast/regions/selection-in-overflow-hit-testing.html
               fast/regions/selection-in-overflow.html
               fast/regions/selection-in-text-after-overflow-hit-testing.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains):
        * editing/VisibleUnits.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::selectionExtentRespectingEditingBoundary):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::positionForPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::positionForPoint):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderBox.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::positionForPoint):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForPoint):
        * rendering/RenderInline.h:
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::positionForPoint):
        * rendering/RenderLineBreak.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::positionForPoint):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::positionForPoint):
        * rendering/RenderObject.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::positionForPoint):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderReplaced.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        * rendering/RenderText.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::positionForPoint):
        * rendering/svg/RenderSVGText.h:

2014-04-25  Philippe Normand  <pnormand@igalia.com>

        [GTK] Iframe seamless support was removed in r163427
        https://bugs.webkit.org/show_bug.cgi?id=132192

        Reviewed by Carlos Garcia Campos.

        Add the removed get and set methods as deprecated API to keep
        backwards compatibility.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_processing_instruction_set_data):
        (webkit_dom_html_iframe_element_get_seamless):
        (webkit_dom_html_iframe_element_set_seamless):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:

2014-04-25  Philippe Normand  <pnormand@igalia.com>

        [GTK] HTMLInputElement webkitdirectory property was removed in r163483
        https://bugs.webkit.org/show_bug.cgi?id=132191

        Reviewed by Carlos Garcia Campos.

        Add the removed get and set methods as deprecated API to keep
        backwards compatibility.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_html_input_element_get_webkitdirectory):
        (webkit_dom_html_input_element_set_webkitdirectory):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:

2014-04-25  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Implementation of the grid-template shorthand.
        https://bugs.webkit.org/show_bug.cgi?id=128980

        Reviewed by Darin Adler.

        This shorthand sets the values for the grid-template-columns,
        grid-template-rows and grid-template-areas, so the implementation
        tries to reuse as much available parsing functions as possible.

        The "parsingGridTrackList" was refactored to return a CSSValue and
        let the "parseValue" function to assign the property value. The
        "forwardSlash" operator is now valid when the track-list clause is
        part of a shorthand. The "parseValue" function checkouts that only
        additional clauses are allowed when processing shorthands; the
        grid-columns-rows-get-set.html tests was modified to verify this.

        The "parseGridTemplateAreas" was refactored too, in order to
        process single areas's rows. This is very useful for the
        gris-template secondary syntax, which mixes areas and rows values.

        Finally, the "parseGirdLineNames" function was modified as well by
        defining an new argument to concatenate head/tail custom-ident
        elements and ensure the identList is at the heading index, since
        it's now possible the parseList was rewound.

        The implementation of the grid-template shorthand tries first to
        match the <grid-template-columns> / <grid-template-rows> syntax,
        failing back to the secondary syntax if needed.  This approach
        requires to rewind the parseList but it produces a clearer code.

        Test: fast/css-grid-layout/grid-template-shorthand-get-set.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridTemplateRowsAndAreas):
        (WebCore::CSSParser::parseGridTemplateShorthand):
        (WebCore::CSSParser::parseGridLineNames):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTemplateAreasRow):
        (WebCore::CSSParser::parseGridTemplateAreas):
        * css/CSSParser.h:
        * css/CSSParserValues.h:
        (WebCore::CSSParserValueList::setCurrentIndex):
        * css/CSSPropertyNames.in:
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitGridTemplateShorthand):
        * css/StylePropertyShorthand.h:

2014-04-25  Andreas Kling  <akling@apple.com>

        Remove two unused SVGDocument functions.
        <https://webkit.org/b/132178>

        Reviewed by Antti Koivisto.

        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::dispatchZoomEvent): Deleted.
        (WebCore::SVGDocument::dispatchScrollEvent): Deleted.
        * svg/SVGDocument.h:

2014-04-25  Ion Rosca  <rosca@adobe.com>

        Incomplete body painting when using blend modes
        https://bugs.webkit.org/show_bug.cgi?id=131889

        The incomplete painting was caused by the transparency layer created for
        the root renderer. We can safely skip creating this transparency layer at
        the root level, as there is nothing else being painted behind this layer that
        could be used erroneously as a backdrop.

        Reviewed by Simon Fraser.

        Test: css3/compositing/blend-mode-with-body.html

        * rendering/RenderLayer.h:
        Changing RenderLayer::paintsWithTransparency so that it will not
        return true when the root renderer needs to isolate blending.

2014-04-25  Darin Adler  <darin@apple.com>

        ASSERTION FAILED: "!m_isolatedWorld->isNormal() || m_wrapper || !m_jsFunction" in svg/custom/use-instanceRoot-event-listeners.xhtml
        https://bugs.webkit.org/show_bug.cgi?id=132148

        Reviewed by Andreas Kling.

        Changed how JSCustomMarkFunction generation works. Instead of leaving out
        the generated visitChildren function, just generate a call to visitAdditionalChildren.
        This eliminates the need to repeat boilerplate.

        The fix for the above bug was to correct mistaken logic where JSSVGElementInstance
        had a visitChildren that did not properly mark event listeners because it explicitly
        did not call through to the base class visitChildren. The new arrangement makes that
        mistake impossible.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitAdditionalChildren): Use this instead of visitChildren.
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::visitAdditionalChildren): Ditto.
        * bindings/js/JSAudioTrackListCustom.cpp:
        (WebCore::JSAudioTrackList::visitAdditionalChildren): Ditto.
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitAdditionalChildren): Ditto.
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitAdditionalChildren): Ditto.
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContext::visitAdditionalChildren): Ditto.
        * bindings/js/JSCryptoKeyPairCustom.cpp:
        (WebCore::JSCryptoKeyPair::visitAdditionalChildren): Ditto.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitAdditionalChildren): Ditto.
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitAdditionalChildren): Ditto.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitAdditionalChildren): Ditto.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::visitAdditionalChildren): Ditto.
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::visitAdditionalChildren): Ditto.
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitAdditionalChildren): Ditto.
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::visitAdditionalChildren): Ditto.
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitAdditionalChildren): Ditto.
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitAdditionalChildren): Ditto.
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::JSTextTrackCue::visitAdditionalChildren): Ditto.
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::visitAdditionalChildren): Ditto.
        * bindings/js/JSTextTrackListCustom.cpp:
        (WebCore::JSTextTrackList::visitAdditionalChildren): Ditto.
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitAdditionalChildren): Ditto.
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::visitAdditionalChildren): Ditto.
        * bindings/js/JSVideoTrackListCustom.cpp:
        (WebCore::JSVideoTrackList::visitAdditionalChildren): Ditto.
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitAdditionalChildren): Ditto.
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::visitAdditionalChildren): Ditto.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitAdditionalChildren): Ditto.
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitAdditionalChildren): Ditto.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren): Rewrote to use modern for loops.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Generate declaration of visitAdditionalChildren.
        (GenerateImplementation): Generate call to visitAdditionalChildren.

2014-04-24  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Enable optimization to mmap downloaded resources once they become file-backed.
        <https://webkit.org/b/132171>
        <rdar://problem/16720733>

        Add a missing export for the USE(CFNETWORK) + WebKit2 combo.

        Reviewed by Antti Koivisto.

        * WebCore.exp.in:

2014-04-24  Darin Adler  <darin@apple.com>

        FrameLoader::checkCompleted can hit the "ref'ing while destroyed" assertion
        https://bugs.webkit.org/show_bug.cgi?id=132163
        rdar://problem/16720640

        Reviewed by Brady Eidson.

        Couldn't find a way to test this yet. Would be nice to have a test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted): Move protector until after we check
        if the frame is already complete. That can happen in practice when this is
        called from within the frame's destructor. All the code that runs before the
        protector simply checks state and does not require protection.

2014-04-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Mark Supplement instead of RefCountedSupplement in NavigatorContentUtils 
        https://bugs.webkit.org/show_bug.cgi?id=132151

        Reviewed by Darin Adler.

        Though Original goal was to make it sharable across navigator instances, the NavigatorContentUtils
        has used RefCountedSupplement<Page> instead of RefCountedSupplement<Navigator>. This patch makes it
        use Supplement<Page> because there is no scenario which needs to be shared across navigator instances.

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

        No new tests, no behavior changes.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::NavigatorContentUtils::from):
        (WebCore::NavigatorContentUtils::create):
        (WebCore::provideNavigatorContentUtilsTo):
        * Modules/navigatorcontentutils/NavigatorContentUtils.h:

2014-04-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167700.
        https://bugs.webkit.org/show_bug.cgi?id=132142

        Incorrectly reverted the change in r167547 for
        webkit.org/b/131898 (Requested by rniwa on #webkit).

        Reverted changeset:

        "Cursor doesn't change back to pointer when leaving the Safari
        window"
        https://bugs.webkit.org/show_bug.cgi?id=132038
        http://trac.webkit.org/changeset/167700

2014-04-24  Brady Eidson  <beidson@apple.com>

        Rename "IMAGE_CONTROLS" feature to "SERVICE_CONTROLS"
        https://bugs.webkit.org/show_bug.cgi?id=132155

        Reviewed by Tim Horton.

        No new tests (No change in behavior).

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.exp.in:
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * dom/Node.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::didAttachRenderers):
        * html/HTMLImageElement.h:
        * html/shadow/ImageControlsRootElement.cpp:
        * html/shadow/ImageControlsRootElement.h:
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        * html/shadow/mac/ImageControlsButtonElementMac.h:
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        * html/shadow/mac/ImageControlsRootElementMac.h:
        * page/ContextMenuContext.cpp:
        (WebCore::ContextMenuContext::ContextMenuContext):
        * page/ContextMenuContext.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        (WebCore::ContextMenuController::populate):
        * page/ContextMenuController.h:
        * page/Settings.in:
        * platform/ThemeTypes.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::canHaveChildren):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::servicesRolloverButtonCell):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        (WebCore::RenderThemeMac::imageControlsButtonSize):

2014-04-24  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Restore PageDebuggerAgent::enable / disable
        https://bugs.webkit.org/show_bug.cgi?id=132156

        Restore functions that were eroniously removed in r167530.

        Reviewed by Joseph Pecoraro.

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::enable): Added.
        (WebCore::PageDebuggerAgent::disable): Added.
        * inspector/PageDebuggerAgent.h:

2014-04-24  Alexey Proskuryakov  <ap@apple.com>

        Dropzone effects don't work in non-file documents
        https://bugs.webkit.org/show_bug.cgi?id=131770

        Reviewed by Darin Adler.

        File documents have two quirks that were making dropzone work in these before:
        1. An ancient hack for Dashboard allows pasteboard access from JS.
        2. On Mac, sandbox doesn't prevent File object creation, as we already have the access.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::hasFileOfType):
        (WebCore::DataTransfer::hasStringOfType):
        * dom/DataTransfer.h:
        Moved these functions from EventHandler to DataTransfer. We can't create a DataTransfer
        with Files while dragging, security doesn't permit us to. But we can get the file name.

        * fileapi/File.cpp:
        (WebCore::createBlobDataForFile):
        (WebCore::createBlobDataForFileWithName):
        (WebCore::File::contentTypeFromFilePath):
        (WebCore::getContentTypeFromFileName): Deleted.
        * fileapi/File.h:
        Exposed a function to get file type from path without creating a File first.
        This is much cheaper than creating a File, and works even when sandbox disallows
        read access to content, such as when dragging over a target.

        * page/EventHandler.cpp:
        (WebCore::hasDropZoneType):
        (WebCore::hasFileOfType): Deleted.
        (WebCore::hasStringOfType): Deleted.

2014-04-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167441.
        https://bugs.webkit.org/show_bug.cgi?id=132152

        Caused full screen regressions on vimeo, youtube, and others.
        (Requested by jernoble on #webkit).

        Reverted changeset:

        "Fullscreen media controls are unusable in pagination mode"
        https://bugs.webkit.org/show_bug.cgi?id=131705
        http://trac.webkit.org/changeset/167441

2014-04-24  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Unused class forward declarations in Page
        https://bugs.webkit.org/show_bug.cgi?id=132141

        Reviewed by Benjamin Poulain.

        No new tests, no change on behavior.

        * page/Page.h:

2014-04-24  Eric Carlson  <eric.carlson@apple.com>

        [Mac] don't ask for AVAssetTrack properties before they are available
        https://bugs.webkit.org/show_bug.cgi?id=131902
        <rdar://problem/16505076>

        Reviewed by Brent Fulgham.

        No new tests, the behavior this changes can not be tested with a layout test.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_cachedTotalBytes.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): Don't report that
            metadata has been loaded until the track properties we need have been loaded too.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes): Cache totalBytes instead
            of recalculating it every time.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange): Invalidate cached
            total bytes.
        (WebCore::assetTrackMetadataKeyNames): Array of AVAssetTrack properties we use.

2014-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Unify platformWidthForGlyph across OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=132036

        Reviewed by Darin Adler.

        This patch creates on shared SimpleFontData::platformWidthForGlyph() function for both OS X and iOS.

        No new tests are necessary because there should be no behavior changes.

        * platform/graphics/SimpleFontData.h: Signatures for two helper functions
        * platform/graphics/ios/SimpleFontDataIOS.mm: Replace iOS implementation of platformWidthForGlyph() with
        implementations of only the two helper functions
        (WebCore::SimpleFontData::getRenderingStyle): Compute style argument to CGFontGetGlyphAdvancesForStyle()
        (WebCore::SimpleFontData::advanceForColorBitmapFont): iOS doesn't have color bitmap fonts
        (WebCore::SimpleFontData::platformWidthForGlyph): Deleted.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getRenderingStyle): Compute style argument to CGFontGetGlyphAdvancesForStyle()
        (WebCore::SimpleFontData::advanceForColorBitmapFont): Use [NSFont advancementForGlyph] to compute the advance
        (WebCore::hasCustomTracking): Removed #if
        (WebCore::isEmoji): Only relevant on iOS
        (WebCore::SimpleFontData::platformWidthForGlyph): Shared implementation. Calls helper functions.

2014-04-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Clipping on text areas when shifted by one device pixel.
        https://bugs.webkit.org/show_bug.cgi?id=132008

        Reviewed by Darin Adler.

        Make RenderTheme paint* functions LayoutRect aware. Textarea is device pixel snapped, while
        other theme controls are still on integral size/positions.

        Test: fast/forms/hidpi-textarea-on-subpixel-position.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintTextField):
        (WebCore::RenderTheme::paintTextFieldDecorations):
        (WebCore::RenderTheme::paintTextArea):
        (WebCore::RenderTheme::paintTextAreaDecorations):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintTextFieldDecorations):
        (WebCore::RenderThemeIOS::paintTextAreaDecorations):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintTextArea):

2014-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        FontCache::fontCache() never returns nullptr so it can be made to return a reference instead
        https://bugs.webkit.org/show_bug.cgi?id=132110

        Reviewed by Tim Horton.

        Updates callers to use '.' instead of '->'.

        No new tests are necessary because there should be no behavior change.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::fontDataForGenericFamily):
        (WebCore::CSSFontSelector::getFallbackFontData):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/graphics/FontCache.cpp:
        (WebCore::fontCache): Return a reference
        * platform/graphics/FontCache.h:
        (WebCore::FontCachePurgePreventer::FontCachePurgePreventer):
        (WebCore::FontCachePurgePreventer::~FontCachePurgePreventer):
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::FontGlyphs):
        (WebCore::FontGlyphs::releaseFontData):
        (WebCore::FontGlyphs::realizeFontDataAt):
        (WebCore::FontGlyphs::glyphDataAndPageForCharacter):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::verticalData):
        * platform/graphics/ios/SimpleFontDataIOS.mm:
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::invalidateFontCache):
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::getCJKCodePageMasks):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/wince/FontCacheWinCE.cpp:
        (WebCore::getCJKCodePageMasks):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FontFamilyCodePageInfo::codePages):
        (WebCore::FixedSizeFontData::create):
        * platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        (WebCore::SimpleFontData::containsCharacters):

2014-04-24  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Manage AudioSession category according to media type
        https://bugs.webkit.org/show_bug.cgi?id=132096

        Reviewed by Jer Noble.

        * WebCore.exp.in: Export setting.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::HTMLMediaSession):
        (WebCore::initializeAudioSession): Deleted.

        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::setShouldManageAudioSession): New.
        (WebCore::Settings::shouldManageAudioSession): Ditto.

        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestinationIOS::AudioDestinationIOS): Use a MediaSession instead of inheriting
            from AudioListener and calling the AudioSession directly.
        (WebCore::AudioDestinationIOS::~AudioDestinationIOS): Ditto.
        (WebCore::AudioDestinationIOS::start): Notify session.
        (WebCore::AudioDestinationIOS::stop): Ditto.
        (WebCore::AudioDestinationIOS::beganAudioInterruption): Deleted.
        (WebCore::AudioDestinationIOS::endedAudioInterruption): Deleted.
        * platform/audio/ios/AudioDestinationIOS.h:
        (WebCore::AudioDestinationIOS::mediaType):
        (WebCore::AudioDestinationIOS::canReceiveRemoteControlCommands):
        (WebCore::AudioDestinationIOS::didReceiveRemoteControlCommand):
        (WebCore::AudioDestinationIOS::isPlaying): Deleted.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::categoryName): Debug-only logging function.
        (WebCore::AudioSession::setCategory): Don't stick with "media" once it is set.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Set up restrictions for WebAudio.
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Don't set invalid start time.

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): Manage AudioSession.active when WebAudio clients
            come and go. Manage AudioSession.category according to the number of WebAudio and
            HTMLMediaElement clients.

2014-04-24  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Client rects don't work with column spans.
        https://bugs.webkit.org/show_bug.cgi?id=132131

        Reviewed by Dean Jackson.
        
        Don't factor in the offset of the multicolumn set from the top
        of the multicolumn block. This was added already, and it doesn't
        need to be a part of columnTranslationForOffset.

        Added fast/multicol/client-rects-spanners.html

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset):

2014-04-24  Praveen R Jadhav  <praveen.j@samsung.com>

        [EFL] WebKit build fails when MEDIA_SOURCE is enabled
        https://bugs.webkit.org/show_bug.cgi?id=132118

        Reviewed by Brent Fulgham.

        Files MediaSourceGStreamer.cpp, SourceBufferPrivateGStreamer.cpp and
        WebKitMediaSourceGStreamer.cpp are included for EFL port build.

        No new tests. No change in behaviour.

        * PlatformEfl.cmake: MediaSourceGStreamer.cpp, SourceBufferPrivateGStreamer.cpp
        and WebKitMediaSourceGStreamer.cpp are included for compilation.

2014-04-24  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        ASSERTION FAILED: !begin.isIndefinite() in WebCore::SVGSMILElement::resolveFirstInterval.
        https://bugs.webkit.org/show_bug.cgi?id=131097

        Reviewed by Darin Adler.

        According to smil animation reference, max attribute cannot be 0.

        Test: svg/animations/smil-animation-max-attribute-zero-crash.svg

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::maxValue):
          changed (result < 0) to (result <= 0)

2014-04-24  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove screenColorProfile()
        https://bugs.webkit.org/show_bug.cgi?id=132035

        Reviewed by Darin Adler.

        Only chromium used screenColorProfile() since r120789.

        * platform/PlatformScreen.h:
        * platform/efl/PlatformScreenEfl.cpp:
        (WebCore::screenColorProfile): Deleted.
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenColorProfile): Deleted.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::qcmsOutputDeviceProfile):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenColorProfile): Deleted.
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenColorProfile): Deleted.
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenColorProfile): Deleted.

2014-04-24  Zalan Bujtas  <zalan@apple.com>

        One more unreviewed build fix after r167755.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::RenderImageControlsButton::updateLogicalWidth):
        (WebCore::RenderImageControlsButton::computeLogicalHeight):

2014-04-24  Zalan Bujtas  <zalan@apple.com>

        Unreviewed build fix after r167755.

        * rendering/RenderThemeMac.h:

2014-04-24  Zalan Bujtas  <zalan@apple.com>

        Transition RenderTheme API from RenderObject* to const RenderObject&
        https://bugs.webkit.org/show_bug.cgi?id=132037

        Reviewed by Andreas Kling.

        Using const references provides better encapsulation and improve security.

        No change in behavior.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::boundingBoxForQuads):
        * dom/Element.cpp:
        (WebCore::Element::setActive):
        (WebCore::Element::setHovered):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledStateChanged):
        (WebCore::HTMLFormControlElement::readOnlyAttributeChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addVisualOverflowFromTheme):
        (WebCore::RenderBlock::baselinePosition):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/RenderObject.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::computeLogicalHeight):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::baselinePosition):
        (WebCore::RenderTheme::adjustRepaintRect):
        (WebCore::RenderTheme::stateChanged):
        (WebCore::RenderTheme::updateControlStatesForRenderer):
        (WebCore::RenderTheme::extractControlStatesForRenderer):
        (WebCore::RenderTheme::isActive):
        (WebCore::RenderTheme::isChecked):
        (WebCore::RenderTheme::isIndeterminate):
        (WebCore::RenderTheme::isEnabled):
        (WebCore::RenderTheme::isFocused):
        (WebCore::RenderTheme::isPressed):
        (WebCore::RenderTheme::isSpinUpButtonPartPressed):
        (WebCore::RenderTheme::isReadOnlyControl):
        (WebCore::RenderTheme::isHovered):
        (WebCore::RenderTheme::isSpinUpButtonPartHovered):
        (WebCore::RenderTheme::isDefault):
        (WebCore::RenderTheme::paintInputFieldSpeechButton):
        (WebCore::RenderTheme::paintMeter):
        (WebCore::RenderTheme::paintSliderTicks):
        (WebCore::RenderTheme::progressBarRectForBounds):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::controlSupportsTints):
        (WebCore::RenderTheme::paintCapsLockIndicator):
        (WebCore::RenderTheme::paintFileUploadIconDecorations):
        (WebCore::RenderTheme::imageControlsButtonSize):
        (WebCore::RenderTheme::paintCheckbox):
        (WebCore::RenderTheme::paintRadio):
        (WebCore::RenderTheme::paintButton):
        (WebCore::RenderTheme::paintInnerSpinButton):
        (WebCore::RenderTheme::paintCheckboxDecorations):
        (WebCore::RenderTheme::paintRadioDecorations):
        (WebCore::RenderTheme::paintButtonDecorations):
        (WebCore::RenderTheme::paintTextField):
        (WebCore::RenderTheme::paintTextFieldDecorations):
        (WebCore::RenderTheme::paintTextArea):
        (WebCore::RenderTheme::paintTextAreaDecorations):
        (WebCore::RenderTheme::paintMenuList):
        (WebCore::RenderTheme::paintMenuListDecorations):
        (WebCore::RenderTheme::paintMenuListButtonDecorations):
        (WebCore::RenderTheme::paintPushButtonDecorations):
        (WebCore::RenderTheme::paintSquareButtonDecorations):
        (WebCore::RenderTheme::paintProgressBar):
        (WebCore::RenderTheme::paintSliderTrack):
        (WebCore::RenderTheme::paintSliderThumb):
        (WebCore::RenderTheme::paintSliderThumbDecorations):
        (WebCore::RenderTheme::paintSearchField):
        (WebCore::RenderTheme::paintSearchFieldDecorations):
        (WebCore::RenderTheme::paintSearchFieldCancelButton):
        (WebCore::RenderTheme::paintSearchFieldDecorationPart):
        (WebCore::RenderTheme::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderTheme::paintSearchFieldResultsButton):
        (WebCore::RenderTheme::paintMediaFullscreenButton):
        (WebCore::RenderTheme::paintMediaPlayButton):
        (WebCore::RenderTheme::paintMediaOverlayPlayButton):
        (WebCore::RenderTheme::paintMediaMuteButton):
        (WebCore::RenderTheme::paintMediaSeekBackButton):
        (WebCore::RenderTheme::paintMediaSeekForwardButton):
        (WebCore::RenderTheme::paintMediaSliderTrack):
        (WebCore::RenderTheme::paintMediaSliderThumb):
        (WebCore::RenderTheme::paintMediaVolumeSliderContainer):
        (WebCore::RenderTheme::paintMediaVolumeSliderTrack):
        (WebCore::RenderTheme::paintMediaVolumeSliderThumb):
        (WebCore::RenderTheme::paintMediaRewindButton):
        (WebCore::RenderTheme::paintMediaReturnToRealtimeButton):
        (WebCore::RenderTheme::paintMediaToggleClosedCaptionsButton):
        (WebCore::RenderTheme::paintMediaControlsBackground):
        (WebCore::RenderTheme::paintMediaCurrentTime):
        (WebCore::RenderTheme::paintMediaTimeRemaining):
        (WebCore::RenderTheme::paintMediaFullScreenVolumeSliderTrack):
        (WebCore::RenderTheme::paintMediaFullScreenVolumeSliderThumb):
        (WebCore::RenderTheme::paintSnapshottedPluginOverlay):
        (WebCore::RenderTheme::paintImageControlsButton):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::addRoundedBorderClip):
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::baselinePosition):
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        (WebCore::RenderThemeIOS::paintTextFieldDecorations):
        (WebCore::RenderThemeIOS::paintTextAreaDecorations):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        (WebCore::RenderThemeIOS::paintSliderTrack):
        (WebCore::RenderThemeIOS::paintSliderThumbDecorations):
        (WebCore::RenderThemeIOS::paintProgressBar):
        (WebCore::RenderThemeIOS::paintSearchFieldDecorations):
        (WebCore::RenderThemeIOS::paintButtonDecorations):
        (WebCore::RenderThemeIOS::paintPushButtonDecorations):
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):
        * rendering/RenderThemeMac.h:
        (WebCore::RenderThemeMac::updateActiveState):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor):
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::convertToPaintingRect):
        (WebCore::RenderThemeMac::updateCheckedState):
        (WebCore::RenderThemeMac::updateEnabledState):
        (WebCore::RenderThemeMac::updateFocusedState):
        (WebCore::RenderThemeMac::updatePressedState):
        (WebCore::RenderThemeMac::controlSupportsTints):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintCapsLockIndicator):
        (WebCore::RenderThemeMac::paintTextArea):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::progressBarRectForBounds):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldDecorationPart):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        (WebCore::RenderThemeMac::imageControlsButtonSize):

2014-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] HTML Media capture attribute is a boolean since r163958
        https://bugs.webkit.org/show_bug.cgi?id=132061

        Reviewed by Gustavo Noronha Silva.

        Add new methods webkit_dom_html_input_element_get_capture_enabled
        and webkit_dom_html_input_element_set_capture_enabled using a
        boolean and deprecate the old methods.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_html_input_element_get_capture):
        (webkit_dom_html_input_element_set_capture):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetEffectiveFunctionName): Helper function to rename API methods
        for special cases.
        (GenerateFunction): Use GetEffectiveFunctionName().

2014-04-23  Praveen R Jadhav  <praveen.j@samsung.com>

        [MediaStream] Implement MediaStream active attribute
        https://bugs.webkit.org/show_bug.cgi?id=131973

        Reviewed by Eric Carlson.

        MediaStream .active attribute are introduced which will replace
        .ended attribute. This patch implements the newly introduced attributes.

        MediaStream-add-remove-tracks.html is updated to handle this scenario.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::active): Added.
        (WebCore::MediaStream::setActive): Added.
        (WebCore::MediaStream::addTrack): Propagates 'onactive' event when required.
        (WebCore::MediaStream::removeTrack): Propagates 'oninactive' event when required.
        (WebCore::MediaStream::trackDidEnd): Propagates 'oninactive' event when required.
        (WebCore::MediaStream::streamDidEnd):
        (WebCore::MediaStream::setStreamIsActive): Added.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:
        * dom/EventNames.h:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::MediaStreamPrivate): Initialize .active attribute
        (WebCore::MediaStreamPrivate::setEnded):
        (WebCore::MediaStreamPrivate::setActive): Added.
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivate::active): Added.

2014-04-23  Darin Adler  <darin@apple.com>

        [Cocoa] fix CF leaks found by code inspection
        https://bugs.webkit.org/show_bug.cgi?id=132106

        Reviewed by Andreas Kling.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::trackDisplayName): Added a missing adoptCF.

        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): Added a missing adoptCF.

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::openTypeTable): Added a missing adoptCF.

        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::label): Added two missing adoptCF.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createImageForTimeInRect): Added two missing adoptCF.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::createPDFDocument): Added missing adoptCF.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::cascadeToLastResortFontDescriptor): Added two missing adoptCF.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::primaryFontDataIsSystemFont): Added missing adoptCF.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::hasCustomTracking): Added missing adoptCF.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::qcmsOutputDeviceProfile): Added CFRelease.

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::readPListFile): Added two missing adoptCF.

2014-04-23  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r157328): popover to check into flight ba.com dismisses instantly when focusing form
        https://bugs.webkit.org/show_bug.cgi?id=131949

        Address the review comment.

        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::findHostOfTreeScopeInTargetTreeScope):

2014-04-23  Andreas Kling  <akling@apple.com>

        CachedResourceLoader hoards URLs indefinitely for no good reason.
        <https://webkit.org/b/132102>
        <rdar://problem/16708265>

        Since we don't care about CachedResourceLoader::m_validatedURL's after
        the Document has finished dispatching its initial load event, clear the
        set at that point, and don't add any new URLs to it.

        Reviewed by Anders Carlsson.

        * dom/Document.cpp:
        (WebCore::Document::dispatchWindowLoadEvent):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::documentDidFinishLoadEvent):
        * loader/cache/CachedResourceLoader.h:

2014-04-23  Andreas Kling  <akling@apple.com>

        Canvas cache of clean URLs can grow without bounds.
        <https://webkit.org/b/132091>
        <rdar://problem/16695665>

        Remove a silly "optimization" that kept a cache of clean URLs
        that can be drawn into a canvas without tainting it, all to avoid
        the "expensive" checks to determine whether it would taint.

        Reviewed by Benjamin Poulain.

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * html/canvas/CanvasRenderingContext.h:

2014-04-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix a few mistakes affecting the initial layout and the initial unobscured rect
        https://bugs.webkit.org/show_bug.cgi?id=132093

        Reviewed by Tim Horton.

        Change the minimum layout size to float point values to account for size defined on retina displays.
        The minimum layout size supports half-pixels, the value is rounded later when computing the layout size
        in document coordinates.

        * WebCore.exp.in:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        Setting the initial content size is incorrect. The layout size computation already take into account
        empty size for the first layout.

        Setting the content size upfront make the first computation incorrect when the viewport arguments specify
        the initial scale.

        (WebCore::ViewportConfiguration::setMinimumLayoutSize):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::minimumLayoutSize):

2014-04-23  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] Stop buffering media when on an inactive tab. 
        https://bugs.webkit.org/show_bug.cgi?id=132077

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp: Rename 'm_isDisplaySleepDisablingSuspended'
        to 'm_elementIsHidden'.
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::visibilityStatusChanged): Notify the
        media session that the element is (or is not) hidden.
        (WebCore::HTMLMediaElement::setShouldBufferData): Added.
        * html/HTMLMediaElement.h:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::clientWillBeginPlayback): Tell media to
        buffer if not hidden or playing.
        (WebCore::MediaSession::clientWillPausePlayback): Ditto.
        (WebCore::MediaSession::visibilityChanged): Added. Client API, just relays call
        to updateClientDataBuffering.
        (WebCore::MediaSession::updateClientDataBuffering): Tell client it should only
        buffer data if it's currently playing, or not hidden.
        * platform/audio/MediaSession.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setShouldBufferData): Added: Just relays to
        MediaPlayerPrivate object.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setShouldBufferData):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldBufferData): Added.
        Detach the player item from the player if we don't want to continue
        buffering or other background tasks.

2014-04-23  Alexey Proskuryakov  <ap@apple.com>

        Eliminate internals.setMockScrollbarsEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=132085

        Reviewed by Tim Horton.

        This was essentially unused, and also didnt work.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setMockScrollbarsEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2014-04-23  Anders Carlsson  <andersca@apple.com>

        Don't migrate the WKView.h header from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=132086

        Reviewed by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj:
        Add WAKViewInternal.h.

        * platform/WAKViewInternal.h: Added.

        * platform/ios/wak/WAKClipView.m:
        Import WAKViewInternal.h instead of WAKViewPrivate.h.

        * platform/ios/wak/WAKScrollView.mm:
        Import WAKViewInternal.h instead of WAKViewPrivate.h.

        * platform/ios/wak/WAKView.h:
        Move ivars to a class extension in WAKViewInternal.h and remove WKView.h import.

        * platform/ios/wak/WAKView.mm:
        Import WAKViewInternal.h instead of WAKViewPrivate.h.

        * platform/ios/wak/WAKViewPrivate.h:
        Import WKViewPrivate.h.

2014-04-23  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode.html fails
        https://bugs.webkit.org/show_bug.cgi?id=132078

        Reviewed by Anders Carlsson.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::skipContainingBlockForPercentHeightCalculation):
        Add a parameter to test for orthogonal writing modes. If we're perpendicular,
        then we should not skip the flow thread, since we resolve relative to the column width,
        and that is always set.

        (WebCore::RenderBox::computePercentageLogicalHeight):
        Patched to pass in whether or not the box and the ancestor block are perpendicular.

        * rendering/RenderBox.h:
        Patched the signature of skipContainingBlockForPercentHeightCalculation

2014-04-23  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Make checking if a font is the system font more robust
        https://bugs.webkit.org/show_bug.cgi?id=132030

        Reviewed by Dean Jackson.

        Instead of inspecting a font's name to determine if it is a system font,
        on OS X we can ask the system directly.

        This patch also moves a platform-specific check into platform-specific
        code, so that other platforms don't check for OS X-specific behavior.

        Covered by existing tests.

        * platform/graphics/Font.cpp:
        (WebCore::Font::hasValidAverageCharWidth):
        * platform/graphics/Font.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::primaryFontDataIsSystemFont):

2014-04-23  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Assertion failure in huge-column-count.html
        https://bugs.webkit.org/show_bug.cgi?id=132071

        Reviewed by Dean Jackson.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::regionAtBlockOffset):
        Back out this change, since it wasn't general enough.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        The real issue was that this loop needed to consider the actual box
        rather than starting from the parent. This was a non-issue for normal
        regions (which cannot have nested flow threads), but for columns, you 
        have to consider the fact that the box could itself be a flow thread.

2014-04-23  Andreas Kling  <akling@apple.com>

        [iOS] Memory pressure notification should fire on main thread.
        <https://webkit.org/b/132074>

        Rejig the memory pressure notification to fire on the main queue
        directly instead of rerouting it manually.

        Reviewed by Mark Rowe.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

2014-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167720.
        https://bugs.webkit.org/show_bug.cgi?id=132075

        broke eight newmulticol tests (Requested by thorton on
        #webkit).

        Reverted changeset:

        "[New Multicolumn] Assertion failure in huge-column-
        count.html"
        https://bugs.webkit.org/show_bug.cgi?id=132071
        http://trac.webkit.org/changeset/167720

2014-04-23  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Assertion failure in huge-column-count.html
        https://bugs.webkit.org/show_bug.cgi?id=132071

        Reviewed by Dean Jackson.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::regionAtBlockOffset):
        Remove the code that returned 0 here, since we're going to patch a lower-level
        function to catch all cases.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        Don't allow in-flow RenderFlowThreads to ever have a region range. The sets
        are what should have ranges... the flow thread needs to just be ignored.

2014-04-23  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Crasher when clearing out a flow thread in multicolumn layout.
        https://bugs.webkit.org/show_bug.cgi?id=132069

        Reviewed by Dean Jackson.

        This is imported from a patch Morten did for Blink, but I had to change it a fair
        bit. deleteLines() is used to handle simple line box layout instead of just calling
        deleteLineBoxTree.
        
        I also had to disable the layout state to stop asserts on repaint when the children
        get moved. Not sure why Blink didn't hit this, but it's simple enough to add a
        LayoutStateDisabler to stop the assert.

        Added fast/multicol/inline-children-crash.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::evacuateAndDestroy):

2014-04-23  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] IOSurfacePool should force CA to actually garbage collect surfaces.
        <https://webkit.org/b/132065>
        <rdar://problem/16110687>

        Add a platformGarbageCollectNow() helper function to IOSurfacePool that
        triggers a sweep of the IOSurfaces. Call this from collectionTimerFired()
        and discardAllSurfaces().

        This lets us drop all otherwise-unused 420f surfaces on memory pressure.

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::collectionTimerFired):
        (WebCore::IOSurfacePool::discardAllSurfaces):
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cocoa/IOSurfacePoolCocoa.mm: Added.
        (WebCore::IOSurfacePool::platformGarbageCollectNow):

2014-04-23  Morten Stenshorne  <mstensho@opera.com>

        REGRESSION (Safari 6 - ToT): Incorrectly assumes that RenderStyle data can be shared
        https://bugs.webkit.org/show_bug.cgi?id=113058

        Reviewed by David Hyatt.

        Before sharing CSS properties with an element in the cache, we need to
        check that the new element is suitable for this, just like we check
        elements before inserting them into the cache.

        Test: fast/css/identical-logical-height-decl.html

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

2014-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167713.
        https://bugs.webkit.org/show_bug.cgi?id=132070

        broke hundreds of tests (Requested by thorton on #webkit).

        Reverted changeset:

        "[OS X] Make checking if a font is the system font more
        robust"
        https://bugs.webkit.org/show_bug.cgi?id=132030
        http://trac.webkit.org/changeset/167713

2014-04-22  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Nested columns not working at all.
        https://bugs.webkit.org/show_bug.cgi?id=131805

        Reviewed by Dean Jackson.

        Add support for nested pagination contexts, allowing for an arbitrary level
        of nesting of multicolumn layouts. There were a number of things that had to
        be patched in order for this to work.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::regionAtBlockOffset):
        Make sure RenderMultiColumnFlowThreads just return null for regions at any
        block offset. Individual region sets will be created as you cross ancestor
        regions eventually, so this is just getting in the way.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::enclosingPaginationLayerInSubtree):
        Add a new helper method for obtaining an enclosingPaginationLayer when
        constrained by some root. This function ensures you don't accidentally
        cross your subtree root when looking for enclosing pagination layers.

        (WebCore::RenderLayer::collectFragments):
        Patch collectFragments to know how to recur to collect ancestor fragments
        in order to apply nested splitting as you cross pagination boundaries.

        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::LayerFragment::LayerFragment):
        (WebCore::LayerFragment::setRects):
        (WebCore::LayerFragment::moveBy):
        (WebCore::LayerFragment::intersect):
        Improve the LayerFragment so that it caches transformed bounding boxes as
        well. This is needed to fix intersectsDamageRect so that it doesn't grab
        the wrong bounding box when checking inline layers that are paginated.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        Ignore inserted flow threads inside an ancestor flow thread, since we only
        care about what the sets do.
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree):
        Make sure that nested flow thread layers return themselves when a child
        is inserted directly under them.

2014-04-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Make checking if a font is the system font more robust
        https://bugs.webkit.org/show_bug.cgi?id=132030

        Reviewed by Dean Jackson.

        Instead of inspecting a font's name to determine if it is a system font,
        on OS X we can ask the system directly.

        This patch also moves a platform-specific check into platform-specific
        code, so that other platforms don't check for OS X-specific behavior.

        Covered by existing tests.

        * platform/graphics/Font.cpp:
        (WebCore::Font::hasValidAverageCharWidth):
        * platform/graphics/Font.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::primaryFontDataIsSystemFont):

2014-04-23  Philippe Normand  <pnormand@igalia.com>

        [GTK] Focus management API was moved from HTMLDocument to Document in r166668
        https://bugs.webkit.org/show_bug.cgi?id=132060

        Reviewed by Carlos Garcia Campos.

        Deprecate the removed methods in WebKitDOMHTMLDocument to keep API compatibility.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_html_document_get_active_element):
        (webkit_dom_html_document_has_focus):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:

2014-04-22  Andreas Kling  <akling@apple.com>

        [iOS WebKit1] MemoryPressureHandler::respondToMemoryPressure called on wrong thread.
        <https://webkit.org/b/132041>
        <rdar://problem/16687238>

        Always dispatch the memory pressure relief code on the main queue.
        This is really only needed for iOS/WK1, but we might as well share the code.

        Reviewed by Michael Saboff.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

2014-04-23  Philippe Normand  <pnormand@igalia.com>

        [GTK] ShadowRoot API was removed in r164131
        https://bugs.webkit.org/show_bug.cgi?id=132059

        Reviewed by Gustavo Noronha Silva.

        Add ShadowRoot removed API to WebKitDOMDeprecated to keep API/ABI compatibility.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_shadow_root_class_init):
        (webkit_dom_shadow_root_init):
        (webkit_dom_shadow_root_element_from_point):
        (webkit_dom_shadow_root_get_active_element):
        (webkit_dom_shadow_root_get_apply_author_styles):
        (webkit_dom_shadow_root_get_element_by_id):
        (webkit_dom_shadow_root_get_elements_by_class_name):
        (webkit_dom_shadow_root_get_elements_by_tag_name):
        (webkit_dom_shadow_root_get_elements_by_tag_name_ns):
        (webkit_dom_shadow_root_get_inner_html):
        (webkit_dom_shadow_root_get_reset_style_inheritance):
        (webkit_dom_shadow_root_get_selection):
        (webkit_dom_shadow_root_set_apply_author_styles):
        (webkit_dom_shadow_root_set_inner_html):
        (webkit_dom_shadow_root_set_reset_style_inheritance):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:

2014-04-23  Morten Stenshorne  <mstensho@opera.com>

        [New Multicolumn] fast/multicol/overflow-content.html displays red
        https://bugs.webkit.org/show_bug.cgi?id=131809

        Reviewed by David Hyatt.

        Insert a break at end of content on our own in the multicol code, to make sure
        that overflow is accounted for, and also to make sure that we account for all
        content in non-final sets (i.e. those preceding spanners).

        In other words, this will additionally fix balancing issues in sets preceding
        a spanner. Added a test for that.

        Tests: fast/multicol/break-in-columns-before-spanner.html
               fast/multicol/newmulticol/compare-with-old-impl/overflow-content.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionInRange): Deleted.
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::distributeImplicitBreaks):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::applyBreakAfterContent):
        * rendering/RenderNamedFlowThread.h:

2014-04-23  Morten Stenshorne  <mstensho@opera.com>

        Overflow propagation broken in BTT and RTL writing-modes
        https://bugs.webkit.org/show_bug.cgi?id=113781

        Reviewed by David Hyatt.

        Overflow rectangles are not quite physical, not quite logical. This
        means that we cannot use clientBoxRect() directly to represent a
        rectangle that expresses exactly no overflow. This rectangle is the
        padding box (relative to the border box) in vertical-lr and
        horizontal-tb, but the block-direction borders need to be flipped in
        vertical-rl and horizontal-bt.

        Tests: fast/css/overflow-btt-border-after.html
               fast/css/overflow-rtl-border-after.html

        * WebCore.exp.in:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::layoutOverflowRect):

2014-04-23  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Improve the debugging infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=132042

        Reviewed by Mihnea Ovidenie.

        This patch improves the debugging code for CSS Regions.

        Tests: No function change. No new tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRegionsInformation): Print brackets around the region range when dumping
        the render tree to the console.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::containingRegion): Convert the ASSERT to an ASSERT_WITH_SECURITY_IMPLICATION.

2014-04-22  Ryosuke Niwa  <rniwa@webkit.org>

        Cursor doesn't change back to pointer when leaving the Safari window
        https://bugs.webkit.org/show_bug.cgi?id=132038

        Reviewed by Alexey Proskuryakov.

        r147739 incorrectly added an early exit in EventHandler::selectCursor when hit test result didn't have
        any node associated with it. Since we will hit this code when the cursor is outside of the WebView,
        we still need to take the CURSOR_AUTO path as did the code before r147739.

        No new test is added since this behavior can't be tested in DRT or WTR.

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

2014-04-22  Zalan Bujtas  <zalan@apple.com>

        Do not paint border image when the border rect is empty.
        https://bugs.webkit.org/show_bug.cgi?id=131988

        Reviewed by Darin Adler.

        http://trac.webkit.org/changeset/167351 introduced an early return when border
        rect is empty. This patch ensures that border image is not painted either in that case.

        Modified padding-margin-negative-border.html to cover border-image case.

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

2014-04-22  Tim Horton  <timothy_horton@apple.com>

        ASSERTION FAILED: scrollerImp == scrollbarPainterForScrollbar(_scrollbar) on two API tests
        https://bugs.webkit.org/show_bug.cgi?id=132034
        <rdar://problem/16624332>

        Reviewed by Simon Fraser.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate shouldUseLayerPerPartForScrollerImp:]):
        scrollerImpWithStyle:controlSize:horizontal:replacingScrollerImp: moves the delegate
        from the old scrollerImp to the new one, and also happens to call shouldUseLayerPerPartForScrollerImp.
        Since scrollerImpWithStyle: has not returned yet, the scrollbarPainterForScrollbar still returns the old scrollerImp,
        so this assertion fires. It's safe to remove this because supportsUpdateOnSecondaryThread doesn't make use of the imp.

2014-04-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r157328): popover to check into flight ba.com dismisses instantly when focusing form
        https://bugs.webkit.org/show_bug.cgi?id=131949

        Reviewed by Darin Adler.

        The regression was caused by two bugs:
        1. The event didn't stop propagating itself even when it should.
           If the related target is same as the event origin, the event propagation should stop when the event reaches
           the root of the related target's tree scope. Otherwise, it should stop when it reaches the related target.

        2. Mouse event's related target exposed nodes inside a user-agent shadow DOM when the related target appeared
           inside the origin.

        Fixed the bugs by re-introducing path shrinkage algorithm removed in r157328 into EventPath::setRelatedTarget
        and adding an algorithm to determine the least common ancestor of the related target and the current target
        in moveToParentOrShadowHost. The latter algorithm doesn't match the shadow DOM specification:
        http://www.w3.org/TR/2013/WD-shadow-dom-20130514/
        but it's good enough in terms of the Web exposed behavior as we don't support author defined insertion points.

        Test: fast/events/shadow-event-path.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::moveToParentOrShadowHost):
        (WebCore::EventRelatedNodeResolver::findHostOfTreeScopeInTargetTreeScope): Added.
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventPath::setRelatedTarget):

2014-04-22  Ryosuke Niwa  <rniwa@webkit.org>

        Rollout r156635 since the old behavior was intentional.

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

2014-04-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167674.
        https://bugs.webkit.org/show_bug.cgi?id=132025

        Going a different way with this (Requested by bradee-oh on
        #webkit).

        Reverted changeset:

        "Change Image Controls replacement to use selection and paste"
        https://bugs.webkit.org/show_bug.cgi?id=131992
        http://trac.webkit.org/changeset/167674

2014-04-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support Python 2.7 in Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=132023

        Reviewed by Michael Saboff.

        * DerivedSources.make: Use proper path to Cygwin on
        all platforms.

2014-04-22  Andreas Kling  <akling@apple.com>

        REGRESSION (r151839): Subframe keeps getting mousemove events with the same coordinates after hiding a hovered element.
        <https://webkit.org/b/131974>
        <rdar://problem/15907469>

        When the currently hovered element disappears as a result of style recalc,
        we send a fake mousemove event to the page, to see if anything newly added
        should become hovered.

        The faking mechanism lives in EventHandler and simply synthesizes a new
        mousemove event using the last seen mouse location.

        The problem here is that we were sending this fake mousemove event to the
        subframe where the hovered element lived. Since subframes aren't kept up
        to date on recent mouse locations, this could cause some strange behavior
        where a subframe would dispatch mousemove events with stale coordinates.

        The solution is to always dispatch fake mousemove events from the main
        frame's event handler. This is how real event delivery happens, and hit
        testing will then find the appropriate subframe, if any.

        Reviewed by Benjamin Poulain.

        Test: fast/events/ghostly-mousemoves-in-subframe.html

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

2014-04-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Glyph spacing for system fonts may be incorrect
        https://bugs.webkit.org/show_bug.cgi?id=131967

        Unreviewed iOS build fix after r167679.

        * platform/graphics/mac/SimpleFontDataMac.mm:

2014-04-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Glyph spacing for system fonts may be incorrect
        https://bugs.webkit.org/show_bug.cgi?id=131967

        Unreviewed build fix after r167679.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::hasCustomTracking):

2014-04-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Glyph spacing for system fonts may be incorrect
        https://bugs.webkit.org/show_bug.cgi?id=131967

        Reviewed by Simon Fraser.

        Covered by existing tests.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformWidthForGlyph): Update to use CTFontGetAdvancesForGlyphs() for system fonts
        (WebCore::hasCustomTracking):

2014-04-22  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] widows/orphans cause assertion failures.
        https://bugs.webkit.org/show_bug.cgi?id=131233

        Reviewed by Dean Jackson.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::recordSpaceShortage):
        Fix an obvious bug where the space shortage is recorded twice (and the
        if statement that kept it from being negative is accidentally ignored).

2014-04-22  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Make sure columnTranslationForOffset has the same column-span-aware
        translation that fragment collection does.
        https://bugs.webkit.org/show_bug.cgi?id=131738

        Reviewed by Anders Carlsson.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        Remove a FIXME that is no longer needed, since the translation offset of the 
        column set did get patched.

        (WebCore::RenderMultiColumnSet::columnTranslationForOffset):
        Add the exact same fix to columnTranslationForOffset that was applied to collectLayerFragments.

2014-04-22  Mark Lam  <mark.lam@apple.com>

        WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript() needs to acquire the JSLock before calling into JS.
        <https://webkit.org/b/132021>

        Reviewed by Mark Hahnenberg.

        Covered by existing layout test.

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

2014-04-22  Manuel Rego Casasnovas  <rego@igalia.com>

        REGRESSION (r167652): Broke fast/regions/cssom/region-range-for-box-crash.html in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=131982

        Reviewed by David Hyatt.

        The problem was creating the Range from the arguments received at RenderView::setSelection(). Specifically
        in this test endPos is 1 when the element has not children which creates an invalid Range.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::splitSelectionBetweenSubtrees): Pass 0 as startPos and endPos to Range::create() as we are
        not interested in the positions at this point.

2014-04-22  Brady Eidson  <beidson@apple.com>

        Change Image Controls replacement to use selection and paste
        <rdar://problem/16302722> and https://bugs.webkit.org/show_bug.cgi?id=131992

        Reviewed by Tim Horton.

        * WebCore.exp.in: Remove deleted symbol.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::defaultEventHandler):

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showImageControlsMenu): Select the image element
          before showing the menu.
        (WebCore::ContextMenuController::replaceControlledImage): Deleted.
        * page/ContextMenuController.h:

2014-04-22  David Hyatt  <hyatt@apple.com>

        REGRESSION: Hitting asserts in new flow thread selection code.
        https://bugs.webkit.org/show_bug.cgi?id=132019

        Reviewed by Anders Carlsson.

        Null checking flowThreadController is not enough. The list of threads
        can be null even when the flowThreadController is not. That's why you
        use hasRenderNamedFlowThreads. I patched the two bad places in the code
        to use hasRenderNamedFlowThreads to stop the crashes.
        
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::repaintSelection):

2014-04-22  Brent Fulgham  <bfulgham@apple.com>

        Check (rather than assume) element is a RenderTableSection before using it
        https://bugs.webkit.org/show_bug.cgi?id=121858

        Reviewed by David Kilzer.

        Test: fast/table/table-insert-object-before-td-crash.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Check that lastBox is a table section before
        using the node as if it was one.

2014-04-22  Alex Christensen  <achristensen@webkit.org>

        Begin implementation of video using Media Foundation.
        https://bugs.webkit.org/show_bug.cgi?id=131830

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Added MediaPlayerPrivateMediaFoundation files.
        * platform/graphics/MediaPlayer.cpp:
        Include MediaPlayerPrivateMediaFoundation inside new USE(MEDIA_FOUNDATION) flag.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp: Added.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h: Added.

2014-04-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167658.
        https://bugs.webkit.org/show_bug.cgi?id=131993

        Caused many crashes on media tests (Requested by ap on
        #webkit).

        Reverted changeset:

        "[Mac] don't ask for AVAssetTrack properties before they are
        available"
        https://bugs.webkit.org/show_bug.cgi?id=131902
        http://trac.webkit.org/changeset/167658

2014-04-22  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] fast/multicol/multicol-with-child-renderLayer-for-input.html puts the textfield in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=131808

        Reviewed by Brady Eidson.
    
        Make sure FrameView is patched to pass in the update pagination flag when subtree layout
        is done on textfields. It had code for the old multicolumn system but did not have a check
        for the new multicolumn system.

        Added fast/multicol/newmulticol/compare-with-old-impl/multicol-with-child-renderLayer-for-input.html

        * page/FrameView.cpp:
        (WebCore::updateLayerPositionFlags):

2014-04-22  Zalan Bujtas  <zalan@apple.com>

        border-style: double rendered as solid when combined with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=131927

        Reviewed by Simon Fraser.

        BorderEdge::getDoubleBorderStripeWidths() should return the calculated inner, outer border widths. 

        Test: fast/borders/hidpi-double-border-with-border-radius-always-produce-solid-line.html

        * rendering/BorderEdge.cpp:
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        * rendering/BorderEdge.h:

2014-04-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] don't ask for AVAssetTrack properties before they are available
        https://bugs.webkit.org/show_bug.cgi?id=131902
        <rdar://problem/16505076>

        Reviewed by Jer Noble.

        No new tests, the behavior this changes can not be tested with a layout test.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_cachedTotalBytes.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): Don't report that
            metadata has been loaded until the track properties we need have been loaded too.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes): Cache totalBytes instead
            of recalculating it every time.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange): Invalidate cached
            total bytes.
        (WebCore::assetTrackMetadataKeyNames): Array of AVAssetTrack properties we use.

2014-04-22  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Buildfix after r167650 broke non-Cocoa builds
        https://bugs.webkit.org/show_bug.cgi?id=131980

        Reviewed by Mario Sanchez Prada.

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

2014-04-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Selection highlight doesn't match DOM selection
        https://bugs.webkit.org/show_bug.cgi?id=131511

        Reviewed by David Hyatt.

        This patch implements a subtrees approach to fix selection interaction in CSS Regions.

        The idea is to divide the Render tree in subtrees. One subtree will be the RenderView (which is always present),
        then for each RenderNamedFlowThread (which are children of RenderView) we will have an extra subtree.

        For each subtree it determines the start and end positions according to the DOM tree. So, every subtree will
        always have a start and end position, and the selection algorithm will be able to reach the end from the start
        without problems (this allows us to remove the changes introduced in r155058).

        Then selection related methods in RenderView are adapted to ensure that they are called for each subtree. Making
        the selection highlight to match DOM selection as expected.

        Test: fast/regions/selection/selecting-text-including-region.html

        * CMakeLists.txt: Add new class SelectionSubtreeRoot to build file.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderNamedFlowThread.h: Inherit from SelectionSubtreeRoot.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionRoot): New method to return the RenderNamedFlowThread if any or the RenderView
        otherwise.
        (WebCore::RenderObject::selectionStartEnd): If it's inside a RenderNamedFlowThread use specific method instead
        of the RenderView's one.
        * rendering/RenderObject.h: Add new method signature.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds): Adapt method to subtrees approach.
        (WebCore::RenderView::subtreeSelectionBounds): Modify previous method in order to use SelectionSubtreeRoot
        objects.
        (WebCore::RenderView::repaintSelection): Adapt method to subtrees approach.
        (WebCore::RenderView::repaintSubtreeSelection): Modify previous method in order to use SelectionSubtreeRoot
        objects.
        (getNextOrPrevRenderObjectBasedOnDirection): Deleted method from r155058 as it is not needed anymore. Each
        subtree will have start and end positions, so the selection algorithm will always find the end.
        (WebCore::RenderView::setSelection): Adapt method to subtrees approach.
        (WebCore::RenderView::splitSelectionBetweenSubtrees): Determine start and end positions for each subtree and
        call setSubtreeSelection().
        (WebCore::RenderView::setSubtreeSelection): Modify previous method in order to use SelectionSubtreeRoot objects.
        * rendering/RenderView.h: Inherit from SelectionSubtreeRoot. Add signature for new helper methods receiving
        SelectionSubtreeRoot objects.
        * rendering/SelectionSubtreeRoot.cpp: Added.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeRoot):
        (WebCore::SelectionSubtreeRoot::selectionStartEndPositions):
        * rendering/SelectionSubtreeRoot.h: Added. New class to identify root elements for the subtrees. With some basic
        attributes and methods to store the start and end positions and offsets.
        (WebCore::SelectionSubtreeRoot::selectionStart):
        (WebCore::SelectionSubtreeRoot::selectionStartPos):
        (WebCore::SelectionSubtreeRoot::selectionEnd):
        (WebCore::SelectionSubtreeRoot::selectionEndPos):
        (WebCore::SelectionSubtreeRoot::setSelectionStart):
        (WebCore::SelectionSubtreeRoot::setSelectionStartPos):
        (WebCore::SelectionSubtreeRoot::setSelectionEnd):
        (WebCore::SelectionSubtreeRoot::setSelectionEndPos):

2014-04-21  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Follow-up: After a horizontal overflow scroll with a mechanical wheel mouse, vertical scrolling no longer works
        https://bugs.webkit.org/show_bug.cgi?id=131960
        <rdar://problem/16142100>

        Unreviewed build fix.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): The test to clear the
        last scrolled node was too broad. It should only follow this path
        if both the phase and momentum phase are 'None'.

2014-04-21  Brent Fulgham  <bfulgham@apple.com>

        [Mac] After a horizontal overflow scroll with a mechanical wheel mouse, vertical scrolling no longer works
        https://bugs.webkit.org/show_bug.cgi?id=131960
        <rdar://problem/16142100>

        Reviewed by Darin Adler.

        Test: platform/mac/fast/scrolling/scroll-div-no-latching.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): When not latching, always clear m_latchedWheelEventElement and m_previousWheelScrolledElement.

2014-04-21  Joseph Pecoraro  <pecoraro@apple.com>

        WebProfilerAgent::disable is calling the wrong superclass method
        https://bugs.webkit.org/show_bug.cgi?id=131968

        Reviewed by Simon Fraser.

        * inspector/WebProfilerAgent.cpp:
        (WebCore::WebProfilerAgent::disable):

2014-04-21  Enrica Casucci  <enrica@apple.com>

        Followup from http://trac.webkit.org/changeset/167624

        Reviewed by Darin Adler.

        Fixing incorrect use of ? : syntax.

        * editing/VisibleUnits.cpp:
        (WebCore::characterBeforePosition):

2014-04-21  Ryuan Choi  <ryuan.choi@samsung.com>

        Move CoordinatedGraphics related codes out of CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=131931

        Reviewed by Gyuyoung Kim.

        Move CoordinatedGraphics related files to PlatformEfl.cmake because they are not common files.

        * CMakeLists.txt: 
        * PlatformEfl.cmake:

2014-04-21  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] AVSampleBufferDisplayLayer and AudioRenderer is overretained.
        https://bugs.webkit.org/show_bug.cgi?id=131963

        Reviewed by Jon Honeycutt.

        Adopt the results of -[[class alloc] init] rather than retaining them.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::hasVideo):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):

2014-04-21  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r166784): Gradient at background of iCloud login page doesn’t go all the way to the bottom
        https://bugs.webkit.org/show_bug.cgi?id=131924

        Computing tile dimension for contain/cover requires higher precision than what LayoutUnit has. Switching to floats.

        Reviewed by Simon Fraser.

        Test: fast/backgrounds/hidpi-background-image-contain-cover-scale-needs-more-precision.html

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

2014-04-21  Dean Jackson  <dino@apple.com>

        Build fix for Mountain Lion.

        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::SerializedPlatformRepresentationMac::deserialize):

2014-04-21  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
        https://bugs.webkit.org/show_bug.cgi?id=131939

        Reviewed by David Kilzer.

        * WebCore.exp.in: Exported WebCore::ResourceHandle::setDefersLoading.

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::setDefersLoading): Added a no-op implementation.
        * loader/ResourceLoadScheduler.h: Declared new virtual member function setDefersLoading.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::setDefersLoading): Added a call to the above function.

2014-04-21  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Difficulty gesture scrolling vertically with trackpad after scrolling horizontally 
        https://bugs.webkit.org/show_bug.cgi?id=131959
        <rdar://problem/16654523>

        Reviewed by Simon Fraser.

        * page/mac/EventHandlerMac.mm:
        (WebCore::deltaIsPredominantlyVertical): Added.
        (WebCore::scrolledToEdgeInDominantDirection): Only consider current mouse wheel event. We don't care about
        overall history when deciding if we are bumping against the edge of a scrollable region. Short-circuit if
        the element style indicates that overflow is hidden, since this means there is no scroll possible in that
        direction.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Update for new signature.

2014-04-21  Eric Carlson  <eric.carlson@apple.com>

        [Mac] implement WebKitDataCue
        https://bugs.webkit.org/show_bug.cgi?id=131799

        Reviewed by Dean Jackson.

        Tests: http/tests/media/track-in-band-hls-metadata.html
               media/track/track-datacue-value.html

        * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
        * DerivedSources.make: Add ENABLE_DATACUE_VALUE to HTML_FLAGS when appropriate.

        * CMakeLists.txt: Add JSDataCueCustom.cpp.
        * bindings/js/JSBindingsAllInOne.cpp:
        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * bindings/js/JSDataCueCustom.cpp: Added.
        (WebCore::JSDataCue::value): 
        (WebCore::JSDataCue::setValue):
        (WebCore::JSDataCueConstructor::constructJSDataCue): Custom constructor.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Drive-by fixes: don't schedule timeupdate
            events when paused, don't call sort on an Vector that can't be sorted.

        * html/track/DataCue.cpp:
        (WebCore::DataCue::DataCue): Initialize m_type.
        (WebCore::DataCue::~DataCue): Unprotect the JSValue if necessary.
        (WebCore::DataCue::data): Ask the platform value for data if non-null.
        (WebCore::DataCue::setData): Clear m_platformValue and m_value.
        (WebCore::DataCue::isEqual): New.
        (WebCore::DataCue::value): Return a JSValue from the platform value, or the value passed
            to the constructor/set by script.
        (WebCore::DataCue::setValue): Set m_value.
        * html/track/DataCue.h:
        * html/track/DataCue.idl:

        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::addDataCue): Don't add the same cue more than once.
        (WebCore::InbandDataTextTrack::updateDataCue): Update a cue's duration.
        (WebCore::InbandDataTextTrack::removeDataCue): Remove an incomplete cue.
        (WebCore::InbandDataTextTrack::removeCue): Remove a cue from the incomplete cue map if necessary.
        * html/track/InbandDataTextTrack.h:

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue): CueMatchRules is now in TextTrackCue instead
            of VTTCue.
        * html/track/InbandTextTrack.h:

        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Ditto.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue): Ditto.
        * html/track/TextTrack.h:

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::isEqual): New, test base class equality.
        * html/track/TextTrackCue.h:

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::isEqual): Call TextTrackCue::isEqual first.
        * html/track/TextTrackCueGeneric.h:

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::isEqual): Call TextTrackCue::isEqual first.
        * html/track/VTTCue.h:

        * platform/SerializedPlatformRepresentation.h: Added.
        (WebCore::SerializedPlatformRepresentation::~SerializedPlatformRepresentation):
        (WebCore::SerializedPlatformRepresentation::SerializedPlatformRepresentation):

        * platform/graphics/InbandTextTrackPrivateClient.h: Add methods for DataCue with SerializedPlatformRepresentation.

        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp: Added.
        (WebCore::InbandMetadataTextTrackPrivateAVF::create):
        (WebCore::InbandMetadataTextTrackPrivateAVF::InbandMetadataTextTrackPrivateAVF):
        (WebCore::InbandMetadataTextTrackPrivateAVF::~InbandMetadataTextTrackPrivateAVF):
        (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
        (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h: Added.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): currentTrack -> currentTextTrack.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::configureInbandTracks): Ditto.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundation::setCurrentTrack): Deleted.

        Renamed currentTrack and setCurrentTrack to currentTextTrack and setCurrentTextTrack.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::currentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTextTrack):
        (WebCore::AVFWrapper::setCurrentTextTrack):
        (WebCore::AVFWrapper::AVFWrapper):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::currentTrack): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTrack): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTrack): Deleted.
        (WebCore::AVFWrapper::setCurrentTrack): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): currentTrack -> currentTextTrack
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): currentTrack -> currentTextTrack.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMetadataTrack): New.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): m_currentTrack -> m_currentTextTrack.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::flushCues): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack): Renamed from setCurrentTextTrack.
        (WebCore::metadataType): Map an AVFoundation metadata key space to a metadata cue type.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive): Process new metadata.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Deleted.

        Create a JSValue representation from an AVMetadataItem.
        * platform/mac/SerializedPlatformRepresentationMac.h: Added.
        (WebCore::SerializedPlatformRepresentationMac::platformType):
        (WebCore::SerializedPlatformRepresentationMac::nativeValue):
        * platform/mac/SerializedPlatformRepresentationMac.mm: Added.
        (WebCore::SerializedPlatformRepresentationMac::SerializedPlatformRepresentationMac):
        (WebCore::SerializedPlatformRepresentationMac::~SerializedPlatformRepresentationMac):
        (WebCore::SerializedPlatformRepresentationMac::create):
        (WebCore::SerializedPlatformRepresentationMac::data):
        (WebCore::SerializedPlatformRepresentationMac::deserialize):
        (WebCore::SerializedPlatformRepresentationMac::isEqual):
        (WebCore::toSerializedPlatformRepresentationMac):
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithDataInContext):
        (WebCore::jsValueWithArrayInContext):
        (WebCore::jsValueWithDictionaryInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):

2014-04-21  Benjamin Poulain  <benjamin@webkit.org>

        Add Element.matches, the standard name for webkitMatchesSelector
        https://bugs.webkit.org/show_bug.cgi?id=131922

        Reviewed by Andreas Kling.

        This patch just renames webkitMatchesSelector() to matches().

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        The Objective-C binding generator only supported ImplementedAs for getters and setters.
        This adds support for the option so that Element.matches can be generated for Obj-C.

        * dom/Element.cpp:
        (WebCore::Element::matches):
        (WebCore::Element::webkitMatchesSelector): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):

2014-04-21  Beth Dakin  <bdakin@apple.com>

        topContentInset does not play well with fullscreen elements
        https://bugs.webkit.org/show_bug.cgi?id=131955
        -and corresponding-
        <rdar://problem/16651925>

        Reviewed by Sam Weinig.

        Calling setNeedsLayout() is not sufficient when the topContentInset has changed 
        dynamically. We need to perform the layout right away and update the scrollbars. 
        This works completely when the inset changes due to entering/exiting fullscreen, 
        but I left a FIXME behind because it is possible to change the inset dynamically 
        just through the WK2 API and end up in a situation where everything looks right 
        except for the scrollbars. 
        * page/FrameView.cpp:
        (WebCore::FrameView::topContentInsetDidChange):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setTopContentInset):

2014-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Empty RenderInline objects should not be line break objects.

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

        Reviewed by David Hyatt.

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::canBreakAtThisPosition):
        Don't break at this position if this is an empty RenderInline.

2014-04-21  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] support replacements for misspelled words.
        https://bugs.webkit.org/show_bug.cgi?id=131827
        <rdar://problem/16319657>

        Reviewed by Darin Adler.

        Adds utility function to return the character before the current selection
        and converts the nbsp to the space character.

        * WebCore.exp.in:
        * editing/VisibleUnits.cpp:
        (WebCore::characterBeforePosition):
        * editing/VisibleUnits.h:

2014-04-21  Eric Carlson  <eric.carlson@apple.com>

        [iOS] enable plug-in replacement
        https://bugs.webkit.org/show_bug.cgi?id=131947

        Reviewed by Jer Noble.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures): initialize m_isPluginReplacementEnabled
            to true on iOS.

2014-04-21  Rik Cabanier  <cabanier@adobe.com>

        [CSS Blending] Remove support for non-separable blend modes from mix-blend-mode
        https://bugs.webkit.org/show_bug.cgi?id=131824

        Reviewed by Dean Jackson.

        Removed support for non-separable blend modes from the CSS parser.

        Covered by existing tests

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::setBlendingFiltersOnLayer):

2014-04-21  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Column set drawing under horizontal scrollbar.
        https://bugs.webkit.org/show_bug.cgi?id=131812.

        Reviewed by Sam Weinig.

        Added fast/multicol/newmulticol/compare-with-old-impl/LeftToRight-tb.html.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        * rendering/RenderBlockFlow.h:
        Pass in relayoutChildren as a reference boolean to checkForPaginationLogicalHeightChange.
        The new columns need to be able to set it to true if the amount of available column
        height ever changes, so that the RenderFlowThread and the sets get a layout call.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setColumnStylesFromPaginationMode):
        Make sure that the pagination mode is set up with an auto column-fill specified. You
        don't ever want to balance when you set a pagination mode on the RenderView.

2014-04-21  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Implement CSS viewport units
        https://bugs.webkit.org/show_bug.cgi?id=131863
        <rdar://problem/16279088>

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::setViewportSize):
        * page/FrameView.h:
        (WebCore::FrameView::viewportSize):
        Add setViewportSize() and viewportSize().
        If the viewport size changes, we have to do style recalc.
        If we have an overridden viewport size, use it.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewportSize):
        * rendering/RenderView.h:
        Get the size from FrameView.

2014-04-21  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=131938

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2014-04-21  Andreas Kling  <akling@apple.com>

        Move the JSString cache from DOMWrapperWorld to VM.
        <https://webkit.org/b/131940>

        Since there's no need for JSStrings to be world-specific, this patch
        moves the string cache to JSC::VM. This makes jsStringWithCache()
        a lot faster since it no longer has to jump through twenty-eleven
        hoops to find the DOMWrapperWorld.

        Reviewed by Geoff Garen.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::clearWrappers):
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringWithCache):

2014-04-21  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Column balancing is slow on float-multicol.html
        https://bugs.webkit.org/show_bug.cgi?id=131801

        Reviewed by Enrica Casucci.

        Added fast/multicol/tall-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats):
        Make RenderFlowThreads expand to encompass floats. Also from Morten's patch for
        Blink (#361551).

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeOverflow):
        Fix a bug where the new multi-column code was adding in overflow for floats
        when it should not. This was resulting in the creation of scrollbars when none
        should exist. This is my own addition.

        (WebCore::RenderBlockFlow::addOverhangingFloats):
        Make RenderFlowThreads and RenderRegions ignore overhanging float additions. This
        comes from Morten's patch for Blink (#361551).

2014-04-21  Darin Adler  <darin@apple.com>

        REGRESSION (r160908): Safari doesn't draw rotated images properly first time
        https://bugs.webkit.org/show_bug.cgi?id=131930

        Reviewed by Anders Carlsson.

        With render tree creation sufficiently lazy, we had to put some explicit
        calls to updateStyleIfNeeded into the ImageDocument class.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Pass a Frame&.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageSize): Added this helper function. This updates
        style so we can use the renderer to compute an image size taking things like
        orientation into account, and also passes in the zoom factor.
        (WebCore::ImageDocument::updateDuringParsing): Moved the body of the
        ImageDocumentParser::appendBytes function into this function. Since it's a
        member of ImageDocument, it has better access to appropriate private members,
        and we don't have to expose as many functions to the public. Also changed to
        not use the frame so much. Also merged in the code that creates the document
        instead of having it be a side effect in the cachedImage helper function; all
        the other call sites were checking for null before calling cachedImage.
        (WebCore::ImageDocument::finishedParsing): Moved the body of the
        ImageDocumentParser::finish function here. Added a call to updateStyleIfNeeded
        before using the renderer to get the image size.
        (WebCore::ImageDocumentParser::document): Made this return a reference. It's
        just a convenience function used in the two functions below.
        (WebCore::ImageDocumentParser::appendBytes): Just call updateDuringParsing.
        (WebCore::ImageDocumentParser::finish): Just call finishedParsing.
        (WebCore::ImageDocument::ImageDocument): Take a reference for the argument,
        use nullptr, and also initialize m_shouldShrinkImage directly instead of using
        a shouldShrinkToFit() helper function to do it.
        (WebCore::ImageDocument::createDocumentStructure): Removed unneeded check of
        null for the frame, since the caller does it. Removed some unneeded
        IGNORE_EXCEPTON and a stray semicolon. Use m_shouldShrinkImage instead of
        calling shouldShrinkToFit since at this early point they will be identical.
        (WebCore::ImageDocument::scale): Make non-const so we can call the new
        imageSize helper. Use Document::view instead of Frame::view. Improved the
        conversion to floating point so it doesn't involve a static_cast and an extra
        conversion from int to LayoutUnit.
        (WebCore::ImageDocument::resizeImageToFit): Ditto.
        (WebCore::ImageDocument::imageClicked): Ditto.
        (WebCore::ImageDocument::imageUpdated): Ditto. Also use m_shouldShrinkImage
        ibnstead of shouldShrinkToFit.
        (WebCore::ImageDocument::restoreImageSize): Ditto.
        (WebCore::ImageDocument::imageFitsInWindow): Ditto.
        (WebCore::ImageDocument::windowSizeChanged): Ditto.
        (WebCore::ImageDocument::cachedImage): Deleted. Moved logic into updateDuringParsing.
        (WebCore::ImageDocument::shouldShrinkToFit): Deleted. Moved logic into constructor.
        (WebCore::ImageEventListener::handleEvent): Updated for changes above.
        (WebCore::ImageEventListener::operator==): Simplified. No reason this has to check
        whether both listeners are in the same document.
        (WebCore::ImageDocumentElement::didMoveToNewDocument): Use nullptr.

        * html/ImageDocument.h: Deleted some unused things, updated for changes above,
        and made some memer functions private.

        * loader/FrameLoaderClient.h: Deleted the allowScriptFromSource, allowPlugins,
        allowImage, and allowDisplayingInsecureContent functions. These were only used in
        Chromium and are now unneeded complexity. We could bring them back if anyone wants them.

        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::canDisplayInsecureContent): Removed call to
        allowDisplayingInsecureContent, just use the setting directly.
        (WebCore::MixedContentChecker::canRunInsecureContent): Removed call to
        allowRunningInsecureContent, just use the setting directly.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::allowPlugins): Removed call to allowPlugins, just
        use the arePluginsEnabled setting directly.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Removed call to allowScriptFromSource, just
        use the isScriptEnabled setting directly.
        (WebCore::CachedResourceLoader::clientDefersImage): Removed call to allowImage.

2014-04-21  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Pagination mode messed up with non-inline axis and reversed direction.
        https://bugs.webkit.org/show_bug.cgi?id=131811

        Reviewed by Dean Jackson.

        Added fast/multicol/newmulticol/compare-with-old-impl/BottomToTop-tb.html
        
        With block axis pagination mode, it is possible to set a column height that is not the same
        as the available fill height for a block. The new multi-column code had the assumption that
        the column height was the same as the amount of fill room you had available. This is not
        the case.
        
        To correct the issue, I added a member variable to RenderMultiColumnSet that stores the
        available column height as a separate variable from the computed column height. This allows
        the pagination API to specify a different column height that is not the same as the view's
        content height.

        Even though it isn't involved in the solution, I also patched pageOrViewLogicalHeight on
        RenderView to work with the new column code as well.

        To address the layout test failures (that caused the previous rollout), I made sure to
        initialize m_availableHeight to 0 when m_computedColumnHeight also gets reset to 0.
        
        The assertion is not something I could reproduce on any machine, but I can see the problem.
        I patched Page's pageCount method to not have column code directly in Page.cpp, 
        and to make a new pageCount() method on RenderView that Page calls
        into. This method is now patched to handle the new column code as well as the old. I have
        no real way of testing this method though, since I can't reproduce the assertion that the
        bots were experiencing.

        * page/Page.cpp:
        (WebCore::Page::pageCount):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::setAndConstrainColumnHeight):
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        (WebCore::RenderMultiColumnSet::computeLogicalHeight):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pageOrViewLogicalHeight):
        (WebCore::RenderView::pageCount):
        * rendering/RenderView.h:

2014-04-18  Dean Jackson  <dino@apple.com>

        [Media] Clean up localized strings in controls
        https://bugs.webkit.org/show_bug.cgi?id=131857
        <rdar://problem/16663005>

        Reviewed by Eric Carlson.

        There is no need for separate localization files
        on OS X and iOS. Move the small number of iOS-specific
        localizations into a shared file.

        We also don't need a function to return a static table.
        Ultimately I think we want a top-level WebKit object that
        hold the table, but for now use a global variable
        called UIStringTable. Since we're in an isolated world, we
        won't clash with anything.

        I noticed a few cases were we grab a localized string and
        then instantly run a replacement on it. This should be
        supported directly in the UIString() accessor.

        * English.lproj/mediaControlsLocalizedStrings.js: Add iOS strings. Just
        use a static table.
        (mediaControlsLocalizedStrings): Deleted.
        * English.lproj/mediaControlsLocalizedStringsiOS.js: Removed.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.extend): Fix braces.
        (Controller.prototype.UIString): Use the string table, and allow replacement.
        (Controller.prototype.createControls): Use new UIString replacement.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): Use new UIString.
        (ControllerIOS.prototype.UIString): Deleted. Use the parent class version.
        * WebCore.xcodeproj/project.pbxproj: Remove file from Resources.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript): No need to include the iOS
        specific localization file.

2014-04-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * inspector/TimelineRecordFactory.cpp: Add missing include.

2014-04-21  Zan Dobersek  <zdobersek@igalia.com>

        Move cross-port Source/WebCore/page/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=130534

        Reviewed by Darin Adler.

        Replace uses of OwnPtr and PassOwnPtr in cross-port code under Source/WebCore/page/ with
        std::unique_ptr. Unnecessary OwnPtr.h and PassOwnPtr.h header inclusions are removed as well.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::setContentSecurityPolicy):
        * dom/SecurityContext.h:
        * page/CaptionUserPreferences.h:
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::create):
        (WebCore::CSPDirectiveList::checkEvalAndReportViolation):
        (WebCore::CSPDirectiveList::checkInlineAndReportViolation):
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):
        (WebCore::CSPDirectiveList::setCSPDirective):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/ContentSecurityPolicy.h:
        * page/DOMSecurityPolicy.h:
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::fired):
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/DOMWindow.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::createRegExpForLabels):
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::matchLabelsAgainstString):
        (WebCore::Frame::setTiledBackingStoreEnabled):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::addEmbeddedObjectToUpdate):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::addViewportConstrainedObject):
        (WebCore::FrameView::addScrollableArea):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/PageConsole.h:
        * page/PageThrottler.h:
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        * page/animation/AnimationController.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor):
        (WebCore::CSSPropertyAnimationWrapperMap::instance):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::applyContentSecurityPolicyFromString):

2014-04-21  Darin Adler  <darin@apple.com>

        Add HashSet::takeAny
        https://bugs.webkit.org/show_bug.cgi?id=131928

        Reviewed by Benjamin Poulain.

        * dom/Document.cpp:
        (WebCore::Document::takeAnyMediaCanStartListener): Use HashSet::takeAny.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::takeAny): Deleted.
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext): Use HashSet::takeAny.

2014-04-21  Zan Dobersek  <zdobersek@igalia.com>

        iOS and non-iOS RemoteCommandListener::create() functions should use std::make_unique<>()
        https://bugs.webkit.org/show_bug.cgi?id=131916

        Reviewed by Darin Adler.

        A follow-up to r167197. Make RemoteCommandListener ctor public and use std::make_unique<>()
        in both versions of RemoteCommandListener::create() functions (iOS and non-iOS).

        * platform/RemoteCommandListener.cpp:
        (WebCore::RemoteCommandListener::create):
        * platform/RemoteCommandListener.h:
        (WebCore::RemoteCommandListener::RemoteCommandListener):
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListener::create):

2014-04-21  Andreas Kling  <akling@apple.com>

        Micro-optimize the way we hand NodeLists to JSC.
        <https://webkit.org/b/131932>

        Use HashMap::fastAdd() when returning cached node lists and collections.
        10.9% progression on Bindings/get-elements-by-tag-name.html

        Reviewed by Antti Koivisto.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::addCachedCollection):

2014-04-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167584.
        https://bugs.webkit.org/show_bug.cgi?id=131929

        Broke Objective-C bindings test (Requested by ap on #webkit).

        Reverted changeset:

        "Add Element.matches, the standard name for
        webkitMatchesSelector"
        https://bugs.webkit.org/show_bug.cgi?id=131922
        http://trac.webkit.org/changeset/167584

2014-04-20  Benjamin Poulain  <benjamin@webkit.org>

        Compile the :root pseudo class and fix a related issue with :nth-child()
        https://bugs.webkit.org/show_bug.cgi?id=131926

        Reviewed by Andreas Kling.

        Add the :root pseudo class. This is another trivial selector, we just need to compare
        the element pointer with the documentElement.

        I discovered some issues with :nth-child(n) through the layout tests for ":root".
        When the pseudo class nth-child could match anything, no code was generated. That decision
        was taken when generating the fragments.

        The specification of :nth-child() has two tests: the parent test and the counter test.
        Since some fragments would not generate any code for :nth-child(n), they would succeed on the root,
        which is incorrect since the root should fail the parent test.

        This was fixed by moving the filtering of non-counting :nth-child() after we generate the parent
        check.
        We still don't generate any counter test unless required.

        Test: fast/selectors/nth-child-on-root.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsRoot):
        * dom/Document.h:
        (WebCore::Document::documentElementMemoryOffset):

2014-04-20  Benjamin Poulain  <benjamin@webkit.org>

        Add Element.matches, the standard name for webkitMatchesSelector
        https://bugs.webkit.org/show_bug.cgi?id=131922

        Reviewed by Andreas Kling.

        This patch just renames webkitMatchesSelector() to matches().

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        The Objective-C binding generator only supported ImplementedAs for getters and setters.
        This adds support for the option so that Element.matches can be generated for Obj-C.

        * dom/Element.cpp:
        (WebCore::Element::matches):
        (WebCore::Element::webkitMatchesSelector): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):

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

        Subpixel rendering: RenderLayer's size is set using enclosingRect() which can result in cruft.
        https://bugs.webkit.org/show_bug.cgi?id=131468

        Reviewed by Darin Adler.

        Layers marked opaque may not paint edge pixels, when RenderLayer bounds are non-integral and
        get device pixel snapped.
        For details see this: https://trac.webkit.org/r159463

        Test: compositing/hidpi-non-simple-compositing-layer-with-fractional-size-and-background.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2014-04-19  Darin Adler  <darin@apple.com>

        Simple layout can get confused by coordinate overflow
        https://bugs.webkit.org/show_bug.cgi?id=131890
        rdar://problem/15558510

        Reviewed by Andreas Kling.

        Test: fast/css/simple-layout-overflow.html

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::rangeForRect):
        If lastLine is smaller than firstLine, just ignore it.

2014-04-20  Darin Adler  <darin@apple.com>

        ScriptExecutionContext::stopActiveDOMObjects iterates a hash map that can change during iteration (for multiple reasons, including GC)
        https://bugs.webkit.org/show_bug.cgi?id=52719

        Reviewed by Alexey Proskuryakov.

        At least two specific ways this can happen:

        1) XMLHttpRequest::stop can trigger a JavaScript garbage collection.
        2) NotificationCenter::stop can delete the last references to notifications;
           those notifications are also active DOM objects.

        Besides fixing the iteration in that function, did some other fixes for the
        ScriptExecutionContext class, including some coding style changes. Many uses
        of nullptr instead of 0, without listing each function separately below.

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::contextDestroyed): Call through to the base class
        version of contextDestroyed rather than repeating what it does (with a large
        comment that doesn't acknowledge the base class alread does it).
        * Modules/webdatabase/DatabaseContext.h: Removed some unneeded includes.
        Wrote out "private" explicitly for deriving from ActiveDOMObject. Made the
        ActiveDOMObject function overrides private, and marked them override and final.

        * dom/ActiveDOMObject.h: Updated comments. Replaced suspendIfNeededCalled with
        assertSuspendIfNeededWasCalled, which has an empty inline version in the header.
        Renamed m_suspendIfNeededCalled to m_suspendIfNeededWasCalled.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject): Pass a reference instead of a pointer.
        (WebCore::ActiveDOMObject::~ActiveDOMObject): Ditto.
        (WebCore::ActiveDOMObject::suspendIfNeeded): Ditto.

        * dom/ContextDestructionObserver.cpp:
        (WebCore::ContextDestructionObserver::observeContext): Pass a reference instead of a pointer.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort): Pass a reference instead of a pointer.
        (WebCore::MessagePort::~MessagePort): Ditto.
        (WebCore::MessagePort::disentangle): Ditto.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext): Updated flags used
        for assertions so they are conditional and updated their names.
        (WebCore::takeAny): Added. Helper function that we can consider for HashSet in
        the future; makes loop below easier to read.
        (WebCore::checkConsistency): Added. Assertions that were done multiple places below,
        and should not be written over and over again.
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext): Changed to use C++11
        for loops and the takeAny function above.
        (WebCore::ScriptExecutionContext::dispatchMessagePortEvents): Ditto.
        (WebCore::ScriptExecutionContext::createdMessagePort): Changed to take a reference
        for clarity and so it doesn't have to do an assert the pointer is non-null.
        (WebCore::ScriptExecutionContext::destroyedMessagePort): Ditto.
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects): Changed to use
        C++11 for loop and reworded comment and redid assertions.
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects): Ditto.
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects): Ditto.
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects): Changed to support
        removal of an active DOM object during the stop function. Included new comments
        to clarify what the rules are.
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjectIfNeeded): Changed to take
        a reference for clarity and so it doesn't have to assert a pointer is non-null.
        (WebCore::ScriptExecutionContext::didCreateActiveDOMObject): Ditto. Also changed to
        use RELEASE_ASSERT instead of CRASH.
        (WebCore::ScriptExecutionContext::willDestroyActiveDOMObject): Ditto.
        (WebCore::ScriptExecutionContext::didCreateDestructionObserver): Ditto.
        (WebCore::ScriptExecutionContext::willDestroyDestructionObserver): Ditto.
        (WebCore::ScriptExecutionContext::closeMessagePorts): Moved the body of this
        function into its one call site, ScriptExecutionContext::stopActiveDOMObjects,
        since it's simple enough when written as a C++11 for loop.
        (WebCore::ScriptExecutionContext::hasPendingActivity): Added. This function was
        already exported for workers, and implementing it outside this class required
        exposing the private HashSet members; more sensible to implement it here and
        simply make it public in WorkerGlobalScope.

        * dom/ScriptExecutionContext.h: Removed unnecessary includes and forward declarations.
        Removed a long-ago-fixed FIXME. Changed various functions to take references instead of
        pointers. Added a protected hasPendingActivity function, deleted the closeMessagePorts
        function, deleted the ActiveDOMObjectsSet typedef, made the assertion flags be
        !ASSERT_DISABLED only, and deleted the messagePorts and activeDOMObjects functions.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::hasPendingActivity): Deleted. This is now implemented
        in the base class.

        * workers/WorkerGlobalScope.h: Make hasPendingActivity function from the base class
        public instead of declaring it in this class.

2014-04-20  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unable to select 'Off' or 'Auto' from track menu when tracks consist of unsupported track types
        https://bugs.webkit.org/show_bug.cgi?id=131908
        <rdar://problem/15999882>

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSelectedTextTrack): When the user selects 'Off', make sure the currently 'showing'
        track is switched to 'disabled'.

2014-04-20  Andreas Kling  <akling@apple.com>

        Speed up jsStringWithCache() through WeakGCMap inlining.
        <https://webkit.org/b/131923>

        Inline the common path of WeakGCMap::add() in jsStringWithCache().
        26% progression on Bindings/id-getter.html

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringWithCache):

            Move jsStringWithCache() out of line since we're now blowing up
            its size quite a bit.

2014-04-20  Benjamin Poulain  <benjamin@webkit.org>

        Fix the build after r167574

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

2014-04-20  Benjamin Poulain  <benjamin@webkit.org>

        Compile the pseudo class :target
        https://bugs.webkit.org/show_bug.cgi?id=131904

        Reviewed by Andreas Kling.

        The pseudo class :target is trivial, it just compare the current element with
        Document::cssTarget().

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::getDocument):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsTarget):
        * dom/Document.h:
        (WebCore::Document::cssTargetMemoryOffset):

2014-04-20  Benjamin Poulain  <benjamin@webkit.org>

        Rename the CSSSelector PseudoType to PseudoClassType
        https://bugs.webkit.org/show_bug.cgi?id=131907

        Reviewed by Andreas Kling.

        Pseudo Elements and Page Pseudo Classes have been moved out of PseudoType in previous patches.
        The remaining values in the PseudoType enumeration are the pseudo classes.

        This patch is the final clean up, PseudoType is renamed to PseudoClassType.

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector):
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::pseudoClassType):
        (WebCore::CSSParserSelector::pseudoType): Deleted.
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        (WebCore::appendPseudoClassFunctionTail):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::pseudoClassType):
        (WebCore::CSSSelector::pseudoElementType):
        (WebCore::CSSSelector::pagePseudoClassType):
        (WebCore::pseudoClassIsRelativeToSiblings):
        (WebCore::CSSSelector::isSiblingSelector):
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::pseudoType): Deleted.
        * css/RuleSet.cpp:
        (WebCore::RuleSet::findBestRuleSetAndAdd):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::checkScrollbarPseudoClass):
        (WebCore::SelectorChecker::determineLinkMatchType):
        (WebCore::SelectorChecker::matchesFocusPseudoClass):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::isCommonPseudoClassSelector):
        * css/SelectorCheckerFastPath.cpp:
        (WebCore::SelectorCheckerFastPath::commonPseudoClassSelectorMatches):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/SelectorPseudoTypeMap.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        (enumerablePseudoType):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::addPseudoType): Deleted.
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::computePseudoClassMask):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::forcePseudoStateImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::forcePseudoState):

2014-04-19  Alexey Proskuryakov  <ap@apple.com>

        Crashes in HTMLFormElement::submit.
        https://bugs.webkit.org/show_bug.cgi?id=131910
        <rdar://problem/15661790>

        Based on a patch by Kent Tamura.

        Reviewed by Anders Carlsson.

        Tests: fast/forms/form-submission-crash-2.html
               fast/forms/form-submission-crash.html

        Code that executes arbitrary JS needs to protect objects that it uses afterwards.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareForSubmission):
        (WebCore::HTMLFormElement::submit):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):

2014-04-20  Antti Koivisto  <antti@apple.com>

        Text bounding box computation for simple line layout is wrong
        https://bugs.webkit.org/show_bug.cgi?id=131912

        Reviewed by Andreas Kling.

        Top-left is currently the first line top-left which is not always correct.

        * WebCore.exp.in:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::firstRunLocation):
        (WebCore::RenderText::firstRunOrigin): Deleted.
        (WebCore::RenderText::firstRunX): Deleted.
        (WebCore::RenderText::firstRunY): Deleted.
        
            Keep just one accessor and rename it.
            Encapsulate the line box and simple line versions.

        * rendering/RenderText.h:
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::firstRunLocation):

            Line box version.

        * rendering/RenderTextLineBoxes.h:
        * rendering/RenderTreeAsText.cpp:
        
            Simplify RenderText dumping.

        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        
            Return the correct x position.

        (WebCore::SimpleLineLayout::computeTextFirstRunLocation):
        
            Simple line version.

        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineText):

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

        Subpixel rendering: RenderLayer's clipping should snap to device pixel boundaries.
        https://bugs.webkit.org/show_bug.cgi?id=131466

        Reviewed by Simon Fraser.

        Fractional pixel clipping can produce cruft on RenderLayers. Since RenderLayer
        sizing and painting are snapped, painting clip rect needs to be snapped the same way.

        Test: fast/clip/clip-when-rect-has-fractional-pixel-value.html

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

2014-04-19  Brent Fulgham  <bfulgham@apple.com>

        Latched scrolling may interact badly with custom programmatic scrolling
        https://bugs.webkit.org/show_bug.cgi?id=131869
        <rdar://problem/16249557>

        Reviewed by Darin Adler.

        * dom/Element.cpp:
        (WebCore::Element::setScrollLeft): Mark scrollable area as having
        been scrolled programmatically.
        (WebCore::Element::setScrollTop): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Check for programmatic scroll, and
        clear latched state if the handler manually scrolled. Clear programmatic
        scroll state at the end of event handling.
        (WebCore::EventHandler::clearLatchedState): Refactored code.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents): Check
        if scrollable area was scrolled programmatically. If it was, do
        not honor latching behavior.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea): Initialize new member.
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isScrolledProgrammatically): Added.
        (WebCore::ScrollableArea::setScrolledProgrammatically): Added.

2014-04-19  Chris Fleizach  <cfleizach@apple.com>

        AX: grid rows are not recognized do to lack of explicit role="row", role="gridcell"
        https://bugs.webkit.org/show_bug.cgi?id=131819

        Reviewed by Darin Adler.

        Test: accessibility/table-with-missing-aria-role-rows.html

        If a table is using role="grid", and it has <tr> elements that do not have
        role="row", we should still treat them as row elements.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):

2014-04-19  Chris Fleizach  <cfleizach@apple.com>

        AX: Malformed tables exposing incorrect col and colSpans
        https://bugs.webkit.org/show_bug.cgi?id=131796

        Reviewed by Darin Adler.

        Test: accessibility/table-incorrect-colspan-cell.html

        When a developer has specified malformed colspans, accessibility is reporting those values instead of the effective column information.

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::columnIndexRange):

2014-04-19  Benjamin Poulain  <bpoulain@apple.com>

        Make the CSS JIT compile for ARM64
        https://bugs.webkit.org/show_bug.cgi?id=131834

        Reviewed by Gavin Barraclough.

        Add the CPU specific code required to compile SelectorCompiler on ARM64.
        The code is absolutely non-functional, it would crash immediately, but it compiles.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::callAndBranchOnCondition):
        * cssjit/RegisterAllocator.h:
        What am I supposed to do with all those registers? There are so many of them :)
        The array calleeSavedRegisters is defined for compatibility but it cannot be reached at the moment.

        (WebCore::RegisterAllocator::isValidRegister):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        Implement modulo by doing dividend - (divisor * int(dividend/divisor)).

        * cssjit/StackAllocator.h:
        StackAllocator will need a small redesign to handle the 16 bytes alligned stack of
        ARM64.
        The code has been modified to build but it is pretty useless.

        (WebCore::StackAllocator::allocateUninitialized):
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):
        (WebCore::StackAllocator::popAndDiscard):
        (WebCore::StackAllocator::popAndDiscardUpTo):
        (WebCore::StackAllocator::alignStackPreFunctionCall):
        (WebCore::StackAllocator::unalignStackPostFunctionCall):

2014-04-19  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Implement blend modes
        https://bugs.webkit.org/show_bug.cgi?id=131891
        <rdar://problem/16490085>

        Reviewed by Tim Horton.

        Implement blend modes with UI-side compositing.
        
        PlatformCALayer::setBlendMode() becomes pure virtual, and overridden in
        PlatformCALayerMac and PlatformCALayerRemote.
        PlatformCAFilters::setBlendingFiltersOnLayer() now takes a raw platform
        layer, so it can be called from the UI process on a CALayer*.
        
        Fix an issue with GraphicsLayerCA::LayerChange flags. 1 << 31 shifts
        a signed integer, so it ended up setting all the high bits in m_uncommittedChanges,
        causing us to push blend modes to the UI process for every layer. Fix by shifting
        an unsigned long long (1LLU << 31). This should also fix a build warning on Windows.

        * WebCore.exp.in:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::setBlendingFiltersOnLayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setFilters):
        (PlatformCALayerMac::setBlendMode):
        (PlatformCALayer::setBlendMode): Deleted.

2014-04-19  Joseph Pecoraro  <pecoraro@apple.com>

        Fix AVPlayerController leak on pages with video
        https://bugs.webkit.org/show_bug.cgi?id=131878

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController init]):
        Assigning to the retain property will increment the count,
        so balance the alloc with an autorelease.

2014-04-19  Andreas Kling  <akling@apple.com>

        Slap ALWAYS_INLINE on Element attribute lookup things.
        <https://webkit.org/b/131892>

        Most of the "inline" helpers for setting/getting attributes were not
        actually getting inlined by the compiler, so let's make that happen.

        Reviewed by Geoffrey Garen.

        * dom/Element.cpp:
        (WebCore::Element::synchronizeAttribute):
        * dom/ElementData.h:
        (WebCore::ElementData::findAttributeByName):
        (WebCore::ElementData::findAttributeIndexByName):

2014-04-19  Darin Adler  <darin@apple.com>

        Telephone number detection should respect its setting consistently
        https://bugs.webkit.org/show_bug.cgi?id=131893
        rdar://problem/16597639

        Reviewed by Tim Horton.

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection): Only start the timer
        if shouldDetectTelephoneNumbers returns true.
        (WebCore::Editor::shouldDetectTelephoneNumbers): Added. Calls both
        isTelephoneNumberParsingEnabled and TelephoneNumberDetector::isSupported.
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Use
        shouldDetectTelephoneNumbers.
        (WebCore::Editor::clearDataDetectedTelephoneNumbers): Use document()
        instead of m_frame.document().

        * editing/Editor.h: Added declaration of shouldDetectTelephoneNumbers.

2014-04-19  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Harden the layout in case there are no regions
        https://bugs.webkit.org/show_bug.cgi?id=131517

        Reviewed by Mihnea Ovidenie.

        The patch fixes the cases when the content of a flow thread is not
        properly invalidated when all the regions of its chain are removed.

        Test: fast/regions/simplified-layout-no-regions.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::ensureOverflowForBox):

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

        https://bugs.webkit.org/show_bug.cgi?id=131594
        Subpixel rendering: WK1: Wrong repaint rect is calculated when layer has non-compositing transform.

        Reviewed by Simon Fraser.

        We need to snap the repaint rect for transformed object the same way when we paint them.

        Test: fast/repaint/hidpi-wrong-repaint-rect-when-parent-has-noncompositing-transform.html

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

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

        Use 'override' in GraphicsLayerCA
        https://bugs.webkit.org/show_bug.cgi?id=131882

        Reviewed by Tim Horton.

        Add 'override' to all overridden functions. Found a few that need
        not have been virtual. Removed "allowTiledLayer" stuff that was
        never called.

        * WebCore.exp.in:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::requiresTiledLayer):
        (WebCore::GraphicsLayerCA::setAllowTiledLayer): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::platformCALayer):
        (WebCore::GraphicsLayerCA::hasContentsLayer): Deleted.
        (WebCore::GraphicsLayerCA::allowTiledLayer): Deleted.
        (WebCore::GraphicsLayerCA::isGraphicsLayerCA): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerLayoutSublayersOfLayer): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerRespondsToLayoutChanges): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerContentsOrientation): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerShowDebugBorders): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerIncrementRepaintCount): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerContentsOpaque): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerDrawsContent): Deleted.
        (WebCore::GraphicsLayerCA::platformCALayerLayerDidDisplay): Deleted.

2014-04-18  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Move InspectorProfilerAgent to JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=131673

        Passes existing profiler and inspector tests.

        Reviewed by Joseph Pecoraro.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/agents/InspectorProfilerAgent.h: Added.
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfile.cpp: Removed.
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfiler.cpp: Removed.
        * bindings/js/ScriptProfiler.h: Removed.
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::profilerEnabled):
        (WebCore::InspectorInstrumentation::startProfiling):
        (WebCore::InspectorInstrumentation::stopProfiling):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::startProfilingImpl):
        (WebCore::InspectorInstrumentation::stopProfilingImpl):
        (WebCore::InspectorInstrumentation::consoleTimeStampImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorProfilerAgent.cpp: Removed.
        * inspector/InspectorProfilerAgent.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::startProfiling):
        (WebCore::stopProfiling):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::didDispatchXHRLoadEvent): Deleted.
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorProfilerAgent):
        (WebCore::InstrumentingAgents::setInspectorProfilerAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::sourceMapURLForScript): Deleted.
        * inspector/PageDebuggerAgent.h:
        * inspector/PageProfilerAgent.cpp: Added.
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::PageProfilerAgent::profilingGlobalExecState):
        * inspector/PageProfilerAgent.h: Added.
        (WebCore::PageProfilerAgent::~PageProfilerAgent):
        * inspector/ScriptProfile.idl:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/TimelineRecordFactory.h:
        * inspector/WebConsoleAgent.cpp:
        * inspector/WebProfilerAgent.cpp: Added.
        (WebCore::WebProfilerAgent::WebProfilerAgent):
        (WebCore::WebProfilerAgent::enable):
        (WebCore::WebProfilerAgent::disable):
        * inspector/WebProfilerAgent.h: Added.
        (WebCore::WebProfilerAgent::~WebProfilerAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerProfilerAgent.cpp: Added.
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::WorkerProfilerAgent::profilingGlobalExecState):
        * inspector/WorkerProfilerAgent.h: Added.
        (WebCore::WorkerProfilerAgent::~WorkerProfilerAgent):
        * loader/appcache/ApplicationCacheGroup.cpp:
        * page/PageConsole.cpp:
        (WebCore::PageConsole::profile):
        (WebCore::PageConsole::profileEnd):
        (WebCore::PageConsole::time): Deleted.
        (WebCore::PageConsole::timeEnd): Deleted.
        (WebCore::PageConsole::timeStamp): Deleted.
        * page/PageConsole.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * xml/XMLHttpRequest.cpp:

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

        Contents of directly composited image layers are sometimes missing
        https://bugs.webkit.org/show_bug.cgi?id=131880

        Reviewed by Tim Horton.
        
        RenderLayerBacking::updateGraphicsLayerGeometry() tested whether a
        GraphicsLayer had a contents layer to determine whether to call code
        that updates the contents rect. However, on Mac, we don't make a contents
        layer until later at layer flush time. That would result in an empty
        contentsRect being set.
        
        Fix by renaming GraphicsLayer::hasContentsLayer() to usesContentsLayer(),
        and on Mac consulting the m_contentsLayerPurpose flag, which is set
        at the appropriate time.

        Test: compositing/images/update-content-rect.html

        * platform/ScrollView.cpp:
        (WebCore::positionScrollbarLayer):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::usesContentsLayer):
        (WebCore::GraphicsLayer::hasContentsLayer): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::hasContentsLayer): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::usesContentsLayer):
        (WebCore::GraphicsLayerTextureMapper::hasContentsLayer): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        (WebCore::RenderLayerBacking::compositingLayerType):

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

        Unreviewed, rolling out r167527.
        https://bugs.webkit.org/show_bug.cgi?id=131883

        Broke 32-bit build (Requested by ap on #webkit).

        Reverted changeset:

        "[Mac] implement WebKitDataCue"
        https://bugs.webkit.org/show_bug.cgi?id=131799
        http://trac.webkit.org/changeset/167527

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

        [Mac] implement WebKitDataCue
        https://bugs.webkit.org/show_bug.cgi?id=131799

        Reviewed by Dean Jackson.

        Tests: http/tests/media/track-in-band-hls-metadata.html
               media/track/track-datacue-value.html

        * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
        * DerivedSources.make: Add ENABLE_DATACUE_VALUE to HTML_FLAGS when appropriate.

        * CMakeLists.txt: Add JSDataCueCustom.cpp.
        * bindings/js/JSBindingsAllInOne.cpp:
        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * bindings/js/JSDataCueCustom.cpp: Added.
        (WebCore::JSDataCue::value): 
        (WebCore::JSDataCue::setValue):
        (WebCore::JSDataCueConstructor::constructJSDataCue): Custom constructor.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Drive-by fixes: don't schedule timeupdate
            events when paused, don't call sort on an Vector that can't be sorted.

        * html/track/DataCue.cpp:
        (WebCore::DataCue::DataCue): Initialize m_type.
        (WebCore::DataCue::~DataCue): Unprotect the JSValue if necessary.
        (WebCore::DataCue::data): Ask the platform value for data if non-null.
        (WebCore::DataCue::setData): Clear m_platformValue and m_value.
        (WebCore::DataCue::isEqual): New.
        (WebCore::DataCue::value): Return a JSValue from the platform value, or the value passed
            to the constructor/set by script.
        (WebCore::DataCue::setValue): Set m_value.
        * html/track/DataCue.h:
        * html/track/DataCue.idl:

        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::addDataCue): Don't add the same cue more than once.
        (WebCore::InbandDataTextTrack::updateDataCue): Update a cue's duration.
        (WebCore::InbandDataTextTrack::removeDataCue): Remove an incomplete cue.
        (WebCore::InbandDataTextTrack::removeCue): Remove a cue from the incomplete cue map if necessary.
        * html/track/InbandDataTextTrack.h:

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue): CueMatchRules is now in TextTrackCue instead
            of VTTCue.
        * html/track/InbandTextTrack.h:

        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Ditto.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue): Ditto.
        * html/track/TextTrack.h:

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::isEqual): New, test base class equality.
        * html/track/TextTrackCue.h:

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::isEqual): Call TextTrackCue::isEqual first.
        * html/track/TextTrackCueGeneric.h:

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::isEqual): Call TextTrackCue::isEqual first.
        * html/track/VTTCue.h:

        * platform/SerializedPlatformRepresentation.h: Added.
        (WebCore::SerializedPlatformRepresentation::~SerializedPlatformRepresentation):
        (WebCore::SerializedPlatformRepresentation::SerializedPlatformRepresentation):

        * platform/graphics/InbandTextTrackPrivateClient.h: Add methods for DataCue with SerializedPlatformRepresentation.

        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp: Added.
        (WebCore::InbandMetadataTextTrackPrivateAVF::create):
        (WebCore::InbandMetadataTextTrackPrivateAVF::InbandMetadataTextTrackPrivateAVF):
        (WebCore::InbandMetadataTextTrackPrivateAVF::~InbandMetadataTextTrackPrivateAVF):
        (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
        (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h: Added.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): currentTrack -> currentTextTrack.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::configureInbandTracks): Ditto.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundation::setCurrentTrack): Deleted.

        Renamed currentTrack and setCurrentTrack to currentTextTrack and setCurrentTextTrack.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::currentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTextTrack):
        (WebCore::AVFWrapper::setCurrentTextTrack):
        (WebCore::AVFWrapper::AVFWrapper):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::currentTrack): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTrack): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTrack): Deleted.
        (WebCore::AVFWrapper::setCurrentTrack): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): currentTrack -> currentTextTrack
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): currentTrack -> currentTextTrack.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMetadataTrack): New.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): m_currentTrack -> m_currentTextTrack.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::flushCues): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack): Renamed from setCurrentTextTrack.
        (WebCore::metadataType): Map an AVFoundation metadata key space to a metadata cue type.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive): Process new metadata.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Deleted.

        Create a JSValue representation from an AVMetadataItem.
        * platform/mac/SerializedPlatformRepresentationMac.h: Added.
        (WebCore::SerializedPlatformRepresentationMac::platformType):
        (WebCore::SerializedPlatformRepresentationMac::nativeValue):
        * platform/mac/SerializedPlatformRepresentationMac.mm: Added.
        (WebCore::SerializedPlatformRepresentationMac::SerializedPlatformRepresentationMac):
        (WebCore::SerializedPlatformRepresentationMac::~SerializedPlatformRepresentationMac):
        (WebCore::SerializedPlatformRepresentationMac::create):
        (WebCore::SerializedPlatformRepresentationMac::data):
        (WebCore::SerializedPlatformRepresentationMac::deserialize):
        (WebCore::SerializedPlatformRepresentationMac::isEqual):
        (WebCore::toSerializedPlatformRepresentationMac):
        (WebCore::jsValueWithValueInContext):
        (WebCore::jsValueWithDataInContext):
        (WebCore::jsValueWithArrayInContext):
        (WebCore::jsValueWithDictionaryInContext):
        (WebCore::jsValueWithAVMetadataItemInContext):

2014-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Harden RenderInline::inlineElementContinuation()

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

        Reviewed by Sam Weinig.

        No new tests, as there are no known cases of this happening.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::inlineElementContinuation):
        Return nullptr if the continuation is neither a RenderInline nor a
        RenderBlock.

2014-04-18  Stephanie Lewis  <slewis@apple.com>

        We shouldn’t create page throttlers for other pages than WebKit2 pages.
        Part of <rdar://problem/16473045> Visibility state counters are often incorrect
        https://bugs.webkit.org/show_bug.cgi?id=131696

        Reviewed by Gavin Barraclough.

        No new test since not web exposed.

        Page throttlers were being created for SVG images and other page instances that
        were not accurately tracking the states that enable and disable page throttling.
        Make the throttler an unique ptr and only initialize it for WebKit2.

        This also fixes an inefficiency where we would throttle a new page on creation because 
        we assumed it was visible even if that was not the case.

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Check page throttler exists.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::started): ditto
        * page/Page.cpp:
        (WebCore::Page::Page): Don’t automatically create page throttler.
        (WebCore::Page::createPageThrottler): Create page throttler.
        (WebCore::Page::setViewState): Check page throttler exists.
        * page/Page.h:
        (WebCore::Page::pageThrottler): Make the page throttler a unique ptr.
        * page/PageThrottler.h:
        * page/Settings.cpp: 
        (WebCore::Settings::setHiddenPageDOMTimerThrottlingEnabled): Check page throttler exists.

2014-04-18  Stephanie Lewis  <slewis@apple.com>

        Move DOM throttling out of the page throttler
        <rdar://problem/16473004>
        https://bugs.webkit.org/show_bug.cgi?id=131697

        Reviewed by Gavin Barraclough.

        No new tests since it's not web exposed.

        DOM timer throttling is currently part of the page throttler which uses per process 
        state and per page state to determine when to throttle.  This led us to being overly 
        conservative when turning DOM throttling off.  It should only respond to view state changes.

        Additionally since creating extra page throttlers SVG images caused bugs 
        in tracking state we'll reserve the page throttler for WebKit2 views.  To avoid regressing 
        WebKit1 we should move DOM timer throttling back to the page.

        * page/Page.cpp:
        (WebCore::Page::Page): set DOM timer throttling.
        (WebCore::Page::setIsVisuallyIdleInternal): ditto.
        (WebCore::Page::hiddenPageDOMTimerThrottlingStateChanged): ditto.
        (WebCore::Page::setIsVisible): Update view state masks for WebKit1 to include IsVisibleOrOccluded and IsVisuallyIdle
        * page/Page.h:
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler): remove DOM timer throttling.
        (WebCore::PageThrottler::started): ditto.
        (WebCore::PageThrottler::stopped): ditto.
        (WebCore::PageThrottler::hiddenPageDOMTimerThrottlingStateChanged): Deleted.
        * page/PageThrottler.h:
        * page/Settings.cpp:
        (WebCore::Settings::setHiddenPageDOMTimerThrottlingEnabled):

2014-04-18  Dean Jackson  <dino@apple.com>

        [WebGL] Limit maximum texture sizes on older Intel hardware
        https://bugs.webkit.org/show_bug.cgi?id=131867

        Reviewed by Geoffrey Garen.

        Both Chrome and Firefox limit the MAX_TEXTURE_SIZE on
        older Intel hardware to be at most 4096. This does the
        same for WebKit.

        * platform/graphics/Extensions3D.h: Add requiresRestrictedMaximumTextureSize() accessor.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon): Record the value of GL_RENDERER
        and test for "Intel HD Graphics 3000", which is the problematic hardware.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        (WebCore::Extensions3DOpenGLCommon::requiresRestrictedMaximumTextureSize): Getter.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getIntegerv): If you're asking for MAX_TEXTURE_SIZE or
        MAX_CUBE_MAP_TEXTURE_SIZE, and you're on problematic hardware, return a clamped value
        (4096 and 1024 respectively).

2014-04-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Add parsing support for gradients
        https://bugs.webkit.org/show_bug.cgi?id=131444

        Reviewed by Bem Jones-Bey.

        Added support for shape-outside gradient values.

        Test: fast/shapes/shape-outside-floats/shape-outside-linear-gradient.html

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Accept generated images as shape-outside values.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::checkShapeImageOrigin): Generated images get a pass, others do not.
        (WebCore::getShapeImageAndRect): Use StyleImage::image() to get a generated image.
        (WebCore::ShapeOutsideInfo::isEnabledFor):
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::isImageValid): Generated images are always considered valid.

2014-04-18  Brady Eidson  <beidson@apple.com>

        REGRESSION (r155700): Pasting an image into content-editable regions is broken.
        <rdar://problem/16654156> and https://bugs.webkit.org/show_bug.cgi?id=131844

        Reviewed by Enrica Casucci.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::createFragmentForImageResourceAndAddResource): Add the ArchiveResource before
          creating the element that uses it.

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

        [iOS WK2] Make window.scroll() and window.scrollBy() work
        https://bugs.webkit.org/show_bug.cgi?id=131848
        <rdar://problem/16638319>

        Reviewed by Beth Dakin.

        The scrolling-related functions in DOMWindow were #ifdeffed for iOS
        to use the hacky WK1-specific "actual scroll" functions, which do nothing
        in WK2.
        
        Fix by adding a scroll position wrapper (contentsScrollPosition) which does
        the right thing on WK1 and WK2, and change almost all the places that used "actualScrollPosition"
        to us it (with the exception of contentsScrollOffset() in MouseRelatedEvent.cpp, which has
        confusing scaling behavior).

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint): Remove #ifdefs. 
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::scrollBy):
        (WebCore::DOMWindow::scrollTo):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::contentsScrollPosition):
        (WebCore::ScrollView::setContentsScrollPosition):
        * platform/ScrollView.h:

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

        Worse animation performance on pages with 3D transforms
        https://bugs.webkit.org/show_bug.cgi?id=131838
        <rdar://problem/16428630&15705876>

        Reviewed by Dean Jackson.
        
        r155977 added logic to adjust the contentsScale of compositing layers
        based on a root-relative transform. However, this resulted in
        the contentsScale continually changing on layers whose transforms
        are changed dynamically, which caused lots of expensive painting.
        
        Fix by bucketing the part of the scale computed from the root-relative transform
        into buckets of 0.25 via rounding.

        Test: compositing/contents-scale/rounded-contents-scale.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::clampedContentsScaleForScale):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::updateContentsScale):
        (WebCore::GraphicsLayerCA::updateContentsVisibility): Deleted.
        (WebCore::GraphicsLayerCA::animatedLayerClones): Deleted.

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

        Remove some includes from image-related headers, and Document.h
        https://bugs.webkit.org/show_bug.cgi?id=131797

        Reviewed by Martin Robinson.

        Remove some #includes from Document.h, DragImage.h, GradientImage.h,
        Image.h, and ImageBuffer.h and deal with the fallout.

        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::setInputCursor):
        * dom/Document.h:
        (WebCore::Document::inputCursor):
        * dom/MutationObserverRegistration.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * page/FrameSnapshotting.cpp:
        * page/Page.cpp:
        * platform/DragImage.h:
        * platform/graphics/BitmapImage.cpp:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::GradientImage):
        (WebCore::GradientImage::~GradientImage):
        * platform/graphics/GradientImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::internalSize):
        (WebCore::ImageBuffer::logicalSize):
        (WebCore::ImageBuffer::baseTransform):
        (WebCore::ImageBuffer::spaceSize):
        (WebCore::ImageBuffer::setSpaceSize):
        * rendering/RenderThemeMac.mm:
        * rendering/shapes/Shape.cpp:
        * rendering/svg/RenderSVGContainer.cpp:
        * svg/SVGURIReference.h:

2014-04-18  Gabor Rapcsanyi  <rgabor@webkit.org>

        Unreviewed. ARM64 buildfix after r167473.

        * platform/audio/DenormalDisabler.h: Put back the MathExtras.h include.

2014-04-18  Radu Stavila  <stavila@adobe.com>

        [CSSRegions] Incorrect background paint on positioned element hover
        https://bugs.webkit.org/show_bug.cgi?id=131617

        Reviewed by Andrei Bucur.

        When computing the repaint rect for absolute elements flowed into regions, the Y location of the
        region within the flow thread must no longer be added to the repaint rect's location because absolute
        positioned elements get pushed down through the regions by their absolute top. So adding the region's
        position in the flow thread and then adding the element's absolute top would cause us to add
        something twice.

        Tests: fast/regions/repaint/repaint-absolute-pushed-to-next-region.html

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

2014-04-18  Philippe Normand  <pnormand@igalia.com>

        Remove NETWORK_INFO support
        https://bugs.webkit.org/show_bug.cgi?id=131841

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        * Modules/networkinfo/NavigatorNetworkInfoConnection.cpp: Removed.
        * Modules/networkinfo/NavigatorNetworkInfoConnection.h: Removed.
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl: Removed.
        * Modules/networkinfo/NetworkInfo.cpp: Removed.
        * Modules/networkinfo/NetworkInfo.h: Removed.
        * Modules/networkinfo/NetworkInfoClient.h: Removed.
        * Modules/networkinfo/NetworkInfoConnection.cpp: Removed.
        * Modules/networkinfo/NetworkInfoConnection.h: Removed.
        * Modules/networkinfo/NetworkInfoConnection.idl: Removed.
        * Modules/networkinfo/NetworkInfoController.cpp: Removed.
        * Modules/networkinfo/NetworkInfoController.h: Removed.
        * PlatformEfl.cmake:
        * dom/EventTargetFactory.in:
        * platform/efl/NetworkInfoProviderEfl.cpp: Removed.
        * platform/efl/NetworkInfoProviderEfl.h: Removed.
        * testing/Internals.cpp:
        (WebCore::Internals::setNetworkInformation): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-04-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167478.
        https://bugs.webkit.org/show_bug.cgi?id=131840

        Broke multicol tests (Requested by ap on #webkit).

        Reverted changeset:

        "[New Multicolumn] Pagination mode messed up with non-inline
        axis and reversed direction."
        https://bugs.webkit.org/show_bug.cgi?id=131811
        http://trac.webkit.org/changeset/167478

2014-04-17  Daniel Bates  <dabates@apple.com>

        [iOS] Hook up screen.{availHeight, availWidth, height, width}
        https://bugs.webkit.org/show_bug.cgi?id=131821
        <rdar://problem/16413795>

        Reviewed by Benjamin Poulain and Tim Horton.

        Implement support for screen.{availHeight, availWidth, height, width} in WebKit2 for iOS.

        Additionally substitute "screenSize" for "viewporScreenSize" to make the code more understandable.

        * WebCore.exp.in: Export symbol for WebCore System Interface function
        _wkGetAvailableScreenSize.
        * dom/Document.cpp:
        (WebCore::Document::processViewport): Modified to call Chrome::screenSize(); formerly it
        called ChromeClient::viewportScreenSize().
        * page/Chrome.cpp:
        (WebCore::Chrome::screenSize): Added; turns around and calls ChromeClient::screenSize().
        (WebCore::Chrome::availableScreenSize): Added; turns around and calls ChromeClient::availableScreenSize().
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::screenSize): Renamed; formerly named viewportScreenSize.
        (WebCore::ChromeClient::availableScreenSize): Added; default implementation, which
        returns the size of Chrome::windowRect().
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::textDocumentParameters):
        * platform/HostWindow.h: Added declarations for availableScreenSize() and screenSize()
        so that a caller (e.g. WebCore::screenRect()) can query for such screen information using
        only the HostWindow interface. That is, a caller doesn't need to know about ChromeClient.
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenRect): Modified to query HostWindow::screenSize() when computing the
        screen rectangle in WebKit2 for iOS.
        (WebCore::screenAvailableRect): Modified to query HostWindow::availableScreenSize()
        when computing the available screen rectangle in WebKit2 for iOS.
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:

2014-04-17  Darin Adler  <darin@apple.com>

        origin spoofing possible (HTTP Origin, postMessage event.origin) due to inappropriate URL escape sequence decoding
        https://bugs.webkit.org/show_bug.cgi?id=131837
        rdar://problem/15211936

        Reviewed by Anders Carlsson and Dave Hyatt.

        Tests: fast/dom/DOMURL/parsing.html
               fast/dom/HTMLAnchorElement/anchor-element-href-parsing.html

        * platform/URL.cpp:
        (WebCore::URL::host): Removed unnecessary call to decodeURLEscapeSequences, which caused
        problems and was not needed.

2014-04-17  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Pagination mode messed up with non-inline axis and reversed direction.
        https://bugs.webkit.org/show_bug.cgi?id=131811

        Reviewed by Dean Jackson.

        Added fast/multicol/newmulticol/compare-with-old-impl/BottomToTop-tb.html
        
        With block axis pagination mode, it is possible to set a column height that is not the same
        as the available fill height for a block. The new multi-column code had the assumption that
        the column height was the same as the amount of fill room you had available. This is not
        the case.
        
        To correct the issue, I added a member variable to RenderMultiColumnSet that stores the
        available column height as a separate variable from the computed column height. This allows
        the pagination API to specify a different column height that is not the same as the view's
        content height.

        Even though it isn't involved in the solution, I also patched pageOrViewLogicalHeight on
        RenderView to work with the new column code as well.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::setAndConstrainColumnHeight):
        (WebCore::RenderMultiColumnSet::computeLogicalHeight):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pageOrViewLogicalHeight):

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

        Build fix.

        * svg/animation/SMILTime.h:

2014-04-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        Unreviewed, rolling out r167384.

        Sounds like this isn't the right fix, and causes generation to
        run far too often.

        Reverted changeset:

        "Fix CodeGenerator.pm to only write files if the generated
        content has changed"
        https://bugs.webkit.org/show_bug.cgi?id=131756
        http://trac.webkit.org/changeset/167384

2014-04-17  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove unnecessary MathExtras.h includes
        https://bugs.webkit.org/show_bug.cgi?id=131789

        Reviewed by Anders Carlsson.

        * platform/FileSystem.h:
        * platform/Scrollbar.h:
        * platform/animation/AnimationUtilities.h:
        * platform/audio/DenormalDisabler.h:
        * platform/graphics/Font.h:
        * platform/graphics/IntPoint.h: Included cmath instad of MathExtras.h.
        * platform/graphics/LayoutPoint.h:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * rendering/svg/SVGMarkerData.h:
        * svg/animation/SMILTime.h:

2014-04-16  Huang Dongsung  <luxtella@company100.net>

        Make RenderLayerBacking get the timingFunction of the correct animation.
        https://bugs.webkit.org/show_bug.cgi?id=100632

        Reviewed by Simon Fraser.

        When an element has multiple animations that have different timingFunctions,
        the progress of each animation should be calculated using its respective
        timingFunction. But at this point, the timingFunction of the first animation is
        only used in RenderLayerBacking::startAnimation(), regardless of how many
        animations the element has.

        getAnimationFromStyleByName() was introduced in r89462 so that the
        timingFunction of the correct animation searched by its name would be
        used. This patch moves the function to KeyframeValue::timingFunction()
        so that RenderLayerBacking reuses this method.

        Test: animations/keyframe-multiple-timing-functions-transform.html

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeValue::timingFunction):
        (WebCore):
        * rendering/style/KeyframeList.h:
        (WebCore):
        (KeyframeValue):

2014-04-17  Andreas Kling  <akling@apple.com>

        Rollout: Add a way to cache never-changing IDL attributes in the wrapper.
        <https://webkit.org/b/131759>

        This behavior may be observable from the web, so we can't do it this way.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/*:
        * dom/Element.idl:
        * dom/Node.idl:

2014-04-17  Andreas Kling  <akling@apple.com>

        Cheesy Mountain Lion build fix.

        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::ReliefLogger::logString):

2014-04-17  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Column rules don't respect the specified stacking order.
        https://bugs.webkit.org/show_bug.cgi?id=131804

        Reviewed by Beth Dakin.

        Added fast/multicol/newmulticol/compare_with_old_impl/column-rules-stacking.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::paintBoxDecorations):
        * rendering/RenderBlockFlow.h:
        Override paintBoxDecorations for block flows so that we can iterate over our column sets
        and paint their rules just after painting our background and border. We can't wait until
        the child column sets paint their backgrounds, since that is specified as being above negative
        z-index children. We have to pretend that the column sets don't exist as
        far as column rule painting is concerned.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintObject): Deleted.
        * rendering/RenderMultiColumnSet.h:
        Turn paintObject in RenderMultiColumnSet into an override that doesn't paint anything.

2014-04-17  Beth Dakin  <bdakin@apple.com>

        Hit-testing is incorrect for plugins inside iframes when there is a 
        topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=131826
        -and corresponding-
        <rdar://problem/16649996>

        Reviewed by Tim Horton.

        I missed one coordinate-conversion spot when getting hit-testing to work. Like 
        headerHeight() which also manipulates the location of the root layer, 
        topContentInset() has to be factored into all of these conversions.
        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromRenderer):

2014-04-17  Andreas Kling  <akling@apple.com>

        Stub out MemoryPressureHandler::ReliefLogger on older OS X'es.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::ReliefLogger::platformLog):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):

2014-04-17  Dirk Schulze  <krit@webkit.org>

        Remove CANVAS_PATH where possible
        https://bugs.webkit.org/show_bug.cgi?id=131788

        Reviewed by Dean Jackson.

        Since Firefox and Chrome ship the same interoperable subset of Path2D soon, 
        it is time to remove CANVAS_PATH where possible.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::clip):
        (WebCore::CanvasRenderingContext2D::isPointInStroke):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.h:
        * html/canvas/DOMPath.idl:

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

        [GStreamer] Store TrackPrivateBaseGStreamer's label and language as AtomicStrings
        https://bugs.webkit.org/show_bug.cgi?id=130404

        Reviewed by Philippe Normand.

        No new tests, this just makes things more efficient.

        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::getLanguageCode):
        (WebCore::TrackPrivateBaseGStreamer::getTag):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:

2014-04-17  Andreas Kling  <akling@apple.com>

        Fix Cocoa build.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):

2014-04-17  Rik Cabanier  <cabanier@adobe.com>

        [CSS Blending] Remove the -webkit- prefix for mix-blend-mode and isolation CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=131355

        Reviewed by Dean Jackson.

        Removed webkit prefix from mix-blend-mode and isolation. These properties
        never shipped and their spec is now in CR.

        Covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):

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

        Tidy up isIsolatedInline() and highestContainingIsolateWithinRoot()
        <http://webkit.org/b/131117>

        Reviewed by Daniel Bates.

        Based on review feedback for r166650.

        * rendering/InlineIterator.h:
        (WebCore::isIsolatedInline):
        - Switch argument to a reference since it is never called with a
          nullptr.
        (WebCore::highestContainingIsolateWithinRoot):
        - Switch first argument to a reference since it's never a
          nullptr.
        - Use nullptr for pointer initialization.
        - Switch while() loop to for() loop. Pass reference to
          isIsolatedInline().
        (WebCore::numberOfIsolateAncestors):
        - Switch while() loop to for() loop. Pass reference to
          isIsolatedInline().
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment):
        - Rename startObj to startObject.
        - No longer need to pass the address of startObject here.

2014-04-17  Andreas Kling  <akling@apple.com>

        Log number of bytes reclaimed at each step of memory pressure relief.
        <https://webkit.org/b/131751>

        Reviewed by Antti Koivisto.

        * platform/MemoryPressureHandler.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::ReliefLogger::platformLog):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):
        (WebCore::MemoryPressureHandler::ReliefLogger::ReliefLogger):
        (WebCore::MemoryPressureHandler::ReliefLogger::~ReliefLogger):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandlerCocoa::ReliefLogger::platformMemoryUsage):
        (WebCore::MemoryPressureHandlerCocoa::ReliefLogger::platformLog):

            Add a simple RAII helper to check memory usage before and after
            a block of code, and then dump the delta to system log.

        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):

            Use ReliefLogger to annotate the various attempts to reduce
            our memory footprint. This will help us understand the efficiency
            of our current strategy.

2014-04-17  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] columnNumberForOffset is not patched for new multicolumn code yet.
        https://bugs.webkit.org/show_bug.cgi?id=131740

        Reviewed by Enrica Casucci.
        
        I took the opportunity to clean this code up while adding support for the new columns.
        columnNumberForOffset only applied for paginated RenderViews and was really about
        pages and not columns. It also only returns an actual page number if the columns are
        block progressed (e.g., right-to-left vertical Japanese books).
        
        Therefore I renamed columnNumberForOffset to pageNumberForBlockProgressionOffset and
        moved it to RenderView.
        
        I also renamed the member variable of SelectionRect to be pageNumber instead of
        columnNumber in order to make it more obvious that this isn't about columns per se
        (since the fact that we implemented RenderView's pagination mode using columns is an
        implementation detail).

        * dom/Range.cpp:
        (WebCore::coalesceSelectionRects):
        (WebCore::Range::collectSelectionRects):
        * platform/ios/SelectionRect.h:
        (WebCore::SelectionRect::pageNumber):
        (WebCore::SelectionRect::columnNumber): Deleted.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionRects):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::collectSelectionRects):
        (WebCore::RenderObject::columnNumberForOffset): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRects):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pageNumberForBlockProgressionOffset):
        * rendering/RenderView.h:

2014-04-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] A few final cleanups to the DataObject classes.
        https://bugs.webkit.org/show_bug.cgi?id=131784

        Reviewed by Anders Carlsson.

        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::clearData): Use 'last()' method.

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

        Fullscreen media controls are unusable in pagination mode
        https://bugs.webkit.org/show_bug.cgi?id=131705

        Reviewed by Darin Adler.

        When pagination mode is enabled, the full screen media will (depending on the width of the
        pagination columns) overflow its column, and hit testing will be clipped to the column. In extreme
        cases, where the column width < 0.5 * media element width, the media controls will be entirely
        unclickable.

        Rather than making the RenderFullScreen a child of the full screen element's parent's renderer,
        make it a child of the RenderView, putting it outside of the columns entirely. Always create and
        insert the fullscreenRenderer's placeholder, using it as the remembered insertion point for the
        fullscreen element's renderer when we exit full screen.

        Drive-by fix: don't wrap the full screen element's renderer in webkitWillEnterFullScreenForElement();
        it will just be re-wrapped in createRendererIfNeeded().

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement): Don't wrap the full screen element's renderer.
        (WebCore::Document::setFullScreenRenderer): Call setPlaceholderStyle.
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreenPlaceholder::willBeDestroyed): Call clearPlaceholder.
        (WebCore::RenderFullScreen::wrapRenderer): Make fullscreenRenderer a child of the view().
        (WebCore::RenderFullScreen::unwrapRenderer): Return the children to the parent of the placeholder().
        (WebCore::RenderFullScreen::clearPlaceholder): Renamed from setPlaceholder().
        (WebCore::RenderFullScreen::ensurePlaceholder): Added. 
        (WebCore::RenderFullScreen::setPlaceholderStyle): Renamed from createPlaceholder().
        (WebCore::RenderFullScreen::setPlaceholder): Deleted.
        (WebCore::RenderFullScreen::createPlaceholder): Deleted.
        * rendering/RenderFullScreen.h:

2014-04-16  Jer Noble  <jer.noble@apple.com>

        [MSE] Multiple initialization segments with same codecs in tracks fail validation.
        https://bugs.webkit.org/show_bug.cgi?id=131768

        Additional initialization segments added to the same SourceBuffer with the same
        codec values will fail validation. Update the validation check to add the correct
        codec information for the initial segment, and check against the correct codecs during
        the validation step.

        Additionally, after validation, if successful update the Audio, Video, and TextTracks
        for the SourceBuffer with the updated initialization segment information.

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-multiple-initialization-segments.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired): m_source may have been cleared
            as a result of the append, so check it before using.
        (WebCore::SourceBuffer::sourceBufferPrivateDidEndStream): Call streamEndedWithError
            instead of endOfStream as the latter is safe to call within an update.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Ditto.
            Update the track lists if validation succeeds.
        (WebCore::SourceBuffer::validateInitializationSegment): Switch the audio and video
            codec checks.

        Add the ability for Audio, Video, and InbandTextTracks to replace their private tracks:
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack): Call updateKindFromPrivate().
        (WebCore::AudioTrack::setPrivate):
        (WebCore::AudioTrack::updateKindFromPrivate): Split out from constructor.
        * html/track/AudioTrack.h:
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack): Call updateKindFromPrivate().
        (WebCore::InbandTextTrack::setPrivate):
        (WebCore::InbandTextTrack::setMode): Split up into setModeInternal().
        (WebCore::InbandTextTrack::setModeInternal): Broke out from setMode().
        (WebCore::InbandTextTrack::updateKindFromPrivate): Split out from constructor.
        * html/track/InbandTextTrack.h:
        * html/track/TextTrack.h:
        (WebCore::TextTrack::isInband): Added, returns false.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack): Call updateKindFromPrivate().
        (WebCore::VideoTrack::setPrivate):
        (WebCore::VideoTrack::updateKindFromPrivate):  Split out from constructor.
        * html/track/VideoTrack.h:

2014-04-17  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Column sets below spanners don't repaint properly.
        https://bugs.webkit.org/show_bug.cgi?id=131778

        Reviewed by Beth Dakin.

        Added fast/repaint/spanner-with-margins.html.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        Turn off some code that was running for in-flow RenderFlowThreads that made no sense.
        I'm not convinced the code is right for other types of RenderFlowThreads either,
        but will leave that to the named flow thread experts. :)

2014-04-17  Koji Ishii  <kojishi@gmail.com>

        Catch up ruby and its tag omission rule changes in HTML5 CR Feb 2014
        https://bugs.webkit.org/show_bug.cgi?id=131175

        Reviewed by Darin Adler.

        Tests: html5lib/resources/ruby.dat
               html5lib/resources/tests19.dat

        This patch makes WebKit HTML parser to match to the tag omission rules of HTML5 CR Feb 2014:
        http://www.w3.org/TR/2014/CR-html5-20140204/syntax.html#syntax-tag-omission
        with the support for two new elements (rb, rtc) which were also defined in the spec:
        http://www.w3.org/TR/2014/CR-html5-20140204/text-level-semantics.html#the-rb-element
        http://www.w3.org/TR/2014/CR-html5-20140204/text-level-semantics.html#the-rtc-element
        to better support use cases presented by W3C I18N WG:
        http://www.w3.org/TR/ruby-use-cases/

        * html/HTMLTagNames.in: rb and rtc added as HTMLElement interfaces.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::hasImpliedEndTag): the spec says rb and rtc have implied end tags.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): rb and rtc added. rt excludes rtc from its implied end tags.

2014-04-17  Darin Adler  <darin@apple.com>

        Try to fix EFL and GTK builds.

        * workers/WorkerGlobalScope.idl: Touch file to make it rebuild, assuming that
        module dependencies aren't working right with CMake. Tweaked formatting quite a
        bit while I was in here.

2014-04-17  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] REGRESSION: Column set styles don't update when zooming etc.
        https://bugs.webkit.org/show_bug.cgi?id=131777

        Reviewed by Enrica Casucci.

        Added fast/multicol/zoom-test.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        Put back in the code that propagates new styles to the flow thread and column sets
        when styles change. This propagation was removed when the column span code landed.
        This patch puts it back in but qualifies the types of objects that get styles
        propagated to avoid accidentally propagating the wrong style to column spans.

2014-04-17  Darin Adler  <darin@apple.com>

        Add separate flag for IndexedDatabase in workers since the current implementation is not threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=131785
        rdar://problem/16003108

        Reviewed by Brady Eidson.

        * Configurations/FeatureDefines.xcconfig: Added INDEXED_DATABASE_IN_WORKERS.

        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp: Use the new conditional
        instead of the old one.
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h: Ditto.
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl: Ditto.

2014-04-17  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/16601336> [Cocoa] _userInitiated is always NO in WKNavigationAction passed to -webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:
        https://bugs.webkit.org/show_bug.cgi?id=131783

        Reviewed by Tim Horton.

        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction): Initialize m_processingUserGesture to
        ScriptController::processingUserGesture() at the time the NavigationAction is constructed.
        * loader/NavigationAction.h:
        Added boolean member variable m_processionUserGesture
        (WebCore::NavigationAction::processingUserGesture): Added this getter.

2014-04-17  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Isolation descendant dependent flags are not updated correctly
        https://bugs.webkit.org/show_bug.cgi?id=130892

        Reviewed by Dean Jackson.

        The isolation descendant dependent flag (m_hasUnisolatedBlendingDescendants)
        will help us to determine if a layer should isolate blending descendants or not.
        The m_hasUnisolatedBlendingDescendants flag should be set for layers that have blending descendant layers
        not isolated by descendant stacking contexts.
        An element isolatesBlending() if it has this flag set and creates stacking context.

        Tests: css3/compositing/blend-mode-isolation-flags-append-non-stacking-context-blending.html
               css3/compositing/blend-mode-isolation-flags-append-stacking-context-blending.html
               css3/compositing/blend-mode-isolation-flags-remove-non-stacking-context-blending.html
               css3/compositing/blend-mode-isolation-flags-remove-stacking-context-blending.html
               css3/compositing/blend-mode-isolation-flags-turn-off-blending-no-isolation.html
               css3/compositing/blend-mode-isolation-flags-turn-off-blending.html
               css3/compositing/blend-mode-isolation-flags-turn-off-stacking-context.html
               css3/compositing/blend-mode-isolation-flags-turn-on-blending.html
               css3/compositing/blend-mode-isolation-flags-turn-on-stacking-context.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateBlendMode):
        (WebCore::RenderLayer::updateAncestorChainHasBlendingDescendants):
            When a layer has blending and it hasn't had it before, we set the isolation
        flag for all its ancestors up to the first layer creating stacking context.
        I removed the isComposited() check here. Isolation flags should be correct regardless
        of compositing state. Moreover, if this method is called from styleChanged(),
        the compositing state might not be accurate, it's going to be recalculated afterwards.  
        (WebCore::RenderLayer::dirtyAncestorChainHasBlendingDescendants):
            When a layer doesn't have blending, but it used to have it before, we mark
        the isolation flag as dirty for all its ancestors up to the first layer
        creating stacking context. The isolation flags will be recalculated by
        RenderLayer::updateDescendantDependentFlags.
        (WebCore::RenderLayer::updateDescendantDependentFlags):
            Evaluates if the layer has unisolated blending descendants by traversing
        the layer subtree.
        (WebCore::RenderLayer::addChild):
            When adding a subtree that has blending or has some unisolated descendants,
        we set the flag for all the ancestors, up to the stacking context layer.
        (WebCore::RenderLayer::removeChild):
            When removing a subtree that had blending or had some unisolated descendants,
        we dirty the flag so that it could be reevaluated.
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::updateTransform):
        * rendering/RenderLayer.h:
            Rename m_hasBlendedElementInChildStackingContext => m_hasUnisolatedBlendingDescendants
        and m_hasBlendedElementInChildStackingContextStatusDirty => m_hasUnisolatedBlendingDescendantsStatusDirty,
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
            Add an assert to make sure that if m_hasUnisolatedCompositedBlendingDescendants is true,
        then m_hasUnisolatedBlendingDescendants is true as well.

2014-04-17  Tim Horton  <timothy_horton@apple.com>

        Uninline blend(Color, Color) to get AnimationUtilities out of Color.h
        https://bugs.webkit.org/show_bug.cgi?id=131781

        Reviewed by Simon Fraser.

        * platform/graphics/Color.cpp:
        (WebCore::blend):
        Un-inline.

        * platform/graphics/Color.h:
        No more AnimationUtilities.

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

        Fix the build after r167412

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

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

        [iOS][WK2] Fix annoying scrolling bugs
        https://bugs.webkit.org/show_bug.cgi?id=131722

        Reviewed by Simon Fraser.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        Since ScrollingStateScrollingNode::setRequestedScrollPosition() was added, we see ScrollView::updateScrollbars()
        keep changing the scroll position to incorrect values.

        On iOS, the scrollbars are handled by the native UI, the code just compute incorrect scroll position. On WebKit1,
        the code does not run because there is a platformWidget().

        Just #ifdef the whole useless code.

2014-04-16  Alexandru Chiculita  <achicu@adobe.com>

        Improve performance of the RenderLayerCompositor::OverlapMap
        https://bugs.webkit.org/show_bug.cgi?id=115063

        Reviewed by Simon Fraser.

        No new tests, no new functionality or behavior.

        Do not use the OverlapMap in RenderLayerCompositor::computeCompositingRequirements if the layer already
        has a 3D transform. This way we can avoid a potential expensive lookups when we know for sure the layer
        is already supposed to be composited. 

        Also, added a bounding box of the overlap map, so that it can catch cases when the new layer is not overlapping
        any of the previous layers. This is pretty common when having composited layers laid out in a vertical/horizontal list.


        * rendering/RenderLayerCompositor.cpp:
        (OverlapMapContainer):
        (WebCore::OverlapMapContainer::add):
        (WebCore::OverlapMapContainer::overlapsLayers):
        (WebCore::OverlapMapContainer::unite):
        (WebCore):
        (WebCore::RenderLayerCompositor::OverlapMap::add):
        (WebCore::RenderLayerCompositor::OverlapMap::overlapsLayers):
        (WebCore::RenderLayerCompositor::OverlapMap::pushCompositingContainer):
        (WebCore::RenderLayerCompositor::OverlapMap::popCompositingContainer):
        (RenderLayerCompositor::OverlapMap):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2014-04-16  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: memoize fallback time values for document.lastModified
        https://bugs.webkit.org/show_bug.cgi?id=131318

        Reviewed by Joseph Pecoraro.

        If a document's Last-Modified header can't be found or used, then 
        document.lastModified is derived from the current system time or
        from filesystem data, which is obviously nondeterministic.

        It's better to handle this inside Document::lastModified rather than using
        MemoizedDOMResult, because only the fallback case is nondeterministic.

        Test: http/tests/inspector/replay/document-last-modified-fallback-value.html

        The test is skipped for now, as it will be very flaky without the
        functionality introduced by bugs 130728 and 129391.

        * dom/Document.cpp:
        (WebCore::Document::lastModified): Save or reuse memoized fallback value.
        * replay/WebInputs.json: Add input DocumentLastModifiedDate.

2014-04-16  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Selection gets confused when the mouse is in the column gaps.
        https://bugs.webkit.org/show_bug.cgi?id=131739

        Reviewed by Enrica Casucci.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGaps):
        Make sure not to paint selection gaps. This matches the old multi-column behavior. Even though
        selection gaps *nearly* work with the new multi-column code, I am disabling them so that we
        can turn them on without visual regressions.
        
        (WebCore::isChildHitTestCandidate):
        Don't allow in-flow RenderFlowThreads to be descended into from positionForPoint. We always want
        to look only at the spanners and at the sets.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::nodeAtPoint):
        * rendering/RenderMultiColumnFlowThread.h:
        Override nodeAtPoint to disallow the RenderMultiColumnFlowThread from being considered for hit
        testing when no DOM node is found. It's better to just let RenderBlock's positionForPoint run
        to drill back down into the appropriate column set.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::positionForPoint):
        Implement positionForPoint for RenderMultiColumnSets. This is a straight-up port of the
        old multi-column code's adjustPointToColumnContents function.

        * rendering/RenderMultiColumnSet.h:
        Add override of positionForPoint.

2014-04-16  Dean Jackson  <dino@apple.com>

        MediaDocument on iOS should be full page
        https://bugs.webkit.org/show_bug.cgi?id=131774

        Reviewed by Jer Noble.

        A MediaDocument on iOS has two problems. It can't rely
        on intrinsic size, since it doesn't load the content until
        a user gesture. Secondly, on a small screen you want the
        media to fill the page.

        Add width/height 100% for iOS documents.

        Test: platform/iphone-simulator/media/media-document-controls-size.html

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2014-04-16  Roger Fong  <roger_fong@apple.com>

        Add a way for layout tests to determine whether or not a plugin is snapshotted.
        https://bugs.webkit.org/show_bug.cgi?id=131650.
        <rdar://problem/16615528>

        Reviewed by Dean Jackson.

        * testing/Internals.cpp:
        (WebCore::Internals::isPluginSnapshotted):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-04-16  Zoltan Horvath  <zoltan@webkit.org>

        Vanish unnecessary includes from Shapes.{h|cpp}
        https://bugs.webkit.org/show_bug.cgi?id=131762

        Reviewed by Andreas Kling.

        No new tests, no behavior change.

        * rendering/shapes/BoxShape.h:
        * rendering/shapes/Shape.cpp:
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeOutsideInfo.h:

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

        Revert direct caching of tagName and nodeName from r167383.

        Ryosuke tells me this is not entirely safe, will need to rethink.

        * dom/Element.idl:
        * dom/Node.idl:

2014-04-16  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Improve security mitigation added in webkit r94001.
        We missed the case where attachLine was called when we already had an inline box wrapper.
        https://bugs.webkit.org/show_bug.cgi?id=127285

        Reviewed by Brent Fulgham.

        Merged from Blink: https://src.chromium.org/viewvc/blink?revision=150697&view=revision

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setInlineBoxWrapper):

2014-04-16  Bem Jones-Bey  <bjonesbe@adobe.com>

        Fix CodeGenerator.pm to only write files if the generated content has changed
        https://bugs.webkit.org/show_bug.cgi?id=131756

        Reviewed by Sam Weinig.

        To improve build speed, don't touch generated files unless the newly
        generated content is actually different.

        * bindings/scripts/CodeGenerator.pm:
        (UpdateFile):

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

        Add a way to cache never-changing IDL attributes in the wrapper.
        <https://webkit.org/b/131759>

        Some IDL attributes will always return the same value when queried
        on an object, so let's have a way to avoid calling into C++ code
        every time they are queried.

        This patch adds a custom IDL thingy called "ReturnsCacheableValue"
        which causes the code generator to emit code to cache the returned
        value directly in the JS wrapper object.

        Reviewed by Oliver Hunt.

        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

            Add ReturnsCacheableValue custom attribute.

        * dom/Element.idl:
        * dom/Node.idl:

            Annotate some attributes that return fully cacheable values.

        * bindings/scripts/test/*:

            Rebaseline.

2014-04-16  Noel Gordon  <noel.gordon@gmail.com>

        Progressive JPEG outputScanlines() calls should handle failure
        https://bugs.webkit.org/show_bug.cgi?id=116701

        Reviewed by Brent Fulgham.

        outputScanlines() can fail and delete |this|. Copy the decoder pointer
        member and use that copy to detect and handle the failure case.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):

2014-04-16  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Add WEB_TIMING support
        https://bugs.webkit.org/show_bug.cgi?id=127555

        Reviewed by Brent Fulgham.

        Access timing information related to navigation.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::milisecondsSinceRequest):
        (WebCore::calculateWebTimingInformations):
        (WebCore::sockoptfunction):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):
        (WebCore::ResourceHandleManager::initializeHandle):

2014-04-16  Zoltan Horvath  <zoltan@webkit.org>

        Cleanup header includes in ShapeOutsideInfo.h
        https://bugs.webkit.org/show_bug.cgi?id=131750

        Reviewed by Antti Koivisto.

        Make the build faster by removing unnecessary header includes.

        No new tests, no behavior change.

        * rendering/shapes/ShapeOutsideInfo.h:

2014-04-16  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):

2014-04-16  Alexey Proskuryakov  <ap@apple.com>

        DataTransfer should cache its FileList
        https://bugs.webkit.org/show_bug.cgi?id=131694

        Reviewed by Darin Adler.

        Test: fast/events/data-transfer-files-attribute-identity.html

        * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneDeserializer::readTerminal):
        Switched to a new FileList constructor, CloneDeserializer doesn't really need to modify
        the FileList with append().

        * dom/DataTransfer.h:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::types): Added a FIXME.
        (WebCore::DataTransfer::files): Changed to reuse a cached FileList. It's currently
        easy, because we don't support DataTransferItemList. Once we do, making any changes
        through it will also require updating the FileList in a way that doesn't replace
        File objects for unchanged files.

        * fileapi/FileList.h:
        (WebCore::FileList::create):
        (WebCore::FileList::isEmpty):
        (WebCore::FileList::FileList):
        (WebCore::FileList::append):
        (WebCore::FileList::clear):
        Made non-const functions private, because neither DataTransfer nor FileInputType
        expect the list to be modified without their knowledge. Added a new Vector based
        constructor so that a FileList could be created without the use of append().

        * html/FileInputType.cpp: (WebCore::FileInputType::createFileList): Simplified
        the code a little bit. FileInputType still needs to modify the list for clear(),
        but doesn't need to add to it dynamically - unlike with DataTransfer, it's expected
        to create a new FileList when it's modified.

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

        [Win] Eliminate use of deleteAllValues in Windows Files
        https://bugs.webkit.org/show_bug.cgi?id=131631

        Reviewed by Darin Adler.

        Update to use std::unique_ptr for object lifetime. Get rid of
        deleteAllValues now that it is no loner needed. Use ranged for
        loops where possible.

        * platform/win/WCDataObject.cpp:
        (WebCore::WCEnumFormatEtc::WCEnumFormatEtc):
        (WebCore::WCDataObject::~WCDataObject):
        (WebCore::WCDataObject::GetData):
        (WebCore::WCDataObject::QueryGetData):
        (WebCore::WCDataObject::SetData):
        (WebCore::WCDataObject::clearData):
        * platform/win/WCDataObject.h:

2014-04-16  Chris Fleizach  <cfleizach@apple.com>

        AX: Accessing a table cell with an invalid column header crashes
        https://bugs.webkit.org/show_bug.cgi?id=131719

        Reviewed by Darin Adler.

        If no tableCell is available as a column/row header, then do not continue processing.

        Test: accessibility/table-missing-column-header-crash.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::columnHeaders):
        (WebCore::AccessibilityTableCell::rowHeaders):

2014-04-16  Brendan Long  <b.long@cablelabs.com>

        [GTK] Fix unused parameter warnings
        https://bugs.webkit.org/show_bug.cgi?id=131721

        Reviewed by Darin Adler.

        * bindings/js/JSMediaStreamCapabilitiesCustom.cpp:
        (WebCore::toJS): Remove unused 'exec' parameter.

2014-04-16  Simon Fraser  <simon.fraser@apple.com>

        Convert the boolean param of Image::startAnimation() to an enum
        https://bugs.webkit.org/show_bug.cgi?id=131742

        Reviewed by Tim Horton.

        Use an enum to make the code more readable.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::startAnimation):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::startAnimation):
        * svg/graphics/SVGImage.h:

2014-04-16  David Hyatt  <hyatt@apple.com>

        Make sure to skip the RenderMultiColumnFlowThread when resolving percentage heights inside columns against
        containing blocks. The flow thread's auto height should not interfere if a fixed height is specified on
        an ancestor.

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

        Reviewed by Simon Fraser.

        Added fast/multicol/percent-height.html.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::skipContainingBlockForPercentHeightCalculation):
        Add an isInFlowRenderFlowThread check so that we skip those blocks and don't consider them at all
        when resolving percentage heights.

2014-04-16  Daewoong Jang  <daewoong.jang@navercorp.com>

        [WinCairo][cURL] Build fix for WinCairo build with USE(CURL).
        https://bugs.webkit.org/show_bug.cgi?id=131614

        Reviewed by Brent Fulgham.

        Build fix, no new tests needed.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::loadIndex):
        * platform/network/soup/ResourceError.h:
        * platform/network/soup/SocketStreamHandle.h:

2014-04-16  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        ASSERTION FAILED: x2 >= x1 in WebCore::RenderObject::drawLineForBoxSide
        https://bugs.webkit.org/show_bug.cgi?id=127835

        In some cases when a negative margin and a positive padding are applied
        together to the right and/or left side of the box, the logical width of
        the borders can be set to a negative value, making the assertion fire.
        The fix checks if the width or height of the box is negative, and if so,
        it will not display the borders and shadows of the box.

        Reviewed by Darin Adler.

        Test: fast/css/padding-margin-negative-border.html

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

2014-04-16  Jer Noble  <jer.noble@apple.com>

        [MSE] Seeks into buffered ranges will never complete.
        https://bugs.webkit.org/show_bug.cgi?id=131717

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-seek-complete.html

        Run the SourceBuffer Monitoring step after initiating a seek.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):

2014-04-15  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Fix problems with the pixel dump.
        https://bugs.webkit.org/show_bug.cgi?id=131265

        Reviewed by Gyuyoung Kim.

        Painting and compositing paths of WebKit-EFL were totally modified from r166768.
        However pixel dump codes still call deprecated functions like ewk_view_paint(),
        which causes that nothing is drawn.

        This patch adds new member functions to AcceleratedCompositingContext to support pixel dump.
        One of new functions is AcceleratedCompositingContext::extractImageData(),
        which replaces deprecated function calls. Besides the extractImageData() is invoked by
        ewk_view_screenshot_contents_get() in order to take the visible content displayed on the EFL webview.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::flipImageSurfaceVertically): Flip pixel data of given cairo_surface_t vertically up/down.
        Whereas Cairo uses the top-left corner as being 0,0 of the coordinate system,
        OpenGL uses the bottom-left corner being 0,0.
        So we need to vertically flip resultant images taken by glReadPixels().
        * platform/graphics/cairo/CairoUtilities.h:

2014-04-15  Hyowon Kim  <hw1008.kim@samsung.com>

        Make page overlay functionality working on coordinated graphics.
        https://bugs.webkit.org/show_bug.cgi?id=131425

        Reviewed by Darin Adler.

        Page overlay functionality did not work on coordinated graphics since r166975.
        This patch removes deprecated code related to the PageOverlay GraphicsLayer management.
        and makes CoordinatedLayerTreeHost use PageOverlayController.

        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::setRootCompositingLayer):
        (WebCore::CompositingCoordinator::flushPendingLayerChanges):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:

2014-04-10  Roger Fong  <roger_fong@apple.com>

        Snapshotted plugins may need to be restarted if style properties are changed after initial load of plugin.
        https://bugs.webkit.org/show_bug.cgi?id=131553.
        <rdar://problem/15443375>

        Reviewed by Timothy Horton.

        Test: plugins/snapshotting/set-plugin-size-to-tiny.html

        When updating embedded objects during our post layout checks, check for certain style changes
        that may result in the plugin needing to be restarted.

        * html/HTMLPlugInImageElement.h: 
        Add m_plugInDimensionsSpecified field to keep track of whether or not dimensions on the plugin’s renderer have been specified.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        Initialize m_plugInDimensionsSpecified.
        (WebCore::isSmallerThanTinySizingThreshold):
        Refactoring, move check for whether or not plugin is smaller than the tiny plugin size threshold to this method.
        (WebCore::HTMLPlugInImageElement::isTopLevelFullPage): 
        Refactoring, move check for whether or not plugin is top level full page to this method.
        (WebCore::HTMLPlugInImageElement::checkSnapshotStatus): 
        Use refactored checks here as well to determine whether or not we need to restart the snapshotted plugin.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Use refactored checks.
        If plugin dimensions were specified, set m_plugInDimensionsSpecified to true.

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

        [iOS WebKit2] Listen for system memory pressure notifications.
        <https://webkit.org/b/131653>
        <rdar://problem/16208123>

        Reviewed by Antti Koivisto.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

            Use the right invocation to summon the memory pressure handler.

        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::uninstall):
        (WebCore::MemoryPressureHandler::holdOff):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

            Make stubbed out functions !PLATFORM(COCOA)

2014-04-14  Morten Stenshorne  <mstensho@opera.com>

        [New Multicolumn] Add support for column-span:all
        https://bugs.webkit.org/show_bug.cgi?id=129330

        Reviewed by Dave Hyatt.

        Column spanners are implemented as siblings of RenderMultiColumnSet
        objects (i.e. the regions for the column rows). This means that they
        are pulled out from the flow thread tree where they would otherwise
        live. This causes some complexity, most of which is contained within
        the multicol code.

        A placeholder is put in the flow thread tree where the spanner's
        renderer would otherwise live. This is needed in order make sure that
        we interrupt line layout before after the spanner. We also need this
        to be able to switch from one multicol set to the next.

        Some extra logic is required when dynamically inserting and removing
        flow thread descendants now, because we need to figure out if the
        renderer added should trigger creation of new multi column sets. If
        a spanner is inserted in the middle of a multi column set, we need to
        detect this, split the set and put the spanner in the middle.

        Wrote a bunch of tests. A few of the tests were copied from existing
        (old-impl) tests and put in a separate directory. That directory can
        be wiped when we turn on the new multicol implementation by default.

        Tests: fast/multicol/newmulticol/adjacent-spanners.html
               fast/multicol/newmulticol/block-becomes-spanner.html
               fast/multicol/newmulticol/change-spanner-display.html
               fast/multicol/newmulticol/change-spanner-parent-display.html
               fast/multicol/newmulticol/compare-with-old-impl/anonymous-block-split-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/before-child-anonymous-column-block.html
               fast/multicol/newmulticol/compare-with-old-impl/clone-before-after-content-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/clone-block-children-inline-mismatch-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/clone-flexbox.html
               fast/multicol/newmulticol/compare-with-old-impl/clone-summary.html
               fast/multicol/newmulticol/compare-with-old-impl/column-span-inside-multicol-webkit-box.html
               fast/multicol/newmulticol/compare-with-old-impl/continuation-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/double-merge-anonymous-block-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/empty-anonymous-block-split-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/float-not-removed-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/list-multi-column-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/positioned-child-not-removed-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/positioned-objects-not-removed-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/recursive-split-flow-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/removal-of-multicol-span-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/remove-child-split-flow-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/runin-continuation-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/span-as-immediate-child-complex-splitting.html
               fast/multicol/newmulticol/compare-with-old-impl/span-as-nested-inline-block-child.html
               fast/multicol/newmulticol/compare-with-old-impl/split-flow-anonymous-wrapper-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/split-inline-wrong-post-block-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/table-multi-column-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/textbox-not-removed-crash.html
               fast/multicol/newmulticol/compare-with-old-impl/update-after-content-before-child-crash.html
               fast/multicol/newmulticol/insert-row-content1.html
               fast/multicol/newmulticol/insert-row-content2.html
               fast/multicol/newmulticol/insert-row-content3.html
               fast/multicol/newmulticol/insert-row-content4.html
               fast/multicol/newmulticol/insert-row-content5.html
               fast/multicol/newmulticol/insert-row-content6.html
               fast/multicol/newmulticol/insert-row-content7.html
               fast/multicol/newmulticol/insert-row-content8.html
               fast/multicol/newmulticol/insert-row-content9.html
               fast/multicol/newmulticol/insert-spanner-child1.html
               fast/multicol/newmulticol/insert-spanner-child2.html
               fast/multicol/newmulticol/insert-spanner-child3.html
               fast/multicol/newmulticol/insert-spanner1.html
               fast/multicol/newmulticol/insert-spanner2.html
               fast/multicol/newmulticol/insert-spanner3.html
               fast/multicol/newmulticol/insert-spanner4.html
               fast/multicol/newmulticol/insert-spanner5.html
               fast/multicol/newmulticol/insert-spanner6.html
               fast/multicol/newmulticol/insert-spanner7.html
               fast/multicol/newmulticol/insert-spanner8.html
               fast/multicol/newmulticol/multicol-with-spanner-becomes-regular-block.html
               fast/multicol/newmulticol/remove-row-content1.html
               fast/multicol/newmulticol/remove-row-content2.html
               fast/multicol/newmulticol/remove-row-content3.html
               fast/multicol/newmulticol/remove-row-content4.html
               fast/multicol/newmulticol/remove-row-content5.html
               fast/multicol/newmulticol/remove-row-content6.html
               fast/multicol/newmulticol/remove-row-content7.html
               fast/multicol/newmulticol/remove-row-content8.html
               fast/multicol/newmulticol/remove-row-content9.html
               fast/multicol/newmulticol/remove-spanner1.html
               fast/multicol/newmulticol/remove-spanner2.html
               fast/multicol/newmulticol/remove-spanner3.html
               fast/multicol/newmulticol/remove-spanner4.html
               fast/multicol/newmulticol/remove-spanner5.html
               fast/multicol/newmulticol/remove-spanner6.html
               fast/multicol/newmulticol/sole-spanner.html
               fast/multicol/newmulticol/span-between-text.html
               fast/multicol/newmulticol/spanner-becomes-regular-block.html
               fast/multicol/newmulticol/spanner-first.html
               fast/multicol/newmulticol/spanner-img.html
               fast/multicol/newmulticol/spanner-inline-block.html
               fast/multicol/newmulticol/spanner-last.html
               fast/multicol/newmulticol/spanner-nested-dynamic.html
               fast/multicol/newmulticol/spanner-nested.html
               fast/multicol/newmulticol/spanner-pseudo-after1.html
               fast/multicol/newmulticol/spanner-pseudo-after2.html
               fast/multicol/newmulticol/spanner-pseudo-after3.html
               fast/multicol/newmulticol/spanner-pseudo-after4.html
               fast/multicol/newmulticol/spanner-pseudo-before-after1.html
               fast/multicol/newmulticol/spanner-pseudo-before-after2.html
               fast/multicol/newmulticol/spanner-pseudo-before-after3.html
               fast/multicol/newmulticol/spanner-pseudo-before-after4.html
               fast/multicol/newmulticol/spanner-pseudo-before1.html
               fast/multicol/newmulticol/spanner-pseudo-before2.html
               fast/multicol/newmulticol/spanner-pseudo-before3.html
               fast/multicol/newmulticol/spanner-pseudo-before4.html
               fast/multicol/newmulticol/spanner-table.html
               fast/multicol/newmulticol/spanner-with-margin.html
               fast/multicol/newmulticol/spanner1.html
               fast/multicol/newmulticol/spanner2.html
               fast/multicol/newmulticol/spanner3.html
               fast/multicol/newmulticol/spanner4.html
               fast/multicol/newmulticol/spanner5.html
               fast/multicol/newmulticol/spanner6.html
               fast/multicol/newmulticol/spanner7.html
               fast/multicol/newmulticol/spanner8.html
               fast/multicol/newmulticol/spanner9.html
               fast/multicol/newmulticol/trailing-margin-with-spanner.html
               fast/multicol/newmulticol/trailing-margin-with-spanner2.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        Disable the old anonymous multicol container and spanner anonymous
        block generation machinery when the new multicol implementation is
        enabled.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createMultiColumnFlowThread):
        (WebCore::RenderBlockFlow::destroyMultiColumnFlowThread):
        (WebCore::RenderBlockFlow::layoutBlockChild): Need to notify the
        flow thread when a descendant's final position is known. Spanner
        placeholders need to know where to terminate the column set that
        it follows.
        (WebCore::RenderBlockFlow::styleDidChange): Remove old code that
        isn't needed anymore. The renderers in question (flow thread and
        column sets) set display:block on themselves already. This code
        caused problems for spanners, which got all their style wiped.
        (WebCore::RenderBlockFlow::setMultiColumnFlowThread): If setting
        the flow thread to nullptr, there's no need to create the "rare
        data" structure.
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::layoutSpecialExcludedChild):
        (WebCore::RenderBlockFlow::addChild): beforeChild is retrieved via
        the DOM. If it is a spanner, we need to locate the placeholder
        here, because that's the correct location to insert siblings,
        DOM-wise.
        (WebCore::RenderBlockFlow::removeChild): The multicol flow thread
        needs to know when children disappear.
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        Don't modify the height back and forth when calculating the
        multicol container's final height, as that messes up balancing.
        (WebCore::RenderBlockFlow::insertedIntoTree): Deleted.
        (WebCore::RenderBlockFlow::willBeDestroyed): Deleted.
        (WebCore::RenderBlockFlow::styleWillChange): Deleted.
        (WebCore::RenderBlockFlow::lineAtIndex): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertedIntoTree): Set up an element's
        layer before notifying the flow thread. The multicol flow thread
        may decide to move the element (if it's a spanner), which may
        involve re-insertion of layers.  Calling
        RenderObject::insertedIntoTree() last instead of first also better
        matches the order we used to have prior to the introduction of
        RenderElement, FWIW.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::removeRegionFromThread): Deleted.
        (WebCore::RenderFlowThread::invalidateRegions): Deleted.
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        (WebCore::RenderMultiColumnFlowThread::removeFlowChildInfo): When
        a flow thread descendant is inserted, the multicol flow thread
        needs to be notified.
        (WebCore::RenderMultiColumnFlowThread::firstMultiColumnSet):
        (WebCore::RenderMultiColumnFlowThread::lastMultiColumnSet):
        (WebCore::RenderMultiColumnFlowThread::firstColumnSetOrSpanner):
        (WebCore::RenderMultiColumnFlowThread::nextColumnSetOrSpannerSiblingOf):
        (WebCore::RenderMultiColumnFlowThread::previousColumnSetOrSpannerSiblingOf):
        (WebCore::RenderMultiColumnFlowThread::layout):
        (WebCore::RenderMultiColumnFlowThread::findSetRendering):
        (WebCore::RenderMultiColumnFlowThread::populate):
        (WebCore::RenderMultiColumnFlowThread::evacuateAndDestroy):
        (WebCore::RenderMultiColumnFlowThread::addRegionToThread):
        (WebCore::RenderMultiColumnFlowThread::willBeRemovedFromTree):
        Need to detach column sets here, since they have pointers to their
        flow thread.
        (WebCore::RenderMultiColumnFlowThread::resolveMovedChild):
        (WebCore::isValidColumnSpanner):
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        (WebCore::RenderMultiColumnFlowThread::flowThreadRelativeWillBeRemoved):
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantBoxLaidOut):
        (WebCore::RenderMultiColumnFlowThread::autoGenerateRegionsToBlockOffset):
        Nothing to be done here for the time being. Column sets are now
        created during box creation. We are going to need to add some code
        here again once multicol properly supports nested fragmentation
        contexts (and you get adjacent column rows because of that).
        (WebCore::RenderMultiColumnFlowThread::regionAtBlockOffset):
        During layout, don't trust the region interval tree, as that one
        depends on the resulting layout.
        (WebCore::RenderMultiColumnFlowThread::setRegionRangeForBox): With
        a convenience method to get the last column set, and column sets
        now being created during normal box creation, this young method
        needs an overhaul.
        (WebCore::RenderMultiColumnFlowThread::setRegionRangeForBox):
        (WebCore::RenderMultiColumnFlowThread::isPageLogicalHeightKnown):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::nextSiblingMultiColumnSet):
        (WebCore::RenderMultiColumnSet::previousSiblingMultiColumnSet):
        (WebCore::RenderMultiColumnSet::firstRendererInFlowThread):
        (WebCore::RenderMultiColumnSet::lastRendererInFlowThread):
        (WebCore::precedesRenderer):
        (WebCore::RenderMultiColumnSet::containsRendererInFlowThread):
        (WebCore::RenderMultiColumnSet::setLogicalTopInFlowThread):
        (WebCore::RenderMultiColumnSet::setLogicalBottomInFlowThread):
        (WebCore::RenderMultiColumnSet::pageLogicalTopForOffset):
        (WebCore::RenderMultiColumnSet::distributeImplicitBreaks):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::addForcedBreak):
        (WebCore::RenderMultiColumnSet::recalculateColumnHeight):
        Previously only needed if columns were to be balanced, now it's
        also needed when not balancing.
        (WebCore::RenderMultiColumnSet::recordSpaceShortage): Some layout
        elements actually have 0 height. Skip them, since they're not
        taking us anywhere.
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        (WebCore::RenderMultiColumnSet::requiresBalancing): Column sets
        now have individual balancing needs. If they precede a spanner,
        they must always be balanced. For the last column set, see if
        height is unspecified or column-fill is 'balance' (like before).
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        (WebCore::RenderMultiColumnSet::beginFlow):
        (WebCore::RenderMultiColumnSet::endFlow):
        (WebCore::RenderMultiColumnSet::layout):
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight):
        (WebCore::RenderMultiColumnSet::columnRectAt):
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        (WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting):
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset):
        (WebCore::RenderMultiColumnSet::setAndConstrainColumnHeight): Deleted.
        (WebCore::RenderMultiColumnSet::findRunWithTallestColumns): Deleted.
        (WebCore::RenderMultiColumnSet::clearForcedBreaks): Deleted.
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent): Deleted.
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp: Added.
        (WebCore::RenderMultiColumnSpannerPlaceholder::createAnonymous):
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        (WebCore::RenderMultiColumnSpannerPlaceholder::renderName):
        * rendering/RenderMultiColumnSpannerPlaceholder.h: Added.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree): Need to notify the
        multicol flow thread when descendants are inserted. That may
        trigger insertion of column sets, or, in the case of spanners,
        they need to be moved out from the flow thread.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderMultiColumnSpannerPlaceholder):
        (WebCore::RenderObject::isAnonymousBlock): Exclude column sets
        here, so that they don't get involved in anonymous block merging
        and other kinds of fun.
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:

2014-04-15  Simon Fraser  <simon.fraser@apple.com>

        LayerTreeAsTextBehavior should be in the WebCore namespace
        https://bugs.webkit.org/show_bug.cgi?id=131683

        Reviewed by Andrei Bucur.

        Move LayerTreeAsTextBehavior and the bit flags into the WebCore namespace.

        * platform/graphics/GraphicsLayer.cpp:
        (showGraphicsLayerTree):
        * platform/graphics/GraphicsLayer.h:

2014-04-15  Benjamin Poulain  <bpoulain@apple.com>

        ViewportConfiguration handles userZoom incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=131657

        Reviewed by Darin Adler.

        * page/ViewportConfiguration.cpp:
        (WebCore::viewportArgumentUserZoomIsSet):
        (WebCore::ViewportConfiguration::updateConfiguration):
        The other viewport values must be strictly positive, userZoom is always either zero, one or minus one.
        As a result, the value zero was never set.

2014-04-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Pages often blank on first load if page loaded by typing the URL
        https://bugs.webkit.org/show_bug.cgi?id=131665

        Reviewed by Tim Horton.

        The document overlay-related code in RemoteLayerTreeDrawingArea::setRootCompositingLayer()
        was triggering a compositing layer flush when called with a null rootLayer, which happens
        for pages going into the page cache. This would trigger a layer flush that would clobber
        the root layer for the visible page, resulting in missing content.
        
        Also, rebuildCompositingLayerTree() is called recursively and the m_documentOverlayRootLayer
        was being added to (and then removed from) every single compositing layers.
        
        Fix both these by changing to a pull model, where RenderLayerCompositor requests
        the overlay layer via ChromeClient, and gets it at the end of every flush,
        adding to the children of the root layer.

        * WebCore.exp.in:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::documentOverlayLayerForFrame):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Put visibleRect
        into a variable for ease of debugging.
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Asser
        that we're not in the page cache (this would have caught the bug).
        (WebCore::RenderLayerCompositor::appendOverlayLayers):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Deleted.
        * rendering/RenderLayerCompositor.h:

2014-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167199 and r167251.
        https://bugs.webkit.org/show_bug.cgi?id=131678

        Caused a DYEBench regression and does not seem to improve perf
        on relevant websites (Requested by rniwa on #webkit).

        Reverted changesets:

        "Rewrite Function.bind as a builtin"
        https://bugs.webkit.org/show_bug.cgi?id=131083
        http://trac.webkit.org/changeset/167199

        "Update test result"
        http://trac.webkit.org/changeset/167251

2014-04-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unnecessary null checking in NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=131652

        Reviewed by Darin Adler.

        Some functions have checked if document is null. However, document is always not
        null when frame is existed.

        No new tests, no behavior changes.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::NavigatorContentUtils::registerProtocolHandler):
        (WebCore::NavigatorContentUtils::isProtocolHandlerRegistered):
        (WebCore::NavigatorContentUtils::unregisterProtocolHandler):

2014-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167298.
        https://bugs.webkit.org/show_bug.cgi?id=131670

        Broke CSS filters (17 test crashes) (Requested by ap on
        #webkit).

        Reverted changeset:

        "[iOS WK2] Pages often blank on first load if page loaded by
        typing the URL"
        https://bugs.webkit.org/show_bug.cgi?id=131665
        http://trac.webkit.org/changeset/167298

2014-04-14  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Attempt to fix Windows build after r167277.

        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):

2014-04-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167261.
        https://bugs.webkit.org/show_bug.cgi?id=131667

        broke many navigation tests (Requested by ap on #webkit).

        Reverted changeset:

        "Web Replay: memoize fallback time values for
        document.lastModified"
        https://bugs.webkit.org/show_bug.cgi?id=131318
        http://trac.webkit.org/changeset/167261

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

        [iOS WK2] Pages often blank on first load if page loaded by typing the URL
        https://bugs.webkit.org/show_bug.cgi?id=131665

        Reviewed by Tim Horton.

        The document overlay-related code in RemoteLayerTreeDrawingArea::setRootCompositingLayer()
        was triggering a compositing layer flush when called with a null rootLayer, which happens
        for pages going into the page cache. This would trigger a layer flush that would clobber
        the root layer for the visible page, resulting in missing content.
        
        Also, rebuildCompositingLayerTree() is called recursively and the m_documentOverlayRootLayer
        was being added to (and then removed from) every single compositing layers.
        
        Fix both these by changing to a pull model, where RenderLayerCompositor requests
        the overlay layer via ChromeClient, and gets it at the end of every flush,
        adding to the children of the root layer.

        * WebCore.exp.in:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::documentOverlayLayerForFrame):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Put visibleRect
        into a variable for ease of debugging.
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Asser
        that we're not in the page cache (this would have caught the bug).
        (WebCore::RenderLayerCompositor::appendOverlayLayers):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Deleted.
        * rendering/RenderLayerCompositor.h:

2014-04-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure under FEImage::determineAbsolutePaintRect()

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

        This patch merges Chromium r149536 (see
        <https://chromiumcodereview.appspot.com/14701012>), which moves
        m_absoluteTransform out of SVGFilter and into the base Filter class, so
        that it isn't necessary to cast a Filter to SVGFilter to get the
        absolute transform.

        Reviewed by Geoffrey Garen.

        Test: svg/filters/feImage-filter-assertion.html

        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::Filter):
        Changed to take the absolute transform.
        (WebCore::Filter::absoluteTransform):
        Moved from SVGFilter.
        (WebCore::Filter::mapAbsolutePointToLocalPoint):
        Ditto.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        Pass a default AffineTransform() to the Filter base class.

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect):
        Use the Filter without casting it to SVGFilter.
        (WebCore::FEImage::platformApplySoftware):
        Ditto.

        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::SVGFilter):
        Pass the transform to the base class, and remove initialization of a
        removed member var.

        * svg/graphics/filters/SVGFilter.h:
        Member var moved to Filter.h.

2014-04-14  Darin Adler  <darin@apple.com>

        REGRESSION (r158617): Find on Page can get stuck in a loop when the search string occurs in an <input> in a <fieldset>
        https://bugs.webkit.org/show_bug.cgi?id=126322

        Reviewed by Ryosuke Niwa.

        One additional tweak to the fix for the bug above.
        Fixes crash in editing/editability/ignored-content.html test.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::canContainRangeEndPoint): Call through to
        HTMLElement::canContainRangeEndPoint, bypassing HTMLPlugInElement override
        that always returns false. Without this change, this function was always
        returning false.

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

        Crash in TileController::tileRevalidationTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=131656
        <rdar://problem/16583166>

        Reviewed by Sam Weinig.

        It's possible for the TileController revalidation timer to fire after
        the GraphicsLayer has been destroyed, so the PlatformCALayer no longer
        has an owningGraphicsLayer.
        
        Bail from the timer callback if owningGraphicsLayer() is null.
        
        Also some drive-by 0 -> nullptr changes.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::willBeDestroyed):
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::~PlatformCALayer):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::tileRevalidationTimerFired):

2014-04-14  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Remove some leftover shape-inside code
        https://bugs.webkit.org/show_bug.cgi?id=131641

        Reviewed by Dean Jackson.

        I discovered that some code had been leftover from the shape-inside
        removal. This removes that leftover code.

        No new tests, no behavior change.

        * platform/text/BidiResolver.h:
        * rendering/BidiRun.cpp:
        (WebCore::BidiRun::BidiRun):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxes):
        (WebCore::RenderBlockFlow::constructLine):
        (WebCore::computeExpansionForJustifiedText):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):

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

        [MSE][Mac] video.currentTime is sometimes negative.
        https://bugs.webkit.org/show_bug.cgi?id=131644

        Reviewed by Eric Carlson.

        AVSampleBufferRenderSynchronizer will occasionally return slightly negative values
        when beginning playback. Clamp the return value to 0.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble):

2014-04-14  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSSExclusions] Remove FIXME referencing closed bug
        https://bugs.webkit.org/show_bug.cgi?id=131645

        Reviewed by Dean Jackson.

        This is silly, but the comment is really confusing as it's entirely
        wrong now.

        No new tests, no behavior change.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaint):

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

        Build fixage.

        * page/FrameView.cpp:

2014-04-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure !node || node->isElementNode() in
        WebCore::RenderBlock::inlineElementContinuation
  
        https://bugs.webkit.org/show_bug.cgi?id=108829
        <rdar://problem/13666405>
  
        I can't reproduce this assertion failure, but there seems to be an
        invalid assumption in RenderBlock::inlineElementContinuation() that
        anything with the "isInline()" bit set is a RenderInline.
        
        No new test because the test case in the bug does not repro for me.

        Reviewed by Brent Fulgham.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::inlineElementContinuation):
        Dave Hyatt says that this function should only return RenderInline
        objects (not non-RenderInline inline objects), so update the checks
        from isInline() to isRenderInline() before casting with
        toRenderInline().

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::inlineElementContinuation):
        Ditto.

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

        Do more things under memory pressure on non-iOS platforms.
        <https://webkit.org/b/131625>

        Reviewed by Antti Koivisto.

        Rename hasReceivedMemoryPressure() to isUnderMemoryPressure() and
        make it use std::atomic<bool> instead of OSAtomic primitives.

        Unmask most of the PLATFORM(IOS) blocks so all platforms can take
        advantage of optimizations done while under pressure. Note that
        isUnderMemoryPressure() will still always return false on platforms
        other than iOS/WK1, but this will change soon.

        * history/PageCache.cpp:
        (WebCore::PageCache::canCache):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::isUnderMemoryPressure):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::setReceivedMemoryPressure):
        (WebCore::MemoryPressureHandler::clearMemoryPressure):
        (WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded):
        (WebCore::MemoryPressureHandler::hasReceivedMemoryPressure): Deleted.
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::createTilesInActiveGrid):
        * platform/ios/LegacyTileGrid.mm:
        (WebCore::LegacyTileGrid::shouldUseMinimalTileCoverage):
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        * platform/ios/TileControllerMemoryHandlerIOS.cpp:
        (WebCore::TileControllerMemoryHandler::tileControllerGainedUnparentedTiles):

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

        RenderLayerCompositor's m_layerForOverhangAreas should be offset by the 
        topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=131632
        -and corresponding-
        <rdar://problem/16609602>

        Reviewed by Tim Horton.

        Offset m_layerForOverhangAreas by the topContentInset. 
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2014-04-14  Alexey Proskuryakov  <ap@apple.com>

        Eliminate CachedFrame::m_mousePressNode
        https://bugs.webkit.org/show_bug.cgi?id=131626

        Reviewed by Brady Eidson.

        I couldn't find any observable effect of this change.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::CachedFrameBase):
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::clear):
        * history/CachedFrame.h:
        (WebCore::CachedFrame::documentLoader):
        (WebCore::CachedFrame::mousePressNode): Deleted.
        Eliminated m_mousePressNode, accessor, and code that reached out to EventHandler.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::mousePressNode): Deleted.
        (WebCore::EventHandler::setMousePressNode): Deleted.
        * page/EventHandler.h:
        (WebCore::EventHandler::setMousePressed): Deleted. This function was already unused.

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

        Run filter animations in the UI process with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=131199
        <rdar://problem/16479487>

        Reviewed by Sam Weinig.

        Add FilterOperation::clone() which is used during decoding.
        Export some things.

        * WebCore.exp.in:
        * platform/graphics/filters/FilterOperation.h:

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

        Use after free in WebCore::CachedResourceHandleBase::~CachedResourceHandleBase / WebCore::removeDetachedChildrenInContainer
        https://bugs.webkit.org/show_bug.cgi?id=131169

        Reviewed by Eric Carlson.

        Invalidate the WebCoreAVFResourceLoader owned by MediaPlayerPrivateAVFoundationObjC
        in its destructor, to prevent a private function being called in response to the
        WebCoreAVFResourceLoader being stopped.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::invalidate):

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

        [WK2 iOS] Scrolling to anchor links is broken
        https://bugs.webkit.org/show_bug.cgi?id=131618
        <rdar://problem/16599144>

        Reviewed by Tim Horton.

        Have ScrollingTreeScrollingNode pass RequestedScrollPosition updates
        to the scrolling tree, so that the scrolling tree can have custom behavior
        for them if necessary.

        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeRequestsScroll):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateAfterChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:

2014-04-14  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: memoize fallback time values for document.lastModified
        https://bugs.webkit.org/show_bug.cgi?id=131318

        Reviewed by Joseph Pecoraro.

        If a document's Last-Modified header can't be found or used, then 
        document.lastModified is derived from the current system time or
        from filesystem data, which is obviously nondeterministic.

        It's better to handle this inside Document::lastModified rather than using
        MemoizedDOMResult, because only the fallback case is nondeterministic.

        Test: http/tests/inspector/replay/document-last-modified-fallback-value.html

        * dom/Document.cpp:
        (WebCore::Document::lastModified): Save or reuse memoized fallback value.
        * replay/WebInputs.json: Add input DocumentLastModifiedDate.

2014-04-12  Antti Koivisto  <antti@apple.com>

        Keep secondary tile grid for zoomed-out scale
        https://bugs.webkit.org/show_bug.cgi?id=131586

        Reviewed by Darin Adler.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsScale):
        
            Don't repaint tiled backing with setNeedsDisplay, it invalidates itself correctly in setContentsScale.
            Update custom child layers when tiled backing scale changes.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::setNeedsDisplay):
        
            Drop the whole zoomed-out grid on full repaint.

        (WebCore::TileController::setNeedsDisplayInRect):
            
            Drop changed zoomed-out tiles. A more sophisticated strategy is possible.

        (WebCore::TileController::setContentsScale):
        
            Swap the zoomed-out grid in and out as needed.
            Repaint the active grid after scale change so the client does not have to.

        (WebCore::TileController::contentsScale):
        
            Get the content scale from the tile grid so it is not kept in two places.

        (WebCore::TileController::zoomedOutContentsScale):
        (WebCore::TileController::setZoomedOutContentsScale):
        
            Drop the zoomed-out grid if it no longer matches the zoomed-out scale.

        (WebCore::TileController::tileRevalidationTimerFired):
        (WebCore::TileController::retainedTileBackingStoreMemory):
        (WebCore::TileController::containerLayers):
        
            Return both zoomed-out tiles and the active tiles. Active tiles are on top.

        (WebCore::TileController::numberOfUnparentedTiles):
        (WebCore::TileController::removeUnparentedTilesNow):
        * platform/graphics/ca/mac/TileGrid.h:
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::dropTilesInRect):
        
            Add a function for dropping tiles.

        (WebCore::TileGrid::revalidateTiles):

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

        Update test result

        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::finishCreation):

2014-04-14  Dirk Schulze  <krit@webkit.org>

        Optimize Canvas fill and drawImage with SourceIn, DestinationIn, SourceOut, and DestinationAtop using transparencyLayer.
        https://bugs.webkit.org/show_bug.cgi?id=79659

        Reviewed by Darin Adler.

        Optimize fill() and fillRect() operations in Canvas on composited contexts by
        10 to 20 times on CG.

        Replacing the ImageBuffer code by transparency layers allows the
        graphics library to optimize the drawing.

        Doing the same for drawImage() would give performance regressions.

        An inline function will create a transparency layer for CG. Cairo graphics
        does not composite correctly when a transparency layer gets created. 
        The inline function is just a NOOP for Cairo.

        This fixes bug 131303 as well.

        Added performance tests with r167124 already.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillInternal):
        (WebCore::CanvasRenderingContext2D::strokeInternal):
        (WebCore::CanvasRenderingContext2D::beginCompositeLayer):
        (WebCore::CanvasRenderingContext2D::endCompositeLayer):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedFill): Deleted.
        * html/canvas/CanvasRenderingContext2D.h:

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Lots of compositing test failures after r167152
        https://bugs.webkit.org/show_bug.cgi?id=131574

        Reviewed by Darin Adler.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::dumpChildren):
        (WebCore::GraphicsLayer::dumpProperties):
        Make child-dumping recursive so that we can easily skip layers up to any depth.

2014-04-14  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix incorrect indentations in CodeGeneratorJS.pm introduced in r165521
        https://bugs.webkit.org/show_bug.cgi?id=131613

        Reviewed by Csaba Osztrogonác.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Fixed 5-space indentation.
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        Updated the tests accordingly.

2014-04-14  Manuel Rego Casasnovas  <rego@igalia.com>

        [JSC] CSSStyleDeclaration report incorrect descriptor
        https://bugs.webkit.org/show_bug.cgi?id=89697

        Reviewed by Benjamin Poulain.

        Change descriptor of CSSStyleDeclaration properties in order to have
        writable and enumerable attributes set to true. Configurable is kept to
        false since the property is not deleteable.

        Test: fast/dom/CSSStyleDeclaration/cssstyledeclaration-properties-descriptor.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertySlotDelegate): Only set
        DontDelete attribute when creating the descriptor for
        CSSStyleDeclaration properties.

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

        [JSC] Improve the call site of string comparison in some hot path
        https://bugs.webkit.org/show_bug.cgi?id=131605

        Reviewed by Darin Adler.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListCacheMapEntryHash::equal):
        We should use the right comparison operation depending on the Hash Traits.

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

        Merge MemoryPressureHandler{Mac,IOS}.mm
        <https://webkit.org/b/131603>

        Join the iOS and Mac platform implementations of MemoryPressureHandler
        under the shared Cocoa banner. Each platform still has its own quirky
        behavior, but this puts them in the same file so we can start sharing.

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm: Renamed from Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm.
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::uninstall):
        (WebCore::MemoryPressureHandler::holdOff):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        (WebCore::respondToMemoryPressureCallback):
        (WebCore::MemoryPressureHandler::installMemoryReleaseBlock):
        (WebCore::MemoryPressureHandler::setReceivedMemoryPressure):
        (WebCore::MemoryPressureHandler::hasReceivedMemoryPressure):
        (WebCore::MemoryPressureHandler::clearMemoryPressure):
        (WebCore::MemoryPressureHandler::shouldWaitForMemoryClearMessage):
        (WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded):
        * platform/ios/MemoryPressureHandlerIOS.mm: Removed.

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

        CSS JIT: compile the :nth-child() pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=131602

        Reviewed by Andreas Kling.

        Tests: fast/selectors/nth-child-bounds.html
               fast/selectors/nth-child-with-backtracking.html

        Compile the :nth-child() pseudo class function + some related clean up.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::nthA):
        (WebCore::CSSSelector::nthB):
        Expose the parsed value of an+b filters. Those values are used to compile
        the selector.

        (WebCore::CSSSelector::RareData::parseNth):
        While working on the patch, I discovered some severe issues with the parsing of large
        values of a and/or b. The problem comes from the way the CSS parser handle the values:
        the values are parsed as a double then converted to an AtomicString for CSSSelector.

        There are many problems related to large values but we never got bug reports because
        they are very uncommon. Fixing those problem would require changing the parser.

        Here, CSSSelector::RareData::parseNth() is hardened a little bit to avoid absurd values
        of a and b.

        * css/CSSSelector.h:
        * cssjit/RegisterAllocator.h:
        It looks like I forgot RDX in the list of register. Add it now since it is required
        for SelectorCodeGenerator::modulo().

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::moduloIsZero):
        There is no modulo() operation exposed on the macro assemblers. This is a basic
        implementation on top of idiv for x86_64.

        Since idiv works exclusively with RAX and RDX, most of the code is about getting
        those registers efficiently.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::setElementChildIndex):
        (WebCore::SelectorCompiler::setElementChildIndexAndUpdateStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        This is pretty much a straightforward implementation of :nth-child().
        The first part counts the number of previous elements.
        The second part updates the tree if this is style resolution.
        The last part compares the number of previous siblings to an+b to find if the filter matches.

        The only part that diverges from SelectorChecker is how childIndex is used. Instead of testing it
        at every iteration, only the first iteration handle the cache.

        * dom/ElementRareData.h:
        (WebCore::ElementRareData::childIndexMemoryOffset):
        * dom/Node.h:
        (WebCore::Node::rareDataMemoryOffset):
        (WebCore::Node::flagHasRareData):
        * rendering/style/RenderStyle.h:

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Support setting a background color on page overlays
        https://bugs.webkit.org/show_bug.cgi?id=131600

        Reviewed by Darin Adler.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer):
        Mark the compositing tree as needing a rebuild when we get a new document-relative
        overlay layer; otherwise we were depending on something else coming along and
        requiring a rebuild, which didn't always happen.

2014-04-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Hit testing doesn't work in video
        https://bugs.webkit.org/show_bug.cgi?id=131485

        Reviewed by Andrei Bucur.

        When hit testing flow thread layer through the region layer,
        we have to pass the depth sorting information and take that
        into account for the situation in which an ancestor of the region
        has preserve-3d transform style.

        Test: fast/regions/hit-test-region-preserve3d-container.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegionForFragments):
        * rendering/RenderLayer.h:

2014-04-13  Darin Adler  <darin@apple.com>

        userVisibleString should not try to "encode" host names
        https://bugs.webkit.org/show_bug.cgi?id=131587
        rdar://problem/14686849

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Updated for WebCoreNSURLExtras argument type changes.

        * platform/mac/WebCoreNSURLExtras.h: Removed unneeded code to make this
        Objective-C++ header compile in plain C++ files, which we never need to do.
        Added missing argument name, baseURL, and changed mysterious CFIndex arguments
        to the correct type, CFURLComponentType.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter): Removed the inline keyword from this, and added
        more lookalike characters from the Mozilla list referenced here.
        (WebCore::URLByTruncatingOneCharacterBeforeComponent): Updated argument type.
        (WebCore::dataForURLComponentType): Ditto.
        (WebCore::userVisibleString): Only call mapHostNames if host name decoding is
        needed; no encoding here.

2014-04-13  Darin Adler  <darin@apple.com>

        REGRESSION (r158617): Find on Page can get stuck in a loop when the search string occurs in an <input> in a <fieldset>
        https://bugs.webkit.org/show_bug.cgi?id=126322

        Reviewed by Ryosuke Niwa.

        * dom/Element.cpp:
        (WebCore::Element::canContainRangeEndPoint): Now returns false when the role of the element
        is "img". This is the same rule that's hard-coded in isRenderReplacedElement for the same
        reason. Need more test coverage to make sure this role feature works consistently.

        * dom/Element.h: Made canContainRangeEndPoint no longer inline since it's not just a
        return statement any more.

        * dom/Position.cpp:
        (WebCore::Position::isCandidate): Took out code that calls isRendererReplacedElement
        that was added in r158617; not needed now that we updated canContainRangeEndPoint.

        * dom/Range.cpp:
        (WebCore::Range::firstNode): Removed code here that called isRendererReplacedElement.
        This was the wrong level to be adding editing logic, and there's a FIXME here to that
        effect, which we are now deleting. This was the change that broke Find.

        * editing/TextIterator.cpp: Added a comment about the redundancy between the
        isRendererReplacedElement and editingIgnoresContent functions.

        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::canContainRangeEndPoint): Call through to base class instead
        of just returning true when we have child nodes. Lets Element::canContainRangeEndPoint
        do its thing.
        * html/HTMLHRElement.h: Ditto.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::canContainRangeEndPoint): Call through to base class instead
        of just returning true when we have fallback content. Lets Element::canContainRangeEndPoint
        do its thing.
        * html/HTMLObjectElement.h: Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::countMatchesForText): Set the limit to 1000 instead of infinite.

2014-04-12  Darin Adler  <darin@apple.com>

        Use unique_ptr for FillLayer::m_next
        https://bugs.webkit.org/show_bug.cgi?id=75222

        Reviewed by Dan Bernstein.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        Renamed currChild to just child and prevChild to previousChild.
        Changed code to pass ownership of the new FillLayer immediately.
        Changed some loops to be for loops.
        (WebCore::ApplyPropertyFillLayer::applyInitialValue): Ditto.
        (WebCore::ApplyPropertyFillLayer::applyValue): Ditto.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::backgroundHasOpaqueTopLayer): Use reference
        instead of pointer.
        (WebCore::RenderBox::paintFillLayers): Ditto.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Ditto.

        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer): Removed m_next initializer since it is now an
        OwnPtr and initializes automatically. In a couple other places, changed m_next
        initializer to use make_unique.
        (WebCore::FillLayer::~FillLayer): Wrote loop for deletion of m_next.
        (WebCore::FillLayer::operator=): Removed unneeded explicit deletion of m_next.
        (WebCore::FillLayer::cullEmptyLayers): Ditto.
        (WebCore::clipMax): Marked inline.
        (WebCore::FillLayer::computeClipMax): Rewrote to use a loop instead of recursion.
        (WebCore::FillLayer::containsImage): Ditto.
        (WebCore::FillLayer::imagesAreLoaded): Ditto.
        (WebCore::FillLayer::hasOpaqueImage): Rewrote to use && instead of multiple if.
        (WebCore::FillLayer::hasImage): Rewrote to use a loop instead of recursion.
        (WebCore::FillLayer::hasFixedImage): Ditto.

        * rendering/style/FillLayer.h: Changed m_next to be a unique_ptr.

2014-04-13  Andy Estes  <aestes@apple.com>

        [QuickLook] Move file system-related code into WebKit
        https://bugs.webkit.org/show_bug.cgi?id=131597

        Reviewed by Dan Bernstein.

        QuickLookHandle should not be responsible for saving a copy of the
        original document to disk as it might be running in a process that
        either can't write to disk or can only write into a sandboxed
        container. To account for this, we need to separate the concern of
        quick look conversion from that of original document saving so that
        each activity can run in the appropriate process.

        Created a new interface between WebCore and WebKit by adding a client
        (QuickLookHandleClient) to QuickLookHandle which is notified of incoming
        bytes. A new function on FrameLoaderClient tells WebKit when a new
        QuickLookHandle is created, giving WebKit the opportunity to register a
        handle client. Moved the existing file system-related code as well as
        code only needed by WebKit1 in QuickLookHandle into a new WebKit1
        QuickLookHandleClient subclass.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Made QuickLookHandleClient.h Private.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didCreateQuickLookHandle): Added.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didCreateQuickLookHandle): Called FrameLoaderClient::didCreateQuickLookHandle().
        * loader/ResourceLoader.h:
        * platform/network/ResourceHandle.h: Made m_quickLook a unique_ptr.
        (WebCore::ResourceHandle::setQuickLookHandle): Changed to take a unique_ptr.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didCreateQuickLookHandle): Added.
        * platform/network/ios/QuickLook.h: Added m_client, gave m_converter a stronger type, and made m_nsResponse a RetainPtr.
        (WebCore::QuickLookHandle::setClient): Added.
        (WebCore::QuickLookHandle::firstRequestURL): Added.
        (WebCore::QuickLookHandle::converter): Added.
        * platform/network/ios/QuickLook.mm:
        (WebCore::registerQLPreviewConverterIfNeeded):
        (WebCore::createTemporaryFileForQuickLook): Made non-static.
        (WebCore::emptyClient): Returned a shared empty QuickLookHandleClient.
        (WebCore::QuickLookHandle::QuickLookHandle): Removed file system and WebKit1-only code.
        (WebCore::QuickLookHandle::create): Changed to return a unique_ptr.
        (WebCore::QuickLookHandle::nsResponse):
        (WebCore::QuickLookHandle::didReceiveDataArray): Removed file system code and called QuickLookHandleClient::didReceiveDataArray() instead.
        (WebCore::QuickLookHandle::didReceiveData): Removed file system code and called QuickLookHandleClient::didReceiveData() instead.
        (WebCore::QuickLookHandle::didFinishLoading): Removed file system code and called QuickLookHandleClient::didFinishLoading() instead.
        (WebCore::QuickLookHandle::didFail): Removed file system and WebKit1-only code, calling QuickLookHandleClient::didFail() instead.
        (WebCore::QuickLookHandle::~QuickLookHandle): Removed file system and WebKit1-only code. Cleared our reference to m_client.
        (WebCore::QuickLookHandle::previewFileName): Retrieved from m_converter.
        (WebCore::QuickLookHandle::previewRequestURL): Ditto.
        * platform/network/ios/QuickLookHandleClient.h: Added.
        (WebCore::QuickLookHandleClient::~QuickLookHandleClient):
        (WebCore::QuickLookHandleClient::didReceiveDataArray):
        (WebCore::QuickLookHandleClient::didReceiveData):
        (WebCore::QuickLookHandleClient::didFinishLoading):
        (WebCore::QuickLookHandleClient::didFail):

2014-04-10  Pratik Solanki  <psolanki@apple.com>

        Move early return out of dispatch_async() block so we can return from willSendRequest quickly
        https://bugs.webkit.org/show_bug.cgi?id=131478
        <rdar://problem/16575535>

        Reviewed by Alexey Proskuryakov.

        Do a quick check to see if we need to synthesize the redirect response on the dispatch queue
        and return from willSendRequest callback quickly instead of always doing an effectively synchronous
        call to the main thread. We can't call synthesizeRedirectResponseIfNecessary on the dispatch
        queue since that accesses the ResourceRequest.

        No new tests because no change in functionality.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest): Save the
        request scheme to use later for early return from willSendRequest.
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):

2014-04-08  Oliver Hunt  <oliver@apple.com>

        Rewrite Function.bind as a builtin
        https://bugs.webkit.org/show_bug.cgi?id=131083

        Reviewed by Geoffrey Garen.

        Switch WebCore to use the helper functions when defining the
        prototype properties on DOM constructors, and update bindings
        tests accordingly.

        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::finishCreation):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::finishCreation):

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

        [iOS WK2] Hook up scrolling tree nodes when coming out of the page cache
        https://bugs.webkit.org/show_bug.cgi?id=131577

        Reviewed by Tim Horton.

        The call to scrollingCoordinator->frameViewRootLayerDidChange() was inside
        a #if !PLATFORM(IOS) block, but now that we use the ScrollingCoordinator
        for WK2 we want to call this.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):

2014-04-13  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix after r167196.

        * platform/RemoteCommandListener.cpp:
        (WebCore::RemoteCommandListener::create): Fall back to using the new operator
        for allocating RemoteCommandListener object. Using std::make_unique() requires
        for the operator to be public, which doesn't work well with the static create()
        method.

2014-04-13  Zan Dobersek  <zdobersek@igalia.com>

        Remove unnecessary uses of std::move() in return statements
        https://bugs.webkit.org/show_bug.cgi?id=131457

        Reviewed by Darin Adler.

        Don't use std::move() in return statements unless necessary as it inhibits
        named return value optimizations as performed by compilers.

        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::create):
        * html/FormController.cpp:
        (WebCore::FormController::createSavedFormStateMap):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        * platform/RemoteCommandListener.cpp:
        (WebCore::RemoteCommandListener::create):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListener::create):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupFilters):
        * rendering/style/CounterDirectives.cpp:
        (WebCore::clone):

2014-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167168 and r167194.
        https://bugs.webkit.org/show_bug.cgi?id=131589

        Caused massive ASSERTION failures on the GTK Debug bot
        (Requested by philn on #webkit).

        Reverted changesets:

        "[GTK] Add HighDPI support for non-accelerated compositing
        contents"
        https://bugs.webkit.org/show_bug.cgi?id=131562
        http://trac.webkit.org/changeset/167168

        "Unreviewed. Fix GTK+ build with recent cairo and GTK+ after
        r167168."
        http://trac.webkit.org/changeset/167194

2014-04-13  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [GStreamer] No CORS support for media elements
        https://bugs.webkit.org/show_bug.cgi?id=99037

        Reviewed by Philippe Normand.

        Added CORS access control check to media sources when crossorigin attribute is set.

        Added getter to CORS access control check status (used to compute whether the stream is tainted or not).
        Related test is http/tests/security/video-cross-origin-readback.html.

        Disabled access to cross-origin streams that fail CORS check when crossorigin attribute is set.
        Related test is http/tests/security/video-cross-origin-accessfailure.html.

        Tests: http/tests/security/video-cross-origin-accessfailure.html
               http/tests/security/video-cross-origin-accesssameorigin.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::didPassCORSAccessCheck): Return whether media is cross-origin (tainted) or not by querying the gstreamer source layer.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Added MediaPlayerPrivateGStreamer::didPassCORSAccessCheck declaration.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart): Passed CORS mode parameter to the streaming client. In case of CORS check failure, stop the resource loading.
        (webKitSrcPassedCORSAccessCheck): Return whether CORS access control check was done and successful.
        (StreamingClient::handleResponseReceived): Take a parameter to assign the CORS access control check result.
        (CachedResourceStreamingClient::CachedResourceStreamingClient): Updated setting of the ResourceLoaderOptions according CORS mode.
        (CachedResourceStreamingClient::responseReceived): Check CORS and pass result to handleResponseReceived.
        (ResourceHandleStreamingClient::didReceiveResponse): No CORS check.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h: Added webKitSrcPassedCORSAccessCheck declaration.

2014-04-12  Darin Adler  <darin@apple.com>

        REGRESSION (r166860): ASSERTION FAILED: !isCalculated() on fast/css/image-set-value-not-removed-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=131480

        Reviewed by Andreas Kling.

        Fixes intermittent assertion failure in fast/css/image-set-value-not-removed-crash.html.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForImageSliceSide): Added. Helper used below in valueForNinePieceImageSlice.
        Handles calculated values by returning 0; incorrect but predictable.
        (WebCore::valueForNinePieceImageSlice): Updated to call valueForImageSliceSide.
        (WebCore::positionOffsetValue): Use nullptr.
        (WebCore::ComputedStyleExtractor::propertyValue): Updated to call positionOffsetValue
        by its new name. Removed "get" from the name.
        (WebCore::positionOffsetValue): Renamed from getPositionOffsetValue.

        * platform/Length.h: Made isCalculated public.

2014-04-12  Andy Estes  <aestes@apple.com>

        Fix the iOS build after r167183.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):

2014-04-12  Andy Estes  <aestes@apple.com>

        [iOS] Move QuickLookHandle from ResourceLoader to WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=131580

        Reviewed by Darin Adler.

        There's no need to bloat WebKit1's ResourceLoader with a pointer that
        only WebKit2's WebResourceLoader cares about.

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::quickLookHandle): Deleted.
        (WebCore::ResourceLoader::setQuickLookHandle): Deleted.

2014-04-12  Chris Fleizach  <cfleizach@apple.com>

        AX: Cleanup AccessibilityObject::getAttribute
        https://bugs.webkit.org/show_bug.cgi?id=131555

        Reviewed by Darin Adler.

        No new functionality.

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

2014-04-12  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [SOUP] Libsoup internal credential setting should be controlled by loader decision
        https://bugs.webkit.org/show_bug.cgi?id=130963

        Reviewed by Darin Adler.

        Disabled libsoup internal authentication manager for messages for which no credential is available and no stored credentials should be used.
        Updated synchronous loader to return whether using credentials or not according StoredCredential loader option parameter.
        Unskipped test http/tests/xmlhttprequest/cross-origin-no-authorization.html covers the patch.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Added m_useAuthenticationManager boolean to control whether disable authentication manager or not.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader): Added m_storedCredentials member.
        (WebCore::WebCoreSynchronousLoader::shouldUseCredentialStorage): Return true if stored credentials are allowed.
        (WebCore::applyAuthenticationToRequest): Set m_useAuthenticationManager value to disable authentication manager if cannot use stored credentials and ResourceHandleInternal has no username and password.
        (WebCore::createSoupMessageForHandleAndRequest): Disable authentication mananger according m_useAuthenticationManager value.
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Added StoredCredentials loader option to the sync loader constructor.

2014-04-11  Darin Adler  <darin@apple.com>

        Some small loader refinements and refactoring
        https://bugs.webkit.org/show_bug.cgi?id=131541

        Reviewed by Alexey Proskuryakov.

        Cut down on use of ResourceLoader::handle, which always returns null when
        using a network process. Also streamlined conditionals and did some other
        small refactoring.

        * loader/DocumentLoader.h: Use references rather than pointers for SchedulePair.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didChangePriority): Use m_handle instead of handle(),
        since we'd like to delete handle() entirely soon.
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge): Ditto.
        (WebCore::ResourceLoader::schedule): Added.
        (WebCore::ResourceLoader::unschedule): Ditto.
        * loader/ResourceLoader.h: Rearranged header to eliminate nested conditionals.
        Added schedule and unschedule functions for Mac.

        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::scheduleAll): Changed to take a reference and call ResourceLoader::schedule.
        (WebCore::unscheduleAll): Ditto.
        (WebCore::DocumentLoader::schedule): Ditto.
        (WebCore::DocumentLoader::unschedule): Ditto.

        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair): Pass a reference rather than a pointer to schedule.
        (WebCore::Page::removeSchedulePair): Ditto.

        * platform/network/ResourceHandle.h: Did a bit of reformatting and reorganizing of
        conditionals.

        * platform/network/ResourceHandleInternal.h: Removed a tiny bit of unneeded declaration.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::schedule): Updated to take a reference rather than a pointer.
        (WebCore::ResourceHandle::unschedule): Ditto.

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

        Make NodeList.length inline-cacheable by JSC.
        <https://webkit.org/b/131579>

        For objects with custom index or name getters, we have to make sure
        that builtin properties take precedence. We do this by scanning the
        ancestor chain for a suitable property slot before moving on to
        named items.

        With this patch, we now mark such builtins as cacheable. This is
        safe since the whole point of doing this before processing named
        items is to ensure the same slot is returned consistently.

        Reviewed by Benjamin Poulain.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        Lots of compositing test failures after r167152
        https://bugs.webkit.org/show_bug.cgi?id=131574

        Reviewed by Simon Fraser.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):
        We were asking the parent's client whether the child should be dumped,
        but really the child's client is the one who should decide.

2014-04-11  Benjamin Poulain  <bpoulain@apple.com>

        ViewportConfiguration::layoutWidth() compute the width incorrectly when initial-scale+width do not fit in view
        https://bugs.webkit.org/show_bug.cgi?id=131575

        Reviewed by Enrica Casucci.

        I made a mistake when writing the new viewport code: ViewportConfiguration::layoutWidth() uses m_contentSize in one place.
        That make no sense, contentSize depends on the layout width.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::layoutWidth):

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

        Remove "numeric index getter" stuff from bindings code generator.
        <https://webkit.org/b/131565>

        This was used for an earlier generation of typed arrays. Now that JSC
        has native typed array support, we're not using this functionality and
        can just remove it.

        Reviewed by Geoffrey Garen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (HasComplexGetOwnProperty):
        (InterfaceRequiresAttributesOnInstance):
        (InstanceOverridesGetOwnPropertySlot):
        (GenerateHeader):
        (GenerateImplementation):

2014-04-11  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: consolidate decoding macros used in SerializationMethods
        https://bugs.webkit.org/show_bug.cgi?id=131564

        Reviewed by Timothy Hatcher.

        We can use EncodingTraits<T>::DecodedType to create a local variable
        with the appropriate decoded type, rather than special casing.

        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<NondeterministicInputBase>::decodeValue):
        (JSC::EncodingTraits<KeypressCommand>::decodeValue):
        (JSC::EncodingTraits<PlatformKeyboardEvent>::decodeValue):
        (JSC::EncodingTraits<PlatformMouseEvent>::decodeValue):
        (JSC::EncodingTraits<PlatformWheelEvent>::decodeValue):
        (JSC::EncodingTraits<PluginData>::decodeValue):

2014-04-11  Beth Dakin  <bdakin@apple.com>

        Need WK2 API to disable rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=131567

        Reviewed by Simon Fraser.

        Page will now store a vertical and horizontal ScrollElasticity in case the API has 
        been called before the FrameView even exists.

        New Page functions.
        * WebCore.exp.in:

        Use Page’s cached ScrollElasticity.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

        If there is already a FrameView, then assign it the new ScrollElasticity.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setVerticalScrollElasticity):
        (WebCore::Page::setHorizontalScrollElasticity):
        * page/Page.h:
        (WebCore::Page::verticalScrollElasticity):
        (WebCore::Page::horizontalScrollElasticity):

2014-04-11  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(167145): Many media tests fail
        https://bugs.webkit.org/show_bug.cgi?id=131569

        Reviewed by Brent Fulgham.

        * PlatformGTK.cmake: Add the localized strings file to the list of user agent scripts.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::mediaControlsScript): Include the localized strings file in the script body.

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Find-in-page indicator
        https://bugs.webkit.org/show_bug.cgi?id=131510
        <rdar://problem/16547777>

        Reviewed by Simon Fraser and Enrica Casucci.

        * editing/Editor.cpp:
        (WebCore::Editor::findString):
        * editing/FindOptions.h:
        Add a find option which prevents WebCore from revealing the selection
        after selecting a successful find match.

2014-04-11  Owen Taylor  <otaylor@redhat.com>

        [GTK] Add HighDPI support for non-accelerated compositing contents
        https://bugs.webkit.org/show_bug.cgi?id=131562

        Reviewed by Martin Robinson.

        No new tests. This will be tested once we have the proper dependencies in the WebKit testing
        JHBuild.

        * platform/cairo/WidgetBackingStore.h:
        (WebCore::WidgetBackingStore::WidgetBackingStore): Accept a device scale argument.
        * platform/cairo/WidgetBackingStoreCairo.cpp: Use the device scale argument to make the surface the proper size and set the surface device scale.
        * platform/cairo/WidgetBackingStoreCairo.h: Accept a device scale argument.
        * platform/graphics/cairo/CairoUtilities.cpp: Add a new helper to set the device scale if Cairo built against is new enough.
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/gtk/GtkVersioning.h: Add the HAVE_GTK_SCALE_FACTOR macro.
        * platform/gtk/WidgetBackingStoreGtkX11.cpp: Use the device scale argument to make the surface the proper size and set the surface device scale.
        * platform/gtk/WidgetBackingStoreGtkX11.h: Accept a device scale argument.

2014-04-11  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure changing select element size during focus event
        dispatch
        <https://bugs.webkit.org/show_bug.cgi?id=131566>
        <rdar://problem/16400735>

        Reviewed by Andy Estes.

        Test: fast/forms/select-change-size-during-focus.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Adopt the fix from Chromium r171216; check that the renderer is still
        of the expected type, and return early if it is not.

2014-04-11  Bem Jones-Bey  <bjonesbe@adobe.com>

        Clear sibling floats while splitting inline flow
        https://bugs.webkit.org/show_bug.cgi?id=130905

        Reviewed by David Hyatt.

        This is a port of a Blink patch by kenrb@chromium.org.
        (https://src.chromium.org/viewvc/blink?revision=169658&view=revision)

        During RenderInline::splitFlow(), floats are cleared on an anonymous
        containingBlock() for the inline being split. This is a problem if
        siblings of the block contain references to the same floats, since the
        float removal code in markSiblingsWithFloatsForLayout() will not later
        find them.

        This change also affects RenderBlock::splitFlow() and
        RenderBoxModelObject::moveChildrenTo, since those are called in
        similar situations as RenderInline::splitFlow().

        Test: fast/block/float/split-inline-sibling-of-float-crash.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::removeFloatingObjects): Add call to
            markSiblingsWithFloatsForLayout() before removing floats.

2014-04-11  Gavin Barraclough  <baraclough@apple.com>

        Rollout - Rewrite Function.bind as a builtin
        https://bugs.webkit.org/show_bug.cgi?id=131083

        Unreviewed.

        Rolling out r167020 while investigating a performance regression.

        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::finishCreation):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::finishCreation):

2014-04-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Build Fix after r167151.

        Unreviewed.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):

2014-04-10  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] Using KeySession.update([renew]) should trigger KeyMessage event instead of NeedKey event
        https://bugs.webkit.org/show_bug.cgi?id=131527

        Reviewed by Eric Carlson.

        Rather than triggering a needKey() event, necessatating the creation
        of an entirely new MediaKeySession, cause a new key request to be
        created by sending the same initData back into the AVSampleDataParser.

        Also, do some drive-by clean up suggested by Darin in the review for
        r166509.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::isEqual): Support an alloc-free equality check between
            Uint8Array and static strings.
        (WebCore::CDMSessionMediaSourceAVFObjC::update):

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

        Build fix (r167151): Do not dereference Node::document() before passing to Range::create()
        <https://webkit.org/b/131475>

        Fixes the following build failure:

            WebCore/editing/AlternativeTextController.cpp:275:71: error: indirection requires pointer operand ('WebCore::Document' invalid)
                int paragraphStartIndex = TextIterator::rangeLength(Range::create(*rootNode.document(), &rootNode, 0, paragraphRangeContainingCorrection.get()->startContainer(), paragraphRangeContainingCorrection.get()->startOffset()).get());
                                                                                  ^~~~~~~~~~~~~~~~~~~~

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        Remove unneeded '*' operator since Node::document() returns a
        Document& and Range::create() accepts a Document& for its first
        argument.

2014-04-11  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: memoize nondeterministic attributes of the Navigator interface
        https://bugs.webkit.org/show_bug.cgi?id=131340

        Reviewed by Timothy Hatcher.

        Most attributes of window.navigator do not change very often, but they
        could be easily changed by the user or embedder. So, memoize attribute values.

        This change does not include navigator.mimeTypes and navigator.plugins,
        which will be handled at a different level. <https://webkit.org/b/131341>

        Test: ManualTests/inspector/replay-window-navigator-basic.html

        * page/Navigator.idl: Add Nondeterministic attribute.

2014-04-10  Jer Noble  <jer.noble@apple.com>

        [iOS][WK2] Videos should animate into and out of fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=131497

        Reviewed by Simon Fraser.

        Use AVPlayerViewController's new enterFullScreenWithCompletionHandler: and exitFullScreenWithCompletionHandler:
        methods to animate into and out of full screen. To do so, use the provided initialFrame and finalFrame screen
        rects to correctly place the AVPlayerViewController's view before entering or exiting fullscreen.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:]): Pass the media element's screen rect.
        (-[WebVideoFullscreenController exitFullscreen]): Ditto.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController playerViewController:shouldExitFullScreenWithReason:]): Renamed from shouldDismissWithReason.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Use the new AVKit APIs.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Ditto.
        * WebCore.exp.in: Modify the exported symbols for enter and exitFullscreen.

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        Support document-relative and custom-frame page overlays
        https://bugs.webkit.org/show_bug.cgi?id=131560
        <rdar://problem/16595556>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer):
        * rendering/RenderLayerCompositor.h:
        Add the concept of a document overlay layer, which is plugged in as the
        last child of the root content layer. Expose it to WebKit2.

2014-04-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Autocorrection causes ASSERT when replacing alternative string
        https://bugs.webkit.org/show_bug.cgi?id=131475

        Reviewed by Ryosuke Niwa.

        In AlternativeTextController::applyAlternativeTextToRange(), we attempt to create
        a Range that crosses from outside of a shadow root to inside of one. Instead,
        we should keep the Range entirely within the shadow root.

        Test: ManualTests/autocorrection/autocorrection-accept-crash.html

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):

2014-04-11  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-outside from image doesn't load properly
        https://bugs.webkit.org/show_bug.cgi?id=131491

        Reviewed by Bem Jones-Bey.

        Make RenderImage::imageChanged() call super if there's a shape-outside
        image because the shape-outside imageChanged() logic is in RenderBox.

        Test: http/tests/css/shape-image-file.html

        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasShapeOutside):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):

2014-04-11  Brady Eidson  <beidson@apple.com>

        Aggregate multiple "respondToChangedSelection" calls to one scan for telephone numbers
        https://bugs.webkit.org/show_bug.cgi?id=131559

        Reviewed by Gavin Barraclough.

        No new tests (Perf-only change to an untested feature)

        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        (WebCore::Editor::respondToChangedSelection): Start a one shot timer for scanSelectionForTelephoneNumbers
          instead of scanning synchronously.
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        * editing/Editor.h:

2014-04-11  Antti Koivisto  <antti@apple.com>

        Try to fix windows build.
        
        * platform/graphics/ca/GraphicsLayerCA.h:

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

        Unreviewed follow-up for r167145

        * English.lproj/mediaControlsLocalizedStringsiOS.js:
        (mediaControlsLocalizedStringsiOS): Use smart-quote in
        message string.

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

        Regression: media controls and status messages are no longer localized.
        https://bugs.webkit.org/show_bug.cgi?id=120956

        Reviewed by Jer Noble.

        * English.lproj/mediaControlsLocalizedStrings.js: Added.
        (mediaControlsLocalizedStrings): Moved from mediaControlsApple.js.
        * English.lproj/mediaControlsLocalizedStringsiOS.js: Added.
        (mediaControlsLocalizedStringsiOS): Moved from mediaControlsiOS.js.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.UIString): Get strings from external file.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.UIString): Ditto.
        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd: Copy to Windows bundle.
        * WebCore.xcodeproj/project.pbxproj: Copy new files to bundle.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript): Load the locale-specific
        string resource when loading the media controls.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsScript): Ditto.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::mediaControlsScript): Ditto.

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

        [Win] Build fix after r167138

        * platform/graphics/ca/GraphicsLayerCA.h: The TileController is
        only available on Mac/Cocoa builds.

2014-04-11  Mark Lam  <mark.lam@apple.com>

        JSMainThreadExecState::call() should clear exceptions before returning.
        <https://webkit.org/b/131530>

        Reviewed by Geoffrey Garen.

        Test: fast/dom/regress-131530.html

        Previously, JSMainThreadExecState::call() did not clear any pending
        exceptions in the VM before returning.  On returning, the
        JSMainThreadExecState destructor may re-enter the VM to notify
        MutationObservers.  This may result in a crash because the VM expects
        exceptions to be cleared at entry.

        We now change JSMainThreadExecState::call() to return the exception
        (if present) via an argument, and clear it from the VM before returning.

        As part of this change, I updated various parts of the code base to use the
        new API as needed.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        - Assert that there's no unhandled exception after the Microtask returns.
          See comment for WebCore::JSMainThreadExecState::runTask below for more
          details.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        - Document.open() cannot be the first function on the JS stack.  Hence,
          there is no need to use JSMainThreadExecState to call into the VM, as
          this is only needed to catch the event of returning from the first
          function for the purpose of notifying MutationObservers.  Change to
          call JSC::call() directly.

        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::functionCallHandlerFromAnyThread):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::call):
        (WebCore::JSMainThreadExecState::evaluate):
        - Remove the explicitly acquisition of the JSLock here because we now
          acquire the JSLock as part of the JSMainThreadExecState instance.
        (WebCore::JSMainThreadExecState::runTask):
        - Added an assert to verify that the task does not return with an
          unhandled exception.  Currently, the only Microtask in use is for the
          Promise implementation, which will eat the exception before returning.
          This assertion is added here to verify that this contract does not
          inadvertantly change in the future.
        (WebCore::JSMainThreadExecState::JSMainThreadExecState):
        - Now acquires the JSLock as well since by definition, we're only
          instantiating the JSMainThreadExecState because we're about to enter
          the VM.

        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        - acceptNode() is only used in the TreeWalker and NodeIterator APIs which
          cannot be the first function on the JS stack.  Hence, we should call
          JSC::call() directly instead of going through JSMainThreadExecState.

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):

2014-04-11  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: CodeGeneratorJS should guard includes of replay-related headers
        https://bugs.webkit.org/show_bug.cgi?id=131407

        Reviewed by Timothy Hatcher.

        This patch adds guards to headers that are only required by generated replay code
        that is itself guarded. Other ports probably haven't added the headers to their
        build files, so we don't want to emit the unused header includes.

        This patch also converts generated uses of DEFINE_STATIC_LOCAL to NeverDestroyed<T>.
        Finally, a new bindings test was added to document changes to generated replay code.

        Test: Source/WebCore/bindings/scripts/test/TestNondeterministic.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateImplementationFunctionCall):

        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.symbols: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministicPrivate.h: Added.
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp: Added.
        * bindings/scripts/test/JS/JSTestNondeterministic.h: Added.
        * bindings/scripts/test/ObjC/DOMTestNondeterministic.h: Added.
        * bindings/scripts/test/ObjC/DOMTestNondeterministic.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h: Added.
        * bindings/scripts/test/TestNondeterministic.idl: Added.

2014-04-11  Antti Koivisto  <antti@apple.com>

        Pipe initial scale factor to TileController
        https://bugs.webkit.org/show_bug.cgi?id=131521

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setZoomedOutPageScaleFactor):
        * page/Page.h:
        (WebCore::Page::zoomedOutPageScaleFactor):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::zoomedOutPageScaleFactor):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsScale):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::setContentsScale):
        (WebCore::TileController::setZoomedOutContentsScale):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::zoomedOutPageScaleFactor):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::zoomedOutPageScaleFactor):
        * rendering/RenderLayerCompositor.h:

2014-04-10  Chris Fleizach  <cfleizach@apple.com>

        Heap-use-after-free in WebCore::SpeechSynthesisUtterance::startTime
        https://bugs.webkit.org/show_bug.cgi?id=131482

        Reviewed by David Kilzer.

        Hold onto the utterance until it has time to fire, in case other references have been removed.

        Merged from Blink r171077 by <dmazzoni@chromium.org>

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-gc-utterance-crash.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::handleSpeakingCompleted):

2014-04-11  Zan Dobersek  <zdobersek@igalia.com>

        Avoid Vector copies in RenderGrid::placeItemsOnGrid()
        https://bugs.webkit.org/show_bug.cgi?id=131452

        Reviewed by Sergio Villar Senin.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid): Take in a const reference to the
        Vector object. Make the for-loop that iterates through it range-based.
        (WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid): Ditto.
        * rendering/RenderGrid.h:

2014-04-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove shared PageScriptDebugServer, create per-Page
        https://bugs.webkit.org/show_bug.cgi?id=131523

        Reviewed by Timothy Hatcher.

        Having a shared PageScriptDebugServer was causing issues when we called
        JSC::Debugger::clearBreakpoints() closing one inspector while another
        is open for another WebCore::Page in the same process. Having the same
        JSC::Debugger underlying multiple InspectorDebuggerAgent instances
        means that when clearBreakpoints is called, the real JSC breakpoints
        underlying other InspectorDebuggerAgent's get removed. When those
        InspectorDebuggerAgents attempt to remove their breakpoints they
        encounter unexpected issues.

        This entirely rebuilds PageScriptDebugServer to be per-Page instead
        of shared across all pages. So take this opportunity to move the
        file from WebCore/bindings/js to WebCore/inspector.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/PageScriptDebugServer.h: Removed.
        * inspector/InspectorAllInOne.cpp:
        Move PageScriptDebugServer.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        Set the ScriptDebugServer directly on some other agents that
        were previously using the global debug server.

        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::scriptDebugServer):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::setScriptDebugServer):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend): Deleted.
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::setPageScriptDebugServer):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        Refactor these two agents to take in a script debug server.
        The server is expected to be set during initialization and
        to always be valid (like debug server on RuntimeAgent).

        * inspector/PageDebuggerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::scriptDebugServer):
        Have PageDebuggerAgent hold the PageScriptDebugServer.
        Update for the simplified interfaces.

        * inspector/PageScriptDebugServer.h: Added.
        * inspector/PageScriptDebugServer.cpp: Renamed from Source/WebCore/bindings/js/PageScriptDebugServer.cpp.
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didPause):
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::PageScriptDebugServer::runEventLoopWhilePausedInternal):
        (WebCore::PageScriptDebugServer::isContentScript):
        (WebCore::PageScriptDebugServer::reportException):
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        Model after JSGlobalObjectScriptDebugServer, the PageScriptDebugServer
        holds a reference to a Page.

2014-04-11  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] inset args and radial args should serialize to the simplest form
        https://bugs.webkit.org/show_bug.cgi?id=129825

        Reviewed by Dirk Schulze.

        Modify inset serialization to omit components where possible. The insets simplify
        according to the margin shorthand, while the corner radii simplify according to
        the border-radius shorthand.

        Modifying existing parsing tests.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildInsetRadii): Add the necessary radii, omitting components where possible.
        (WebCore::buildInsetString): Omit components where possible.

2014-04-11  Praveen R Jadhav  <praveen.j@samsung.com>

        "playbackTime" parameter is not present in AudioProcessingEvent Interface as per W3C spec
        https://bugs.webkit.org/show_bug.cgi?id=105518

        Reviewed by Jer Noble.

        Attribute "playbackTime" in AudioProcessingEvent implemented to pass playback time of
        audiobuffer associated with ScriptProcessorNode of the context.
 
        Reference: https://codereview.chromium.org/210973002

        Spec: http://www.w3.org/TR/webaudio/#AudioProcessingEvent

        Test: webaudio/audioprocessingevent.html

        * Modules/webaudio/AudioProcessingEvent.cpp:
        (WebCore::AudioProcessingEvent::create):
        (WebCore::AudioProcessingEvent::AudioProcessingEvent):
        * Modules/webaudio/AudioProcessingEvent.h:
        (WebCore::AudioProcessingEvent::playbackTime):
        * Modules/webaudio/AudioProcessingEvent.idl:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::fireProcessEvent):

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

        Subpixel rendering: WK1: Trail of cruft in redraw during animations.
        https://bugs.webkit.org/show_bug.cgi?id=131525

        Reviewed by Simon Fraser.

        Use enclosing rect instead of snapping to make sure the repaint rect always
        covers the dirty area when painting is requested in a non-compositing RenderView.
        This only applies to WK1 as WK2 has compositing RenderView and the repainting 
        is managed by RenderLayerBacking.

        This is a temporary solution until after ScrollView/FrameView/RenderView
        is transitioned to device pixels. (tracked here: webkit.org/b/131526).

        Test: fast/repaint/hidpi-block-width-change-leaves-cruft.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2014-04-10  Dean Jackson  <dino@apple.com>

        WebGL: need error checking after texture uploads
        https://bugs.webkit.org/show_bug.cgi?id=62902
        rdar://problem/9640309

        Reviewed by Brent Fulgham.

        A followup to Darin's r167109. We need to also check for errors
        in the texImage2D case.

        This is difficult to reproducibly test because it would require
        attempting to exhaust GPU memory.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Check for errors by calling
        moveErrorsToSyntheticErrorList twice, once before and once after. If an error
        occurred, explicitly mark the texture as invalid.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::markInvalid): If the LevelInfo exists for this
        mipmap level, then set the valid flag to false. There is a chance that
        a previous call to texImage2D succeeded for this level, but it's probably
        better to assume that is now invalid.
        * html/canvas/WebGLTexture.h: New markInvalid method.

2014-04-10  Darin Adler  <darin@apple.com>

        WebGL: need error checking after texture and buffer uploads in some cases
        https://bugs.webkit.org/show_bug.cgi?id=62902
        rdar://problem/9640309

        Reviewed by Dean Jackson.

        Not clear how to write a test for this.

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::disassociateBufferData): Added.
        * html/canvas/WebGLBuffer.h: Added disassociateBufferData.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bufferData): Check for errors by calling
        moveErrorsToSyntheticErrorList twice, once before and once after. If an error
        occurred, call the WebGLBuffer so it doesn't think it has data.
        (WebCore::WebGLRenderingContext::bufferSubData): Ditto.

        * platform/graphics/GraphicsContext3D.h: Added moveErrorsToSyntheticErrorList.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::moveErrorsToSyntheticErrorList): Added. Calls
        glError and moves any errors to the synthetic error list.
        (WebCore::GraphicsContext3D::getError): Added call to moveErrorsToSyntheticErrorList
        to preserve error ordering.
        (WebCore::GraphicsContext3D::synthesizeGLError): Ditto.

2014-04-10  Enrica Casucci  <enrica@apple.com>

        iOS build fix to deal with CoreText changes.
        
        Reviewed by Benjamin Poulain.
        
        This is a temporary fix until CT fixes the issue.

        * rendering/RenderThemeIOS.mm:

2014-04-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167073.
        https://bugs.webkit.org/show_bug.cgi?id=131516

        This patch caused crashes in video tests. (Requested by
        mrobinson on #webkit).

        Reverted changeset:

        "[GStreamer] No CORS support for media elements"
        https://bugs.webkit.org/show_bug.cgi?id=99037
        http://trac.webkit.org/changeset/167073

2014-04-10  Beth Dakin  <bdakin@apple.com>

        Radio buttons are using the wrong sizes and margins
        https://bugs.webkit.org/show_bug.cgi?id=131503

        Reviewed by Jer Noble.

        This is a regression that I caused recently when I combined radio button and 
        checkbox code. 
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton):

2014-04-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure in WebCore::FlexBoxIterator::next()
        <https://bugs.webkit.org/show_bug.cgi?id=117176>
        <rdar://problem/14054549>

        Code added in r115687 began removing anonymous wrappers when children
        become inline. However, there are some objects, like
        RenderDeprecatedFlexBox, whose children should always be blocks.

        Reviewed by Tim Horton.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::canCollapseAnonymousBlockChild):
        Made public.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeAnonymousWrappersForInlinesIfNecessary):
        Return early if we can't collapse anonymous block children.

2014-04-07  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure, !node || node->isElementNode(), in
        WebCore::RenderBlock::clone()
        <https://bugs.webkit.org/show_bug.cgi?id=110489>
        <rdar://problem/13666425>

        Reviewed by Antti Koivisto.

        We're ending up in RenderBlock::splitBlocks() with |this| ==
        |fromBlock|.  We then try to climb the ancestor block chain from
        this->parent() to |fromBlock|, but this->parent() is already above
        |fromBlock|, so we end up climbing up to the RenderView and trying to
        clone it, causing the assertion failure.

        Adopt Chromium's mitigation for this from
        <https://codereview.chromium.org/13852041>. This is not intended as a
        fix for the underlying issue.

        Also, fix another issue that occurs with this fuzzed test case that's
        not handled by the Chromium fix.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitBlocks):
        Ensure while we're in the loop that |curr| is a descendant of
        |fromBlock|. From the Chromium patch:

            We need to check in every iteration of the loop because
            moveChildrenTo could have moved |curr|. This is a mitigation and
            not really a fix against a class of tree craziness.

        Finally, before moving children from |fromBlock| to |toBlock|, ensure
        that the children are children of |fromBlock|. If we never entered the
        loop, they will be siblings of |fromBlock|, not children.

2014-04-10  Enrica Casucci  <enrica@apple.com>

        Build fix after http://trac.webkit.org/changeset/167085.

        Reviewed by Timothy Hatcher.

        * plugins/PluginData.h:

2014-04-10  Zalan Bujtas  <zalan@apple.com>

        Web Inspector: Breakpoint in gutter has clipped / broken border image.
        https://bugs.webkit.org/show_bug.cgi?id=131500

        Reviewed by Joseph Pecoraro.

        Typo in r166925.

        Test: fast/borders/border-image-slice-missing-right.html

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

2014-04-10  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: expose aria-busy state of current and ancestor nodes
        https://bugs.webkit.org/show_bug.cgi?id=130826

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        Expose if node is contained by any "busy" ancestor nodes, too.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2014-04-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused ruler in overlay code
        https://bugs.webkit.org/show_bug.cgi?id=131507

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForHighlight):
        * inspector/InspectorOverlay.h:
        (WebCore::Highlight::Highlight):
        (WebCore::Highlight::setDataFromConfig):
        * inspector/InspectorOverlayPage.js:
        (_drawFragmentHighlight):
        (_drawRegionNumber): Deleted.
        (quadToPath): Deleted.
        (drawOutlinedQuad): Deleted.
        (pathCommand): Deleted.
        (drawPath): Deleted.
        (drawOutlinedQuadWithClip): Deleted.
        (quadEquals): Deleted.
        (drawGutter): Deleted.
        (drawNodeHighlight): Deleted.
        (drawQuadHighlight): Deleted.
        (setPlatform): Deleted.
        (dispatch): Deleted.
        (log): Deleted.

2014-04-10  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: memoize plugin data for navigator.mimeTypes and navigator.plugins
        https://bugs.webkit.org/show_bug.cgi?id=131341

        Reviewed by Timothy Hatcher.

        Information about plugins and mime types is nondeterministic and can change
        at any time, whether by system events, browser settings changes, or
        triggered by script. To avoid interposing on all those code paths, just
        memoize the plugin data used by DOMPluginArray and DOMMimeTypeArray.

        This is less efficient than controlling mutations to the underlying PluginData
        of a Page, but that can be done later if better plugin support is desired.
        The point of this change is to make analytics trackers deterministic across
        enabling/disabling of plugins.

        Test: LayoutTests/inspector/window-navigator-plugins-memoized.hml

        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::getPluginData):
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::pluginData): Save or restore memoized plugin
        data during capture and replay, respectively.

        * plugins/PluginData.h:
        (WebCore::PluginData::PluginData): Add a constructor that uses the
        provided plugin data rather than fetching live plugin data. This is
        marked protected so it's only used by a subclass specifically for
        deserialization.

        * replay/SerializationMethods.cpp: Add encoder specializations.
        (JSC::EncodingTraits<MimeClassInfo>::encodeValue):
        (JSC::EncodingTraits<MimeClassInfo>::decodeValue):
        (JSC::EncodingTraits<PluginInfo>::encodeValue):
        (JSC::EncodingTraits<PluginInfo>::decodeValue):
        (JSC::EncodingTraits<PluginData>::encodeValue):
        (JSC::DeserializedPluginData::DeserializedPluginData): Add a custom
        subclass of PluginData that can be initialized from deserialized data.
        (JSC::EncodingTraits<PluginData>::decodeValue):
        * replay/SerializationMethods.h:
        * replay/WebInputs.json: Add new input FetchPluginData.

2014-04-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove "System Font" from character width calculations
        https://bugs.webkit.org/show_bug.cgi?id=131411

        Reviewed by Tim Horton.

        Covered by existing tests

        * platform/graphics/Font.cpp:
        (WebCore::Font::hasValidAverageCharWidth):

2014-04-10  Bem Jones-Bey  <bjonesbe@adobe.com>

        Invalid cast in WebCore::RenderLayer::setupClipPath
        https://bugs.webkit.org/show_bug.cgi?id=131368

        Reviewed by Dirk Schulze.

        Only attempt to clip to a box shape if the renderer being clipped is
        actually a box.

        Test: css3/masking/clip-path-box-shape-on-inline-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Add isBox() check.

2014-04-10  Owen Taylor  <otaylor@redhat.com>

        [GTK] Remove a comment that was incorrectly cut-and-pasted from WidgetBackingStoreCairo
        https://bugs.webkit.org/show_bug.cgi?id=131499

        Reviewed by Martin Robinson.

        * platform/gtk/WidgetBackingStoreGtkX11.cpp: Remove a comment that was incorrectly copy and pasted
        from the Cairo implementation.

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Eliminate DragSession structure
        https://bugs.webkit.org/show_bug.cgi?id=131465

        Reviewed by Benjamin Poulain.

        DragSession is really just a transient response to NSDragDestination delegate methods.
        The "session" name was quite misleading, and thankfully, we don't need a class for this
        bag of data at all.

        * WebCore.xcodeproj/project.pbxproj:
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        * page/DragController.h:
        (WebCore::DragController::mouseIsOverFileInput):
        (WebCore::DragController::numberOfItemsToBeAccepted):
        * page/DragSession.h: Removed.

2014-04-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [GStreamer] No CORS support for media elements
        https://bugs.webkit.org/show_bug.cgi?id=99037

        Reviewed by Philippe Normand.

        Added CORS access control check to media sources when crossorigin attribute is set.

        Added getter to CORS access control check status (used to compute whether the stream is tainted or not).
        Related test is http/tests/security/video-cross-origin-readback.html.

        Disabled access to cross-origin streams that fail CORS check when crossorigin attribute is set.
        Related test is http/tests/security/video-cross-origin-accessfailure.html.

        Tests: http/tests/security/video-cross-origin-accessfailure.html
               http/tests/security/video-cross-origin-accesssameorigin.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::didPassCORSAccessCheck): Return whether media is cross-origin (tainted) or not by querying the gstreamer source layer.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Added MediaPlayerPrivateGStreamer::didPassCORSAccessCheck declaration.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart): Passed CORS mode parameter to the streaming client. In case of CORS check failure, stop the resource loading.
        (webKitSrcPassedCORSAccessCheck): Return whether CORS access control check was done and successful.
        (StreamingClient::handleResponseReceived): Take a parameter to assign the CORS access control check result.
        (CachedResourceStreamingClient::CachedResourceStreamingClient): Updated setting of the ResourceLoaderOptions according CORS mode.
        (CachedResourceStreamingClient::responseReceived): Check CORS and pass result to handleResponseReceived.
        (ResourceHandleStreamingClient::didReceiveResponse): No CORS check.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h: Added webKitSrcPassedCORSAccessCheck declaration.

2014-04-10  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Move UseJSC.cmake back to CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=130834

        Reviewed by Csaba Osztrogonác.

        No new tests required.

        * CMakeLists.txt:
        * UseJSC.cmake: Removed.

2014-04-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167046.
        https://bugs.webkit.org/show_bug.cgi?id=131479

        Caused 300+ failures on Mavericks WK1 tester (Requested by ap
        on #webkit).

        Reverted changeset:

        "Remove "System Font" from whitelisted DRT fonts and char
        width calculations"
        https://bugs.webkit.org/show_bug.cgi?id=131411
        http://trac.webkit.org/changeset/167046

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        Fix build failure.
        https://bugs.webkit.org/show_bug.cgi?id=131473

        Reviewed by Dan Bernstein.

        Fix build failure.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (mediaSelectionOptions):

2014-04-09  Enrica Casucci  <enrica@apple.com>

        Unreviewed build fix after http://trac.webkit.org/changeset/167045

        The file contained an invalid character.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):

2014-04-09  Dean Jackson  <dino@apple.com>

        [iOS] Media controls should resize as the user zooms
        https://bugs.webkit.org/show_bug.cgi?id=131322

        Reviewed by Eric Carlson.

        On iOS the media controls should remain the same size
        independent of user zoom. Have the HTMLMediaElement optionally
        register for updates in the page scale to apply an inverse
        scale.

        * Modules/mediacontrols/MediaControlsHost.cpp: New exposed property that calls
        back into HTMLMediaElement::mediaControlsDependOnPageScaleFactor.
        (WebCore::MediaControlsHost::controlsDependOnPageScaleFactor):
        (WebCore::MediaControlsHost::setControlsDependOnPageScaleFactor):
        * Modules/mediacontrols/MediaControlsHost.h: Keep a reference to the actual
        controls from the JavaScript side so we can talk to it later.
        (WebCore::MediaControlsHost::controllerJSValue):
        (WebCore::MediaControlsHost::setControllerJSValue):
        * Modules/mediacontrols/MediaControlsHost.idl: Expose controlsDependOnPageScaleFactor.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-panel): Specify the transform origin so that
        scaling will keep the controls pinned to the bottom left corner.
        (audio::-webkit-media-controls-start-playback-button): Update to the correct size
        and provide new artwork.
        (audio::-webkit-media-controls-start-playback-button.failed): New artwork.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS): Tell the host that these controls care about the page scale.
        (ControllerIOS.prototype.get pageScaleFactor): New getter.
        (ControllerIOS.prototype.set pageScaleFactor): When set, update the play button and the panel.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript): Small naming cleanup.
        (setPageScaleFactorProperty): Static helper to set a JS property value.
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Keep a reference to the controls object,
        and make sure to set the page scale factor on the controls.
        (WebCore::HTMLMediaElement::pageScaleFactorChanged): Implement the callback, telling
        the controls object that it needs to relayout.

2014-04-09  Antti Koivisto  <antti@apple.com>

        Try to fix iOS build.

        * platform/graphics/ca/mac/TileController.mm:

2014-04-09  Andy Estes  <aestes@apple.com>

        REGRESSION (r165908): ~QuickLookHandle() tries to dereference a null ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=131467

        Reviewed by Tim Horton.

        QuickLookHandle stored a ResourceHandle pointer in order to later
        retrive the URL of its firstRequest(), but after r165908 we no longer
        always have a ResourceHandle. Since firstRequest()'s URL is the only
        thing we need from ResourceHandle, store it directly rather than a
        ResourceHandle pointer. In the case where we create a QuickLookHandle
        from a ResourceLoader rather than a ResourceHandle, pass the loader's
        originalRequest(), which represents the same request as firstRequest()
        (i.e. the request after willSendRequest() but before redirects).

        * platform/network/ios/QuickLook.h:
        * platform/network/ios/QuickLook.mm:
        (WebCore::QuickLookHandle::QuickLookHandle):
        (WebCore::QuickLookHandle::create):
        (WebCore::QuickLookHandle::didFail):
        (WebCore::QuickLookHandle::~QuickLookHandle):

2014-04-09  James Craig  <jcraig@apple.com>

        AX: Bug in AccessibilityNodeObject::helpText
        https://bugs.webkit.org/show_bug.cgi?id=130386

        Reviewed by Chris Fleizach.

        Test: accessibility/help-text.html

        Ancestor loop was always checking attribute of original node rather than current node.

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

2014-04-09  Chris Fleizach  <cfleizach@apple.com>

        Regression: AX: list heuristics sometimes determined as presentational even when explicit roles applied
        https://bugs.webkit.org/show_bug.cgi?id=131041

        Reviewed by Mario Sanchez Prada.

        When display:table is used on a list item, it inserts RenderObjects that can be ignored as the children
        of the list. This allows normal list heuristics to be applied.

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

2014-04-09  Antti Koivisto  <antti@apple.com>

        TileGrid should be PlatformCALayerClient instead of TileController
        https://bugs.webkit.org/show_bug.cgi?id=131456
        
        Switch one more place to use removeTiles.

        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::revalidateTiles):

2014-04-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove "System Font" from whitelisted DRT fonts and char width calculations
        https://bugs.webkit.org/show_bug.cgi?id=131411

        Reviewed by Tim Horton.

        Covered by existing tests.

        * platform/graphics/Font.cpp:
        (WebCore::Font::hasValidAverageCharWidth):

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen does two view controller changes at once
        https://bugs.webkit.org/show_bug.cgi?id=131432

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        delay -presentViewController on the main run loop to allow
        previous view controller change to complete.

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        Enable fullscreen captions selection
        https://bugs.webkit.org/show_bug.cgi?id=131069

        Reviewed by Eric Carlson.

        Enable media selection options from fullscreen. i.e. captions.

        * WebCore.exp.in:
        Add exports for 
        setAudioMediaSelectionOptions
        setLegibleMediaSelectionOptions
        selectAudioMediaOption
        selectLegibleMediaOption

        * platform/ios/WebVideoFullscreenInterface.h:
        Add setAudioMediaSelectionOptions/setLegibleMediaSelectionOptions

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        Add setAudioMediaSelectionOptions/setLegibleMediaSelectionOptions

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        Add setAudioMediaSelectionOptions/setLegibleMediaSelectionOptions

        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController hasMediaSelectionOptions]):
        (+[WebAVPlayerController keyPathsForValuesAffectingHasMediaSelectionOptions]):
        (-[WebAVPlayerController hasAudioMediaSelectionOptions]):
        (+[WebAVPlayerController keyPathsForValuesAffectingHasAudioMediaSelectionOptions]):
        (-[WebAVPlayerController hasLegibleMediaSelectionOptions]):
        (+[WebAVPlayerController keyPathsForValuesAffectingHasLegibleMediaSelectionOptions]):
        (-[WebAVPlayerController currentAudioMediaSelectionOption]):
        (-[WebAVPlayerController setCurrentAudioMediaSelectionOption:]):
        (-[WebAVPlayerController currentLegibleMediaSelectionOption]):
        (-[WebAVPlayerController setCurrentLegibleMediaSelectionOption:]):
        (WebVideoFullscreenInterfaceAVKit::setAudioMediaSelectionOptions):
        (WebVideoFullscreenInterfaceAVKit::setLegibleMediaSelectionOptions):
        * platform/ios/WebVideoFullscreenModel.h:
        Add selectAudioMediaOption/selectLegibleMediaOption

        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        Add selectAudioMediaOption/selectLegibleMediaOption

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        Add selectAudioMediaOption/selectLegibleMediaOption

        (WebVideoFullscreenModelMediaElement::setMediaElement):
        Send initial media selection options.

        (WebVideoFullscreenModelMediaElement::selectAudioMediaOption):
        Will be implemented when audio track slection is implemented.

        (WebVideoFullscreenModelMediaElement::selectLegibleMediaOption):
        Select corresponding text track on HTMLMediaElement.

2014-04-09  Antti Koivisto  <antti@apple.com>

        TileGrid should be PlatformCALayerClient instead of TileController
        https://bugs.webkit.org/show_bug.cgi?id=131456

        Reviewed by Tim Horton.

        The client interface is for the tiles in the grid.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setContentsScale):
        (WebCore::TileController::createTileLayer):
        (WebCore::TileController::platformCALayerPaintContents): Deleted.
        (WebCore::TileController::platformCALayerDeviceScaleFactor): Deleted.
        (WebCore::TileController::platformCALayerShowDebugBorders): Deleted.
        (WebCore::TileController::platformCALayerShowRepaintCounter): Deleted.
        (WebCore::TileController::platformCALayerIncrementRepaintCount): Deleted.
        * platform/graphics/ca/mac/TileGrid.h:
        
            Move repaint counter to TileGrid too.

        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::removeTiles):
        (WebCore::TileGrid::removeAllSecondaryTiles):
        (WebCore::TileGrid::removeTilesInCohort):
        
           Cleaned up tile removal.

        (WebCore::TileGrid::revalidateTiles):
        (WebCore::TileGrid::ensureTilesForRect):
        (WebCore::TileGrid::platformCALayerPaintContents):
        (WebCore::TileGrid::platformCALayerDeviceScaleFactor):
        (WebCore::TileGrid::platformCALayerShowDebugBorders):
        (WebCore::TileGrid::platformCALayerShowRepaintCounter):
        (WebCore::TileGrid::platformCALayerContentsOpaque):
        (WebCore::TileGrid::platformCALayerIncrementRepaintCount):
        (WebCore::queueTileForRemoval): Deleted.

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Rename some dragging functions
        https://bugs.webkit.org/show_bug.cgi?id=131460

        Reviewed by Tim Horton.

        Renamed performDrag to performDragOperation. This function is responsible for
        accepting a drop, not for the whole drag.

        The new name is not perfect either, but I think that it's better, and at least
        it matches AppKit, like the other dragging destination functions already do.

        * WebCore.exp.in:
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::performDrag): Deleted.
        * page/DragController.h:

2014-04-08  Samuel White  <samuel_white@apple.com>

        AX: Initial text selection point should respect element focus.
        https://bugs.webkit.org/show_bug.cgi?id=131402

        Reviewed by Chris Fleizach.

        Support the case where we want to set the initial selection and there's already a focused element.

        No new tests, updated existing selection-initial to test this functionality.

        * page/EventHandler.cpp:
        (WebCore::setKeyboardSelection):
        (WebCore::handleKeyboardSelectionMovement):

2014-04-09  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLCollection::updateNamedElementCach iterates over items twice
        https://bugs.webkit.org/show_bug.cgi?id=131448

        Reviewed by Andreas Kling.

        Compute the length first and go through the cache interface to traverse through items.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::updateNamedElementCache):

2014-04-09  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Expose MPEG-TS metadata
        https://bugs.webkit.org/show_bug.cgi?id=122001

        Reviewed by Eric Carlson.

        Test: media/track/in-band/track-in-band-mpegts-metadata.html

        * CMakeLists.txt: Add InbandDataTextTrack.
        * PlatformGTK.cmake: Look for gstreamer-mpegts and use it if available.
        * WebCore.vcxproj/WebCore.vcxproj: Add InbandDataTextTrack.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * html/track/DataCue.cpp:
        (WebCore::DataCue::DataCue): Add a constructor using raw data.
        * html/track/DataCue.h:
        (WebCore::DataCue::create): Same.
        * html/track/InbandDataTextTrack.cpp: Added, InbandTextTrack which implements addDataCue().
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.h: Move unimplemented methods to InbandTextTrack.
        * html/track/InbandWebVTTTextTrack.h: Same.
        * html/track/InbandTextTrack.h: Same, and add inBandMetadataTrackDispatchType.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::create): Add constructor for InbandDataTextTrack.
        (WebCore::InbandTextTrack::inBandMetadataTrackDispatchType): Added.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::inBandMetadataTrackDispatchType): Added (empty).
        * html/track/TextTrack.idl: Add inBandMetadataTrackDispatchType.
        * platform/graphics/InbandTextTrackPrivate.h: Add inBandMetadataTrackDispatchType and Data format.
        (WebCore::InbandTextTrackPrivate::inBandMetadataTrackDispatchType):
        * platform/graphics/InbandTextTrackPrivateClient.h: Add addDataCue() method.
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::create): Allow specifying the cue format and id.
         (WebCore::InbandMetadataTextTrackPrivateGStreamer::InbandMetadataTextTrackPrivateGStreamer): Same.
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::setInBandMetadataTrackDispatchType): Added.
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::addDataCue): Added.
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::addGenericCue): Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Check for MPEG-TS sections.
        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection): Add MPEG-TS section metadata, and get inBandMetadataTrackDispatchType from the PMT.
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents): Explicitly use Generic CueFormat.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2014-04-08  Chris Fleizach  <cfleizach@apple.com>

        AX: Make AXPress much more reliable on the Web
        https://bugs.webkit.org/show_bug.cgi?id=131426

        Reviewed by Mario Sanchez Prada.

        AXPress fails when an event handler is on a node higher in the parent chain than the focused node.

        We need to make AXPress more reliable by 
            1) Using the element that is focused as the target of the event
            2) Search for the inner most control object when dispatching the event

        Updated existing accessibility/press-works-on-control-types.html

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::press):
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::press):
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::performDefaultAction):
        * accessibility/AccessibilitySearchFieldButtons.cpp:
        (WebCore::AccessibilitySearchFieldCancelButton::press):
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButtonPart::press):
        * accessibility/AccessibilitySpinButton.h:

2014-04-09  Brady Eidson  <beidson@apple.com>

        ContentFilterMac is broken when NE_FILTER_SOURCE is enabled.
        <rdar://problem/15978793> and https://bugs.webkit.org/show_bug.cgi?id=131445

        Reviewed by Andy Estes.

        No new tests (Not a tested feature).

        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::needsMoreData): Only consider m_neFilterSourceStatus if m_neFilterSource exists.
        (WebCore::ContentFilter::didBlockData): Ditto.

2014-04-08  Oliver Hunt  <oliver@apple.com>

        Rewrite Function.bind as a builtin
        https://bugs.webkit.org/show_bug.cgi?id=131083

        Reviewed by Geoffrey Garen.

        Switch WebCore to use the helper functions when defining the
        prototype properties on DOM constructors, and update bindings
        tests accordingly.

        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::finishCreation):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::finishCreation):

2014-04-09  Enrica Casucci  <enrica@apple.com>

        Unreviewed iOS build fix. Replacing deprecated enum with AVPlayerViewControllerExitFullScreenReason.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController playerViewController:shouldDismissWithReason:]):

2014-04-09  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Monolithic elements should not affect the layout of the content outside its region
        https://bugs.webkit.org/show_bug.cgi?id=130499

        Reviewed by David Hyatt.

        When performing layout on an element flowed into regions, its logical height must not be incremented 
        past the region's logical bottom for monolithic elements in regions different than the last region their containing
        block is fragmented into. This ensures that the following elements are correctly laid out 
        from the top of the next region.
        This change must also be applied to floats in order to prevent text from avoiding part
        of a float that did not actually made it into the current region, but instead overflowed
        the previous one.

        Tests: fast/regions/fragmentation-after-float-overflow-single-region.html
               fast/regions/fragmentation-after-monolithic-overflow-self-collapsed.html
               fast/regions/fragmentation-after-monolithic-overflow-single-region.html
               fast/regions/fragmentation-after-monolithic-overflow.html

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::computePlacedFloatsTree):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination):
        (WebCore::RenderBlockFlow::lowestFloatLogicalBottom):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::applyAfterBreak): Deleted.
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelow): Deleted.
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelowForBlock): Deleted.
        (WebCore::RenderBlockFlow::flipFloatForWritingModeForChild): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::isBoxInDifferentRegionsAsFloat):
        * rendering/RenderFlowThread.h:

2014-04-09  Anders Carlsson  <andersca@apple.com>

        Use std::array in AffineTransform, and get rid of setMatrix
        https://bugs.webkit.org/show_bug.cgi?id=131416

        Reviewed by Sam Weinig.

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::multiply):
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::setMatrix): Deleted.

2014-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Plugin process crashes when loading totem plugin
        https://bugs.webkit.org/show_bug.cgi?id=131357

        Reviewed by Martin Robinson.

        Remove netscape plugin implementation from WebCore that was only
        used by WebKit1. This removes the conflict between the WebCore NPN
        symbols and the ones used by the plugins.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginPackageGtk.cpp: Removed.
        * plugins/gtk/PluginViewGtk.cpp: Removed.
        * plugins/gtk/gtk2xtbin.c: Removed.
        * plugins/gtk/gtk2xtbin.h: Removed.
        * plugins/gtk/xembed.h: Removed.

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        fullscreen controls first show a play button instead of a pause button
        https://bugs.webkit.org/show_bug.cgi?id=131430

        Reviewed by Jer Noble.

        isPlaying() is false while buffering, paused() isn't; use paused() for
        the play button.

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::setMediaElement):
        (WebVideoFullscreenModelMediaElement::handleEvent):
        Use HTMLMediaElement::paused() instead of HTMLMediaElement::isPlaying()

2014-04-09  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove duplicated files and unnecessary conditions from UseJSC.cmake
        https://bugs.webkit.org/show_bug.cgi?id=131438

        Reviewed by Csaba Osztrogonác.

        No new tests required.

        * UseJSC.cmake:

2014-04-09  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Layout tests accessibility/children-changed-sends-notification.html and accessibility/notification-listeners.html fails
        https://bugs.webkit.org/show_bug.cgi?id=131380

        Reviewed by Chris Fleizach.

        Don't emit signals for added objects that we know won't be exposed
        to the accessibility hierarchy (e.g. static text).

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::attachWrapper): Add extra check and early return.

2014-04-09  Mario Sanchez Prada  <mario.prada@samsung.com>

        [AX][GTK] No new lines in some AX tests output
        https://bugs.webkit.org/show_bug.cgi?id=131294

        Reviewed by Martin Robinson.

        Do not implement Hypetext or AtkText for the WebArea. Those
        interfaces will be implemented by the containers (automatically
        generated or not) for the different parts of the DOM and the
        render subtree under this element anyway.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getInterfaceMaskFromObject): Make sure we don't apply
        WAIHypertext nor WAIText to objects with role WebAreaRole.

2014-04-08  Conrad Shultz  <conrad_shultz@apple.com>

        nil should only be used for objects
        https://bugs.webkit.org/show_bug.cgi?id=131431

        Reviewed by Chris Fleizach.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        nil -> NO.

        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController setMediaElement:]):
        nil -> 0; change a NULL to nullptr while we're here.

2014-04-08  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash when video in region exits fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=131366

        Reviewed by Andrei Bucur.

        After fix for https://bugs.webkit.org/show_bug.cgi?id=130392, we compute the region ranges
        information for inline elements collected in named flows with associated region chains.
        The algorithm for this computation, implemented in RenderFlowThread::getRegionRangeForBox,
        walks up the render tree trying to find the top-most unsplittable box under the named flow
        in the case where the region ranges information is not available.

        As this traversal works properly only when the starting box is not detached from the render tree,
        i changed the named flow information clearing in RenderBlock::collapseAnonymousBoxChild
        to occur before the child to be collapsed is removed from the render tree.

        Test: fast/regions/full-screen-video-in-region-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::getRegionRangeForBox):

2014-04-08  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed build fix for iOS (redux).

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityARIAIsBusy]):
        (-[WebAccessibilityObjectWrapper accessibilityARIALiveRegionIsAtomic]):

2014-04-08  Chris Fleizach  <cfleizach@apple.com>
 
        Unreviewed build fix for iOS.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementCount]):

2014-04-08  Antti Koivisto  <antti@apple.com>

        Factor tile coverage map into a class
        https://bugs.webkit.org/show_bug.cgi?id=131417

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerLayoutSublayersOfLayer):
        (WebCore::PlatformCALayerClient::platformCALayerRespondsToLayoutChanges):
        (WebCore::PlatformCALayerClient::platformCALayerAnimationStarted):
        (WebCore::PlatformCALayerClient::platformCALayerContentsOrientation):
        (WebCore::PlatformCALayerClient::platformCALayerShowDebugBorders):
        (WebCore::PlatformCALayerClient::platformCALayerShowRepaintCounter):
        (WebCore::PlatformCALayerClient::platformCALayerIncrementRepaintCount):
        (WebCore::PlatformCALayerClient::platformCALayerLayerDidDisplay):
        
            Added default implementation to some of these to make clients less messy.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::~TileController):
        (WebCore::TileController::platformCALayerPaintContents):
        (WebCore::TileController::setTiledScrollingIndicatorPosition):
        (WebCore::TileController::updateTileCoverageMap):
        (WebCore::TileController::tiledScrollingIndicatorLayer):
        * platform/graphics/ca/mac/TileCoverageMap.h: Added.
        (WebCore::TileCoverageMap::setPosition):
        (WebCore::TileCoverageMap::layer):
        * platform/graphics/ca/mac/TileCoverageMap.mm: Added.
        
            The new class.

        (WebCore::TileCoverageMap::TileCoverageMap):
        (WebCore::TileCoverageMap::~TileCoverageMap):
        (WebCore::TileCoverageMap::update):
        (WebCore::TileCoverageMap::platformCALayerPaintContents):
        (WebCore::TileCoverageMap::platformCALayerDeviceScaleFactor):
        * platform/graphics/ca/mac/TileGrid.h:
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::drawTileMapContents):

2014-04-08  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Clip outer rounded border rect on device pixel boundaries.
        https://bugs.webkit.org/show_bug.cgi?id=131404

        Reviewed by Simon Fraser.

        Use device pixel snapped rectangle to clip out rounded rects, when not all sides are solid/double.
        Snapping it to device pixel boundaries ensures that when we call drawRect(devicePixelSnappedRect) later,
        it leaves no cruft behind.

        Test: fast/borders/hidpi-rounded-border-on-subpixel-position.html

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

2014-04-08  Jon Lee  <jonlee@apple.com>

        Turn MSE on by default
        https://bugs.webkit.org/show_bug.cgi?id=131313
        <rdar://problem/16525223>

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig:
        * page/Settings.in: Add MEDIA_SOURCE conditional.

2014-04-08  Anders Carlsson  <andersca@apple.com>

        Remove an unused parameter from loadResource.

        Reviewed by Darin Adler.

        Since the CachedResourceRequest has the charset in it, we don't need to pass it separately to loadRequest.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::loadResource):
        * loader/cache/CachedResourceLoader.h:

2014-04-08  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed EFL build fix attempt since r166956

        * page/efl/DragControllerEfl.cpp: Rename Clipboard to DataTransfer.
        (WebCore::DragController::declareAndWriteDragImage):

2014-04-08  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r155998): Elements render at very low resolution with some 3d transforms
        https://bugs.webkit.org/show_bug.cgi?id=131412
        <rdar://problem/16525044>

        Reviewed by Tim Horton.
        
        In r155998 we started to compute a root-relative transform in order to choose
        a good contentsScale to avoid blurring on scaling.
        
        However, the code failed to update this transform when passing over
        GraphicsLayerCAs with no uncommitted changes, which caused us to choose
        an incorrect contentsScale sometimes, resulting in blurriness.
        
        Fix by updating the root-relative transform on layers with no uncommitted
        changes.

        Test: compositing/contents-scale/incremental-change.html

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

2014-04-08  Anders Carlsson  <andersca@apple.com>

        Don't call CGPathAddPath with invalid CGAffineTransform objects
        https://bugs.webkit.org/show_bug.cgi?id=131413
        <rdar://problem/16399645>

        Reviewed by Darin Adler.

        Covered by existing tests.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addPath):
        Don't try to add the path if the affine transform isn't invertible.

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::isInvertible):
        Handle infinite and NaN determinants.

        (WebCore::AffineTransform::inverse):
        Handle infinite and NaN determinants.

2014-04-08  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: memoize nondeterministic attributes of the Screen interface
        https://bugs.webkit.org/show_bug.cgi?id=131339

        Reviewed by Timothy Hatcher.

        The values from the screen interface are nondeterministic. Since we can't
        change the physical screen dimensions, instead memoize values of attributes.

        Test: ManualTests/inspector/replay-window-screen.html

        * page/Screen.idl: Add Nondeterministic attribute.

2014-04-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=131408
        Scrollbars layers don't dynamically update when device scale factor changes
        -and corresponding-
        <rdar://problem/16503875>

        Reviewed by Tim Horton.

        The scrollbar layers are not children of the RenderView's layer, so they were 
        completely skipped over by this function before. We need to start this higher up 
        the tree in the rootGraphicsLayer(), which will typically return the 
        m_overflowControlsHostLayer.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::deviceOrPageScaleFactorChanged):

2014-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLConverter::aggregatedAttributesForAncestors should cache intermediate results
        https://bugs.webkit.org/show_bug.cgi?id=131400

        Reviewed by Sam Weinig.

        Instead of accumulating attributes from a character node to the highest ancestor,
        recursively call aggregatedAttributesForElementAndItsAncestors so that aggregated
        attributes are cached on each ancestor to eliminate the old O(n^2) behavior.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::aggregatedAttributesForAncestors):
        (HTMLConverter::aggregatedAttributesForElementAndItsAncestors): Extracted from aggregatedAttributesForAncestors.

2014-04-08  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed CMake build fix after r166965.

        * UseJSC.cmake: Rename JSClipboardCustom.cpp to JSDataTransferCustom.cpp.

2014-04-08  Enrica Casucci  <enrica@apple.com>

        Unreviewed iOS build fix.

        Return false instead of nil in a function that returns BOOL.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):

2014-04-08  Brady Eidson  <beidson@apple.com>

        Non-empty ranges misdetected as empty ranges, avoiding telephone number detection.
        <rdar://problem/16553441> and https://bugs.webkit.org/show_bug.cgi?id=131397 

        Reviewed by Tim Horton.

        No new tests (Only affects a currently untested Mac-only WK2 feature)

        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Fix detection of empty ranges so we don’t
          early return erroneously.

2014-04-08  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [SVG] Fix CSS transform handling when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=125836

        Reviewed by Tim Horton.

        Tests: svg/zoom/page/zoom-css-transforms-expected.svg
               svg/zoom/page/zoom-css-transforms.svg

        Adjusts CSS transforms when used in SVG to account for unexpected
        translation scale. Backport from Chromium #174910.

        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform):

2014-04-08  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] large corner radius combined with 0 radius does not wrap properly
        https://bugs.webkit.org/show_bug.cgi?id=129739

        Reviewed by Bem Jones-Bey.

        Corrected special case handling for shape-outside border-box values with border-radius
        values that greater than or equal to the box's height.

        Tests: fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius-001.html
               fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius-002.html

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedIntervals):

2014-04-08  Alexey Proskuryakov  <ap@apple.com>

        Rename Clipboard to DataTransfer
        https://bugs.webkit.org/show_bug.cgi?id=131371

        Reviewed by Anders Carlsson.

        This is the name used in HTML5, and it's much better than the confusing Clipboard one.

        Renamed related enums too, and made DataTransferAccessPolicy an enum class.

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSClipboardCustom.cpp: Removed.
        * bindings/js/JSDataTransferCustom.cpp: Copied from Source/WebCore/bindings/js/JSClipboardCustom.cpp.
        (WebCore::JSDataTransfer::types):
        (WebCore::JSClipboard::types): Deleted.
        * bindings/js/JSEventCustom.cpp:
        * dom/Clipboard.cpp: Removed.
        * dom/Clipboard.h: Removed.
        * dom/Clipboard.idl: Removed.
        * dom/ClipboardAccessPolicy.h: Removed.
        * dom/ClipboardEvent.cpp:
        (WebCore::ClipboardEvent::ClipboardEvent):
        * dom/ClipboardEvent.h:
        (WebCore::ClipboardEvent::create):
        (WebCore::ClipboardEvent::clipboard): Deleted.
        * dom/ClipboardMac.mm: Removed.
        * dom/DOMAllInOne.cpp:
        * dom/DataTransfer.cpp: Copied from Source/WebCore/dom/Clipboard.cpp.
        (WebCore::DataTransfer::DataTransfer):
        (WebCore::DataTransfer::createForCopyAndPaste):
        (WebCore::DataTransfer::~DataTransfer):
        (WebCore::DataTransfer::setAccessPolicy):
        (WebCore::DataTransfer::canReadTypes):
        (WebCore::DataTransfer::canReadData):
        (WebCore::DataTransfer::canWriteData):
        (WebCore::DataTransfer::clearData):
        (WebCore::DataTransfer::getData):
        (WebCore::DataTransfer::setData):
        (WebCore::DataTransfer::types):
        (WebCore::DataTransfer::files):
        (WebCore::DataTransfer::dropEffect):
        (WebCore::DataTransfer::setDropEffect):
        (WebCore::DataTransfer::effectAllowed):
        (WebCore::DataTransfer::setEffectAllowed):
        (WebCore::DataTransfer::setDragImage):
        (WebCore::DataTransfer::createForDragAndDrop):
        (WebCore::DataTransfer::canSetDragImage):
        (WebCore::DataTransfer::updateDragImage):
        (WebCore::DataTransfer::createDragImage):
        (WebCore::DragImageLoader::DragImageLoader):
        (WebCore::DragImageLoader::imageChanged):
        (WebCore::DataTransfer::sourceOperation):
        (WebCore::DataTransfer::destinationOperation):
        (WebCore::DataTransfer::setSourceOperation):
        (WebCore::DataTransfer::setDestinationOperation):
        (WebCore::Clipboard::Clipboard): Deleted.
        (WebCore::Clipboard::createForCopyAndPaste): Deleted.
        (WebCore::Clipboard::~Clipboard): Deleted.
        (WebCore::Clipboard::setAccessPolicy): Deleted.
        (WebCore::Clipboard::canReadTypes): Deleted.
        (WebCore::Clipboard::canReadData): Deleted.
        (WebCore::Clipboard::canWriteData): Deleted.
        (WebCore::Clipboard::clearData): Deleted.
        (WebCore::Clipboard::getData): Deleted.
        (WebCore::Clipboard::setData): Deleted.
        (WebCore::Clipboard::types): Deleted.
        (WebCore::Clipboard::files): Deleted.
        (WebCore::Clipboard::dropEffect): Deleted.
        (WebCore::Clipboard::setDropEffect): Deleted.
        (WebCore::Clipboard::effectAllowed): Deleted.
        (WebCore::Clipboard::setEffectAllowed): Deleted.
        (WebCore::Clipboard::setDragImage): Deleted.
        (WebCore::Clipboard::createForDragAndDrop): Deleted.
        (WebCore::Clipboard::canSetDragImage): Deleted.
        (WebCore::Clipboard::updateDragImage): Deleted.
        (WebCore::Clipboard::createDragImage): Deleted.
        (WebCore::Clipboard::sourceOperation): Deleted.
        (WebCore::Clipboard::destinationOperation): Deleted.
        (WebCore::Clipboard::setSourceOperation): Deleted.
        (WebCore::Clipboard::setDestinationOperation): Deleted.
        * dom/DataTransfer.h: Copied from Source/WebCore/dom/Clipboard.h.
        * dom/DataTransfer.idl: Copied from Source/WebCore/dom/Clipboard.idl.
        * dom/DataTransferAccessPolicy.h: Copied from Source/WebCore/dom/ClipboardAccessPolicy.h.
        * dom/DataTransferItemList.h:
        * dom/DataTransferMac.mm: Copied from Source/WebCore/dom/ClipboardMac.mm.
        (WebCore::DataTransfer::createDragImage):
        (WebCore::Clipboard::createDragImage): Deleted.
        * dom/Event.h:
        (WebCore::Event::clipboardData):
        (WebCore::Event::internalDataTransfer):
        (WebCore::Event::clipboard): Deleted.
        * dom/Event.idl:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::dataTransfer):
        * dom/MouseEvent.idl:
        * dom/WheelEvent.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canDHTMLPaste):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::tryDHTMLPaste):
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::selectedTextForDataTransfer):
        (WebCore::Editor::selectedTextForClipboard): Deleted.
        * editing/Editor.h:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::takeFindStringFromSelection):
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText):
        * loader/EmptyClients.h:
        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        * page/DragController.h:
        * page/DragState.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::hasFileOfType):
        (WebCore::hasStringOfType):
        (WebCore::hasDropZoneType):
        (WebCore::findDropZone):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::freeDataTransfer):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::dispatchDragSrcEvent):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::freeClipboard): Deleted.
        * page/EventHandler.h:
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::createDraggingDataTransfer):
        (WebCore::EventHandler::createDraggingClipboard): Deleted.
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::declareAndWriteDragImage):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::createDraggingDataTransfer):
        (WebCore::EventHandler::createDraggingClipboard): Deleted.
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::declareAndWriteDragImage):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingDataTransfer):
        (WebCore::EventHandler::createDraggingClipboard): Deleted.
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::declareAndWriteDragImage):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingataTransfer):
        (WebCore::EventHandler::createDraggingClipboard): Deleted.
        * platform/Pasteboard.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/mac/PasteboardMac.mm:
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeRangeToDataObject):
        (WebCore::Pasteboard::writeSelection):

2014-04-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed iOS build fix. Pass 0 instead of nil to the options parameter of addObserver:forKeyPath:options:context.

        * platform/graphics/ios/TextTrackRepresentationIOS.mm:
        (-[WebCoreTextTrackRepresentationIOSHelper setParent:]):

2014-04-08  Antti Koivisto  <antti@apple.com>

        Remove exposedRect from TileController
        https://bugs.webkit.org/show_bug.cgi?id=131378

        Reviewed by Simon Fraser.

        Having two separate visible rectangles is confusing. We should compute one on higher level.

        * page/FrameView.cpp:
        (WebCore::FrameView::setExposedRect):
        
            Push exposed rect to tile controller by doing a layer flush (like the changed visible rect is normally passed).

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        
            Remove exposedRect and just use visibleRect.

        (WebCore::TileController::TileController):
        (WebCore::TileController::setTiledScrollingIndicatorPosition):
        
            Update the scrolling indicator position.

        (WebCore::TileController::updateTileCoverageMap):
        (WebCore::TileController::setExposedRect): Deleted.
        * platform/graphics/ca/mac/TileGrid.h:
        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::tilesWouldChangeForVisibleRect):
        (WebCore::TileGrid::revalidateTiles):
        (WebCore::TileGrid::scaledExposedRect): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        
            No need to push exposedRect anymore.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        
            Integrate exposed rect to visible rect when flushing layers.

2014-04-08  Andreas Kling  <akling@apple.com>

        [Mac] Always do a full GC when simulating memory pressure.
        <https://webkit.org/b/129790>

        To get more consistent accounting on automated memory testers,
        add a synchronous GC as part of the simulated memory pressure event.

        Reviewed by Geoffrey Garen.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):

2014-04-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed iOS build fix. Pass 0 instead of nil to setRate: when pausing.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause):

2014-04-08  Mark Lam  <mark.lam@apple.com>

        Refactor to make JSMainThreadExecState's constructor and destructor private.
        <https://webkit.org/b/131372>

        Reviewed by Mark Hahnenberg.

        This is in preparation for subsequent patches to ensure that we don't
        exit the VM with an exception still pending.

        No new tests required.  This is only a refactor of existing behavior.

        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::runTask):

2014-04-07  Jer Noble  <jer.noble@apple.com>

        [WK2][iOS] Consecutive videos in full screen display only black
        https://bugs.webkit.org/show_bug.cgi?id=131316

        Reviewed by Eric Carlson.

        Update the MediaPlayer's full screen attributes whenever the underlying engine changes,
        not just when the engine is initially created. Also, clear the videoLayer out of the
        fullscreen layer when destroying the videoLayer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer):

2014-04-08  Morten Stenshorne  <mstensho@opera.com>

        [New Multicolumn] Child top margin sometimes ignored for column balancing
        https://bugs.webkit.org/show_bug.cgi?id=122754

        Reviewed by David Hyatt.

        We need to set zero page logical height in LayoutState when column
        height is unknown (when the columns haven't yet been
        balanced). There's code that assumes that non-zero page height means
        that page height is known. Lying about this makes the pagination code
        believe that every top margin is adjacent to a column break, which
        makes it eat and ignore all top margins.

        This should be cleaned up, but it's easier to wait until the old
        multicol code has been removed.

        Tests: fast/multicol/break-in-scrollable.html
               fast/multicol/newmulticol/leading-and-trailing-margin.html
               fast/multicol/newmulticol/leading-margin.html

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::isPageLogicalHeightKnown):
        * rendering/RenderMultiColumnFlowThread.h:

2014-04-07  Dean Jackson  <dino@apple.com>

        Allow elements to register for changes in page scale
        https://bugs.webkit.org/show_bug.cgi?id=131319

        Reviewed by Eric Carlson.

        Some parts of WebCore need to react to changes in the page
        scale factor, such as resizing when the user zooms. A followup
        patch will enable this for media controls - this simply lays
        the groundwork.

        At the moment we only allow HTMLMediaElements to register, but if
        necessary this could be expanded in the future.

        * dom/Document.cpp: New methods to keep a list of HTMLMediaElements that
        are interested in updates.
        (WebCore::Document::registerForPageScaleFactorChangedCallbacks):
        (WebCore::Document::unregisterForPageScaleFactorChangedCallbacks):
        (WebCore::Document::pageScaleFactorChanged):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::registerWithDocument): Add ourselves to the
        the document's pageScale callback.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Remove ourselves from the
        the document's pageScale callback.
        (WebCore::HTMLMediaElement::setMediaControlsDependOnPageScaleFactor): Add/remove ourselves to/from
        the callback if necessary.
        (WebCore::HTMLMediaElement::pageScaleFactorChanged): The callback function. Empty for now.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaControlsDependOnPageScaleFactor): Accessor.
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor): Tell all documents that the user has zoomed.

2014-04-08  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error in TextureMapper.h
        https://bugs.webkit.org/show_bug.cgi?id=131360

        Reviewed by Brent Fulgham.

        The TextureMapper class has pure virtual methods, and cannot be instantiated.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::platformCreateAccelerated):

2014-04-08  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Slow paint path for inlines should snap to device pixels.
        https://bugs.webkit.org/show_bug.cgi?id=131259

        Reviewed by Simon Fraser.

        InlineTextBox::paint needs to round to the same device pixel position as SimpleLineLayout does.

        Test: fast/inline/hidpi-slow-path-text-on-subpixel-position.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/TextPainter.h: Cleanup. No reason to have them as references here.

2014-04-07  Brent Fulgham  <bfulgham@apple.com>

        Keep 'webkitClosedCaptionsVisible' API in sync with captions display preferences
        https://bugs.webkit.org/show_bug.cgi?id=131344

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup) If we decide that captions should
        be active (due to user preferences) make sure the 'webkitClosedCaptionsVisible' state
        is turned on.

2014-04-08  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Paint the filter effect result image on device pixel position.
        https://bugs.webkit.org/show_bug.cgi?id=131255

        Reviewed by Simon Fraser.

        This patch moves filter effect images from integral to device pixel position. However,
        result images are still integral based.

        Test: css3/filters/hidpi-filter-is-on-subpixel-position.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):

2014-04-08  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make border images device pixel aware.
        https://bugs.webkit.org/show_bug.cgi?id=131209

        Reviewed by Simon Fraser.

        Snap border-image size and position to device pixels. It works both on generated and bitmap images.

        Test: fast/borders/hidpi-border-image-gradient-on-subpixels.html

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

2014-04-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [SOUP] Control cookie management according ResourceRequest.allowCookies()
        https://bugs.webkit.org/show_bug.cgi?id=131026

        Reviewed by Sergio Villar Senin.

        Added per soup-message disabling of cookie jar manager when related ResourceRequest does not allow cookies (e.g. some cross-origin requests).

        Patch is covered by unskipped test http/tests/xmlhttprequest/cross-origin-cookie-storage.html.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageMembers): Added disabling of cookie jar manager if cookies are not allowed.

2014-04-08  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Handle min/max height in the grid element
        https://bugs.webkit.org/show_bug.cgi?id=131302

        Reviewed by Darin Adler.

        Removed a FIXME in the code as we're already handling min/max
        height in the code. Added a couple of test cases to improve the
        test coverage.

        Merged from Blink r161876 by <jchaffraix@chromium.org>

        Tests: fast/css-grid-layout/flex-content-sized-columns-resize.html
               fast/css-grid-layout/grid-element-min-max-height.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):

2014-04-08  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Remove unused RenderBox::clearRenderBoxRegionInfo
        https://bugs.webkit.org/show_bug.cgi?id=131352

        Reviewed by Andrei Bucur.

        No new tests, code clean-up.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clearRenderBoxRegionInfo): Deleted.
        * rendering/RenderBox.h:

2014-04-08  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Buildfix after r166917
        https://bugs.webkit.org/show_bug.cgi?id=131351

        Reviewed by Andrei Bucur.

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

2014-04-08  Darin Adler  <darin@apple.com>

        Fix assertions triggered by CSS calc changes in r166860
        https://bugs.webkit.org/show_bug.cgi?id=131346

        Reviewed by Andrei Bucur.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusCornerValues): Use isPercentNotCalculated() instead of
        type() == Percent; no behavior change.
        (WebCore::getBorderRadiusCornerValue): Ditto.
        (WebCore::lineHeightFromStyle): Use isPercentNotCalculated() before code
        that calls percent(), which won't work for a calculated length.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyBorderRadius::applyValue): Use isNegative and isZero rather
        than calling value() unconditionally. Should make calculated values work better.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::is100Percent): Use isPercentNotCalculated() before code
        that calls percent(), which won't work for a calculated length.

        * platform/Length.cpp:
        (WebCore::CalculationValueMap::deref): Use adoptRef here instead of calling deref
        immediately, so the deref will happen after calling remove. This makes the code
        work properly even if it's reentered inside the calculation value's destructor.

        * platform/Length.h:
        (WebCore::Length::percent): Change assert to isPercentNotCalculated, since the
        value function this calls only works for non-calculated values anyway.
        (WebCore::Length::isPercentNotCalculated): Added.
        (WebCore::Length::isPercent): Changed to call isPercentNotCalculated.
        (WebCore::Length::isSpecified): Changed to call isPercent.

        * platform/graphics/transforms/TranslateTransformOperation.h:
        (WebCore::TranslateTransformOperation::apply): Use isPercentNotCalculated()
        instead of type() == Percent; no behavior change.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn): Use isPercentNotCalculated()
        before code that calls value() or percent(), which won't work for a calculated length.
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths): Ditto.
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth): Ditto.
        (WebCore::AutoTableLayout::layout): Ditto.
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::layout): Ditto.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions): Ditto.
        * rendering/RenderTableSection.cpp:
        (WebCore::updateLogicalHeightForCell): Ditto.
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows): Ditto.
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToRows): Ditto.

        * rendering/style/RenderStyle.cpp:
        (WebCore::requireTransformOrigin): Use modern for loop. Also marked function static,
        since it's private to this file.
        (WebCore::RenderStyle::applyTransform): Use isPercentNotCalculated() instead of
        type() == Percent; no behavior change. Also use a modern for loop and auto& to avoid
        a really long type name.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation): Use isPercentNotCalculated()
        before code that calls percent(), which won't work for a calculated length.

        * platform/Length.h:
        (WebCore::Length::percent):
        (WebCore::Length::isPercentNotCalculated):
        (WebCore::Length::isPercent):
        (WebCore::Length::isSpecified):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        (WebCore::TranslateTransformOperation::apply):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::layout):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        * rendering/RenderTableSection.cpp:
        (WebCore::updateLogicalHeightForCell):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToRows):
        * rendering/style/RenderStyle.cpp:
        (WebCore::requireTransformOrigin):
        (WebCore::RenderStyle::applyTransform):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation):

2014-04-08  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Remove media controls dead code
        https://bugs.webkit.org/show_bug.cgi?id=131300

        Reviewed by Eric Carlson.

        MediaControlsGtk.cpp is no longer used so we can remove it from
        the repo.

        No new tests needed.

        * PlatformGTK.cmake: Remove html/shadow/MediaControlsGtk.cpp from
        compilation.
        * html/shadow/MediaControlsGtk.cpp: Removed.

2014-04-08  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Fixed positioned elements in named flows have fragmented content
        https://bugs.webkit.org/show_bug.cgi?id=130595

        Reviewed by Darin Adler.

        Fixed positioned elements that have the named flow as parent are positioned
        and sized relative to the viewport. Because of that, when the named flow
        has an associated region chain, the fixed positioned elements should not
        be fragmented.

        By making a fixed positioned element with a named flow parent unsplittable
        for fragmentation, we prevent this wrong behavior.

        Test: fast/regions/fixed-pos-content-fragmented.html

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

2014-04-07  Chris Fleizach  <cfleizach@apple.com>

        Regression: AX: image labels no longer exposed to AX API in SVG test case
        https://bugs.webkit.org/show_bug.cgi?id=131208

        Reviewed by Daniel Bates.

        accessibleNameForNode should work on any Element, not just HTML elements.

        Test: accessibility/svg-labelledby.html

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

2014-04-08  Andres Gomez  <agomez@igalia.com>

        [GTK] [EFL] Build fails with GCC < 4.8.x
        https://bugs.webkit.org/show_bug.cgi?id=130585

        Reviewed by Martin Robinson.

        The behavior in lower versions of GCC seem to be related to
        http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2132.

        Provided explicit casts for the failing ambiguous overloads.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcChangeState):
        (webKitMediaVideoSrcNeedDataCb):
        (webKitMediaAudioSrcNeedDataCb):
        (webKitMediaVideoSrcEnoughDataCb):
        (webKitMediaAudioSrcEnoughDataCb):
        (webKitMediaVideoSrcSeekDataCb):
        (webKitMediaAudioSrcSeekDataCb):
        * platform/gtk/GtkDragAndDropHelper.cpp:
        (WebCore::GtkDragAndDropHelper::handleDragLeave):
        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireInterval):

2014-04-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change NavigatorContentUtils client ownership from port side to NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=131299

        Reviewed by Darin Adler.

        EFL and GTK ports have managed own client of NavigatorContentUtils though it is only passed to
        NavigatorContentUtils. The NavigatorContentUtils has used the client to call port functions. So,
        there is no reason port implementation needs to manage the ownership. To manage the client is
        unnecessary work in current implementation.

        No new tests, no behavior changes.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::NavigatorContentUtils::create):
        (WebCore::provideNavigatorContentUtilsTo):
        * Modules/navigatorcontentutils/NavigatorContentUtils.h:
        * Modules/navigatorcontentutils/NavigatorContentUtilsClient.h:

2014-04-07  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Simplify the parsing of width arguments for Inset shapes
        https://bugs.webkit.org/show_bug.cgi?id=131305

        Reviewed by Andreas Kling.

        This code introduces some helper functions for setting the size arguments of inset shapes. This change
        also modifies the code to be the same as in Blink, so it helps us to keep the shapes code similar.

        No new tests, no behavior change.

        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShapeInset::updateShapeSize4Values):
        (WebCore::CSSBasicShapeInset::updateShapeSize1Value):
        (WebCore::CSSBasicShapeInset::updateShapeSize2Values):
        (WebCore::CSSBasicShapeInset::updateShapeSize3Values):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeInset):

2014-04-07  Martin Robinson  <mrobinson@igalia.com>

        fast/css3-text/css3-text-decoration/text-decoration-thickness.html fails on GTK
        https://bugs.webkit.org/show_bug.cgi?id=129957

        Reviewed by Dean Jackson.

        Causes existing tests to pass.

        * platform/graphics/cairo/GraphicsContextCG.cpp: Use the now-shared computeLineBoundsAndAntialiasingModeForText.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Align the Cairo version of text underline drawing with the CG version.
        * platform/graphics/GraphicsContext.h: Add computeLineBoundsAndAntialiasingModeForText.
        * platform/graphics/GraphicsContext.cpp: Ditto.

2014-04-07  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r163194-r163227): Garbage tiles in overflow of RTL page with 
        background image
        https://bugs.webkit.org/show_bug.cgi?id=131323
        -and corresponding-
        <rdar://problem/16402013>

        Reviewed by Tim Horton.

        Returning the TiledBacking::bounds() for the 
        FrameView::extendedBackgroundRectForPainting() in convenient for ltr pages, but it 
        is simply incorrect in rtl. There is no easy way to map the rect into the right 
        coordinate space, so this patch re-works the code to use computations in 
        RenderView to get the right rect.

        Call RenderView::unextendedBackgroundRect() and expand and move it based on the 
        TiledBacking’s margins.
        * page/FrameView.cpp:
        (WebCore::FrameView::extendedBackgroundRectForPainting):

        The logic that used to be in backgroundRect() has been moved to 
        unextendedBackgroundRect(). 
        * rendering/RenderView.cpp:
        (WebCore::RenderView::unextendedBackgroundRect):
        (WebCore::RenderView::backgroundRect):
        * rendering/RenderView.h:

2014-04-07  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] inset complex calc() args vanish in serialized computed style
        https://bugs.webkit.org/show_bug.cgi?id=129838

        Reviewed by Bem Jones-Bey.

        We didn't pass the style parameter when setting the width members of CSSBasicShapeInset,
        which lead to a 'should never reach asserttion' in CSSPrimitiveValue::init. This patch
        adds the missing parameters to the call sites.

        Extended existing parsing test script.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):

2014-04-07  Eric Carlson  <eric.carlson@apple.com>

        [iOS] MediaDocument should allow autoplay
        https://bugs.webkit.org/show_bug.cgi?id=131301

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Don't add the RequireUserGestureForRateChange
            behavior restriction when in a MediaDocument.

2014-04-07  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for opengl, texmap, transforms and efl in WebCore/platform/graphics.
        https://bugs.webkit.org/show_bug.cgi?id=131276

        Reviewed by Darin Adler.

        Replace uses of OwnPtr and PassOwnPtr in code under WebCore/platform/graphics/
        opengl, texmap, transforms and efl with std::unique_ptr.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::create): Deleted.
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        * platform/graphics/efl/EvasGLContext.h:
        * platform/graphics/efl/EvasGLSurface.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::create):
        (WebCore::GraphicsContext3DPrivate::setContextLostCallback):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::setEXTContextLostCallback):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::createOffScreenContext):
        (WebCore::GLPlatformContext::createContext):
        * platform/graphics/opengl/GLPlatformContext.h:
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffScreenSurface):
        * platform/graphics/opengl/GLPlatformSurface.h:
        * platform/graphics/surfaces/efl/GraphicsSurfaceCommon.cpp:
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLOffScreenSurface::createOffScreenSurface):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::create):
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::platformCreateAccelerated):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapper::platformCreateAccelerated):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore::TextureMapperGL::create): Deleted.
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (WebCore::TextureMapperImageBuffer::TextureMapperImageBuffer):
        (WebCore::TextureMapperImageBuffer::create): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::purgeGLResources):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::operator=):
        (WebCore::TransformState::applyTransform):
        * platform/graphics/transforms/TransformState.h:
        * platform/graphics/win/GraphicsContext3DWin.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):

2014-04-07  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Make back-buffers purgeable when possible
        https://bugs.webkit.org/show_bug.cgi?id=131213
        <rdar://problem/15373906>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::takeSurface):
        (WebCore::IOSurfacePool::markOlderSurfacesPurgeable):
        (WebCore::IOSurfacePool::showPoolStatistics):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::isVolatile):
        (IOSurface::setIsVolatile):
        Rename purgeability functions to match the system
        and reduce confusion between purgeable memory
        and volatile vs. non-volatile memory.

2014-04-07  Benjamin Poulain  <benjamin@webkit.org>

        Split CSS Selectors pseudo class and pseudo elements
        https://bugs.webkit.org/show_bug.cgi?id=131295

        Reviewed by Andreas Kling.

        Split pseudo class and pseudo element to make it clearer what pseudo types
        are possible for a given match type.

        Pseudo Element types are separated and Pseudo Class are left in place. The Pseudo Class
        will have to be renamed too but that will be done separately to make this change smaller.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::rewriteSpecifiersWithElementName):
        (WebCore::CSSParser::rewriteSpecifiers):
        Use a method isPseudoElementCueFunction() to abstract the #ifdef out of the parser.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoElementSelector):

        (WebCore::CSSParserSelector::parsePseudoElementCueFunctionSelector):
        Rename to specify this is for the pseudo element cue function, not the pseudo element cue.

        (WebCore::CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector):
        (WebCore::CSSParserSelector::parsePseudoCueFunctionSelector): Deleted.
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::isPseudoElementCueFunction):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        (WebCore::CSSSelector::pseudoId):
        (WebCore::CSSSelector::parsePseudoElementType):
        (WebCore::CSSSelector::operator==):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::pseudoType):
        (WebCore::CSSSelector::setPseudoElementType):
        (WebCore::CSSSelector::pseudoElementType):
        (WebCore::CSSSelector::isUnknownPseudoElement):
        (WebCore::CSSSelector::isCustomPseudoElement):
        (WebCore::pseudoClassIsRelativeToSiblings):
        (WebCore::CSSSelector::isSiblingSelector):
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::collectFeaturesFromSelector):
        * css/RuleSet.cpp:
        (WebCore::determinePropertyWhitelistType):
        (WebCore::RuleSet::findBestRuleSetAndAdd):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::checkScrollbarPseudoClass):
        (WebCore::SelectorChecker::determineLinkMatchType):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/SelectorPseudoElementTypeMap.in:
        * css/SelectorPseudoTypeMap.h:
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/makeSelectorPseudoElementsMap.py:
        (enumerablePseudoType):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):

        * rendering/style/RenderStyleConstants.h:
        All the fullscreen pseudo types are pseudo class selectors. They should not have a pseudo ID.

2014-04-07  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: detect possible replay divergence from unexpected DOM event dispatches
        https://bugs.webkit.org/show_bug.cgi?id=131193

        Reviewed by Andreas Kling.

        Add assertions to catch potential nondeterministic behavior.

        The assertion added by this patch catches dispatched DOM events
        that are triggered by nondeterministic event loop cycles. If we
        did not capture an event loop input in the current event loop
        cycle nor are we manually simulating an event loop input during
        playback, then DOM events fired during the unordered cycle could
        run JavaScript and diverge the execution.

        During playback, we can assert that EventLoopInputDispatcher is dispatching
        when a DOM event is be dispatched to a document that is being replayed.

        During capturing, event loop inputs are captured rather than
        dispatched, so we add some accounting to track what caused a DOM
        event. To approximate the extent of computation triggered by an
        event loop input, we add RAII helpers to call sites where event
        loop inputs are captured.

        The assertions are disabled by default until the most common
        sources of nondeterminism are handled and playback errors are
        gracefully surfaced to the user. <https://webkit.org/b/131279>

        No new tests. This patch adds extra assertions for debugging purposes.

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorInstrumentation.cpp: Notify ReplayAgent of dispatched DOM event.
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        * inspector/InspectorReplayAgent.cpp: Forward dispatched DOM events to ReplayController.
        (WebCore::InspectorReplayAgent::willDispatchEvent): Added.
        * inspector/InspectorReplayAgent.h:
        * replay/CapturingInputCursor.cpp:
        (WebCore::CapturingInputCursor::CapturingInputCursor):
        (WebCore::CapturingInputCursor::setWithinEventLoopInputExtent): Added.
        * replay/CapturingInputCursor.h:
        * replay/EventLoopInput.cpp: Added.
        (WebCore::EventLoopInputExtent::EventLoopInputExtent): Added.
        (WebCore::EventLoopInputExtent::~EventLoopInputExtent): Added.
        * replay/EventLoopInput.h:
        * replay/EventLoopInputDispatcher.h:
        (WebCore::EventLoopInputDispatcher::isDispatching): Add a getter.
        * replay/ReplayController.cpp:
        (WebCore::logDispatchedDOMEvent): Added. This is useful for understanding script-visible events.
        (WebCore::ReplayController::willDispatchEvent): Added.
        * replay/ReplayController.h:
        * replay/UserInputBridge.cpp: Add extent helpers to call sites that capture inputs.
        (WebCore::UserInputBridge::handleMousePressEvent):
        (WebCore::UserInputBridge::handleMouseReleaseEvent):
        (WebCore::UserInputBridge::handleMouseMoveEvent):
        (WebCore::UserInputBridge::handleMouseMoveOnScrollbarEvent):
        (WebCore::UserInputBridge::handleKeyEvent):
        (WebCore::UserInputBridge::handleWheelEvent):
        (WebCore::UserInputBridge::scrollRecursively):
        (WebCore::UserInputBridge::logicalScrollRecursively):

2014-04-07  Timothy Hatcher  <timothy@apple.com>

        Remove copy of combine-javascript-resources.pl that isn't used anymore
        https://bugs.webkit.org/show_bug.cgi?id=131307

        Reviewed by Joseph Pecoraro.

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/combine-javascript-resources.pl: Removed.

2014-04-07  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Clean up invalid FIXME
        https://bugs.webkit.org/show_bug.cgi?id=131304

        Reviewed by Andreas Kling.

        No new tests, no behavior change.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2014-04-07  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Turn on ENABLE_MEDIA_CONTROLS_SCRIPT
        https://bugs.webkit.org/show_bug.cgi?id=131257

        Reviewed by Gyuyoung Kim.

        no new tests. just rebased exisiting tests.

        * PlatformEfl.cmake: Added the media controls script associated files.
        * css/mediaControlsEfl.css: Removed.
        * css/mediaControlsEflFullscreen.css: Removed.
        * platform/efl/DefaultTheme/CMakeLists.txt:
        * platform/efl/DefaultTheme/default.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/enterfullscreenbutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/exitfullscreenbutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/fullscreen_button.edc: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/mute_button.edc: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/mutebutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/unmutebutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/pausebutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playbutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playpause_button.edc: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackward_button.edc: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackwardbutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforward_button.edc: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforwardbutton.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/closedcaption.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/closedcaption_disabled.png: Removed.
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/toggle_captions_button.edc: Removed.
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::toEdjeGroup):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::adjustSliderThumbSize):
        (WebCore::RenderThemeEfl::mediaControlsStyleSheet): Modified to load bundle style sheet.
        (WebCore::RenderThemeEfl::mediaControlsScript): Added to load bundle scripts.
        (WebCore::RenderThemeEfl::emitMediaButtonSignal): Deleted.
        (WebCore::RenderThemeEfl::extraMediaControlsStyleSheet): Deleted.
        (WebCore::RenderThemeEfl::extraFullScreenStyleSheet): Deleted.
        (WebCore::RenderThemeEfl::formatMediaControlsCurrentTime): Deleted.
        (WebCore::RenderThemeEfl::hasOwnDisabledStateHandlingFor): Deleted.
        (WebCore::RenderThemeEfl::paintMediaFullscreenButton): Deleted.
        (WebCore::RenderThemeEfl::paintMediaMuteButton): Deleted.
        (WebCore::RenderThemeEfl::paintMediaPlayButton): Deleted.
        (WebCore::RenderThemeEfl::paintMediaSeekBackButton): Deleted.
        (WebCore::RenderThemeEfl::paintMediaSeekForwardButton): Deleted.
        (WebCore::RenderThemeEfl::paintMediaSliderTrack): Deleted.
        (WebCore::RenderThemeEfl::paintMediaSliderThumb): Deleted.
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderContainer): Deleted.
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderTrack): Deleted.
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderThumb): Deleted.
        (WebCore::RenderThemeEfl::paintMediaCurrentTime): Deleted.
        (WebCore::RenderThemeEfl::supportsClosedCaptioning): Deleted.
        (WebCore::RenderThemeEfl::paintMediaToggleClosedCaptionsButton): Deleted.
        * platform/efl/RenderThemeEfl.h:

2014-04-07  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: change the node flags directly instead of using function calls when possible
        https://bugs.webkit.org/show_bug.cgi?id=131292

        Reviewed by Andreas Kling.

        For historical reasons, changing the node flags was always done with function calls.
        This patch changes those calls to modify the nodes directly.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::setNodeFlag):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLastChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsOnlyChild):
        (WebCore::SelectorCompiler::markElementWithSetChildrenAffectedByLastChildRules): Deleted.
        (WebCore::SelectorCompiler::markElementWithSetChildrenAffectedByFirstChildAndLastChildRules): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByFirstChildRules): Deleted.
        (WebCore::Element::setChildrenAffectedByDirectAdjacentRules): Deleted.
        * dom/Element.h:
        * dom/Node.h:
        (WebCore::Node::flagChildrenAffectedByFirstChildRulesFlag):
        (WebCore::Node::flagChildrenAffectedByLastChildRulesFlag):
        (WebCore::Node::flagChildrenAffectedByDirectAdjacentRulesFlag):

2014-04-07  Krzysztof Czech  <k.czech@samsung.com>

        Remove unused header from PlatformSpeechSynthesizer.h
        https://bugs.webkit.org/show_bug.cgi?id=131103

        Reviewed by Anders Carlsson.

        Since WebSpeech has switched to use std::unique_ptr, we do not need to include PassOwnPtr.

        No new tests. No behaviour change, just quick fix.

        * platform/PlatformSpeechSynthesizer.h:

2014-04-06  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use RenderRegion::isValid() before using a region
        https://bugs.webkit.org/show_bug.cgi?id=131232

        Reviewed by Andreas Kling.

        RenderRegion method isValid() should be used to test whether a region
        is good to use instead of a mix between isValid() and flowThread().
        When the region is designed to fragment content from a parent flow thread,
        the m_flowThread is not nullified anymore, thus ensuring the same treatment for all invalid
        regions.
        Covered by existing regions tests.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::pageLogicalHeight):
        (WebCore::RenderNamedFlowFragment::maxPageLogicalHeight):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::positionForPoint):
        (WebCore::RenderRegion::pageLogicalWidth):
        (WebCore::RenderRegion::pageLogicalHeight):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::installFlowThread):
        (WebCore::RenderRegion::attachRegion):
        (WebCore::RenderRegion::detachRegion):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::renderBoxRegionInfo):

2014-04-06  Benjamin Poulain  <benjamin@webkit.org>

        Fix the debug bots after r166863

        * css/PageRuleCollector.cpp:
        (WebCore::checkPageSelectorComponents): I forgot to update one call site for PagePseudoClass.

2014-04-06  Darin Adler  <darin@apple.com>

        Make some bindings improvements, with smaller code size for error message generation
        https://bugs.webkit.org/show_bug.cgi?id=131285

        Reviewed by Andreas Kling.

        * WebCore.exp.in: Updated to remove old and add new functions, for use by the Internals
        JavaScript bindings.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::makeDOMBindingsTypeErrorStringInternal): Deleted.
        (WebCore::throwTypeError): Added. Helper to avoid repeating throwVMError/createTypeError.
        (WebCore::appendArgumentMustBe): Added. Helper for building up argument error strings.
        (WebCore::reportDeprecatedGetterError): Added. For bindings to use.
        (WebCore::throwArgumentMustBeEnumError): Ditto.
        (WebCore::throwArgumentMustBeFunctionError): Ditto.
        (WebCore::throwArgumentTypeError): Ditto.
        (WebCore::throwArrayElementTypeError): Ditto.
        (WebCore::throwAttributeTypeError): Ditto.
        (WebCore::throwConstructorDocumentUnavailableError): Ditto.
        (WebCore::throwGetterTypeError): Ditto.
        (WebCore::throwSequenceTypeError): Ditto.
        (WebCore::throwSetterTypeError): Ditto.
        (WebCore::throwThisTypeError): Ditto.

        * bindings/js/JSDOMBinding.h: Added declarations for new functions. Removed forward
        declarations for things not used in this file. Use nullptr instead of 0. Format
        templates consistently. Use a better for loop in the jsArray function. Removed
        unused HasMemoryCostMemberFunction, makeDOMBindingsTypeErrorString, and
        makeDOMBindingsTypeErrorStringInternal.

        * bindings/js/JSNavigatorCustom.cpp: Fixed a hand-written binding that was using
        makeDOMBindingsTypeErrorString to make a string.

        * bindings/js/ScriptController.h: Updated forward declarations.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Cut down on use of UNUSED_PARAM. Use the new functions
        for errors, keeping the code in the generated file to a minimum.
        (GenerateParametersCheck): Ditto.
        (GenerateConstructorDefinition): Ditto.

        * 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:
        * 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/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 expected results for changes above.

2014-04-06  Benjamin Poulain  <benjamin@webkit.org>

        Move the PseudoPageClass types out of the pseudo element/class mix
        https://bugs.webkit.org/show_bug.cgi?id=131284

        Reviewed by Darin Adler.

        Some more cleanup of Selector's pseudo types. This patch moves the page pseudo
        class types into their own enumeration (PagePseudoClassType).

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePagePseudoSelector):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForPage):
        (WebCore::CSSSelector::pseudoId):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::setPagePseudoType):
        (WebCore::CSSSelector::pagePseudoClassType):
        * css/PageRuleCollector.cpp:
        (WebCore::checkPageSelectorComponents):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):

2014-04-06  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: add support for :last-child and :only-child
        https://bugs.webkit.org/show_bug.cgi?id=131283

        Reviewed by Andreas Kling.

        This is the straightforward implementation of :last-child and :only-child.

        Both are extremely similar to :first-child. There are only minor differences:
        -:last-child has an additional check for the flag IsParsingChildrenFinished.
        -:only-child is like :first-child + :last-child but with combined marking.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToNextAdjacentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::jumpIfNoPreviousAdjacentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::jumpIfNoNextAdjacentElement):
        (WebCore::SelectorCompiler::markElementWithSetChildrenAffectedByLastChildRules):
        (WebCore::SelectorCompiler::setLastChildState):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLastChild):
        (WebCore::SelectorCompiler::markElementWithSetChildrenAffectedByFirstChildAndLastChildRules):
        (WebCore::SelectorCompiler::setOnlyChildState):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsOnlyChild):
        * dom/Node.h:
        (WebCore::Node::nextSiblingMemoryOffset):
        (WebCore::Node::flagIsParsingChildrenFinished):
        * rendering/style/RenderStyle.h:
        Removed the unused flags, I will add them back later as needed.

2014-04-06  Darin Adler  <darin@apple.com>

        Rework CSS calc logic, fixing some reference count mistakes in Length
        https://bugs.webkit.org/show_bug.cgi?id=131280
        rdar://problem/16400823

        Reviewed by Andreas Kling.

        New unit test in TestWebKitAPI.

        Changed the classes related to CSS "calc" to make the code a bit easier to read by
        moving code out of class definitions. Also used final some more, made more things private,
        used references instead of pointers, and other such changes. Biggest change, though, is to
        Length, which had a broken system for managing reference counted calculated objects.
        There were multiple bugs including a basic design mistake of not having a reference count
        and trying to use the reference count in the object itself. Fixed and covered by the unit
        test now; test found multiple problems in both the old and new implementations.

        * WebCore.exp.in: Updated exports, including symbols to make the unit test practical.

        * WebCore.xcodeproj/project.pbxproj: Made CalculationValue.h a Private file so it can
        be used in a unit test. Also let Xcode update the file type for a gperf file.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::equals): Updated since m_expression is a Ref now.
        (WebCore::CSSCalcValue::clampToPermittedRange): Marked inline and updated for data member
        name change.
        (WebCore::isIntegerResult): Changed argument order to put the operator first and use
        references instead of pointers. Also marked inline.
        (WebCore::createBlendHalf): Added. Helper to make the other functions more readable.
        (WebCore::createExpressionNode): Made non-member function private to this file. Also made
        many small improvements.
        (WebCore::CSSCalcValue::create): Updated so both of these call the same constructor.

        * css/CSSCalculationValue.h: Cut down CSSCalcValue class by making more things private
        and deleting unneeded things. Also use Ref instead of RefPtr.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getPositionOffsetValue): Use isFixed function instead of type function.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops): Updated code since toCalcValue now returns PassRef
        instead of PassRefPtr. Unfortunately the new code is a bit more verbose.
        (WebCore::positionFromValue): Ditto.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCalculation):

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Updated to pass reference rather than pointer.
        (WebCore::CSSPrimitiveValue::init): Ditto.

        * css/CSSToStyleMap.h: Removed unneeded include of LengthBox.h.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLength::applyValue): Updated for function name change.
        (WebCore::ApplyPropertyBorderRadius::applyValue): Removed extra parentheses.
        (WebCore::ApplyPropertyFontSize::applyValue): Ditto. Also updated since toCalcValue returns Ref.

        * css/LengthFunctions.cpp:
        (WebCore::floatValueForLength): Updated to call value instead of getFloatValue; both are the same.

        * css/StyleResolver.cpp:
        (WebCore::addIntrinsicMargins): Updated for function name change.
        (WebCore::createGridTrackBreadth): Ditto.

        * platform/CalculationValue.cpp:
        (WebCore::CalculationValue::create): Changed to return PassRef.
        (WebCore::CalcExpressionNumber::evaluate): Moved this function out of the header, since it's
        virtual and not really going to be inlined.
        (WebCore::CalcExpressionNumber::operator==): Ditto.
        (WebCore::CalculationValue::evaluate): Ditto.
        (WebCore::CalcExpressionBinaryOperation::operator==): Ditto.
        (WebCore::CalcExpressionLength::evaluate): Ditto.
        (WebCore::CalcExpressionLength::operator==): Ditto.
        (WebCore::CalcExpressionBlendLength::evaluate): Ditto.
        (WebCore::CalcExpressionBlendLength::operator==): Ditto.

        * platform/CalculationValue.h: Moved most functions out of the class bodies so the classes are
        easier to see. Made all the == operator functions non-member ones except for the polymorphic
        one from the base class. Changed the casting functions to work on references instead of pointers.
        Tweaked name of some members.

        * platform/Length.cpp: Reworked the CalculationValueMap (formerly CalculationValueHandleMap) to
        use unsigned instead of int, and store reference counts in the map rather than trying to share the
        reference count of the underlying CalculationValue object, which can lead to storage leaks where
        handles end up in the map permanently.
        (WebCore::calculationValues): Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL.
        (WebCore::Length::Length): Updated some data member names.
        (WebCore::Length::calculationValue): Updated to return a reference instead of a PassRefPtr.
        (WebCore::Length::ref): Renamed and updated for new interface to the map.
        (WebCore::Length::deref): Ditto.
        (WebCore::Length::nonNanCalculatedValue): Updated to use a reference instead of a pointer.
        (WebCore::Length::isCalculatedEqual): Updated since this is now only called if both objects are
        known to be calculated values.

        * platform/Length.h: Moved most functions out of the class definition to make the class definition
        easier to read. Reworked the constructors and assignment operators to handle the reference counting
        correctly. Added various FIXMEs and assertions. Removed some unused functions, made others private.

        * platform/LengthBox.h: Renamed some one-letter arguments to use words instead.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn): Updated for change to Length::setValue.
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray): Ditto.

        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::initialFillXPosition): Updated to not convert a double to a float at runtime.
        (WebCore::FillLayer::initialFillYPosition): Ditto.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWordSpacing): Removed a bogus FALLTHROUGH that was clearly wrong, but
        harmless. Updated for changes to Length.

        * rendering/style/RenderStyle.h: Updated for name changes and to avoid converting doubles to floats
        at runtime.

2014-04-06  Brent Fulgham  <bfulgham@apple.com>

        Honor System-Level User Preferences for Caption Display
        https://bugs.webkit.org/show_bug.cgi?id=131258

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSelectedTextTrack): Allow preferenced change to fully dispatch
        so we can properly deal with captions being turned off.
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Use 'webkit' variant of the
        setWebKitClosedCaptionsVisible method so we properly adjust settings needed for the JS API call.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): When captions are turned off, e.g.
        because the user turned off the preference, don't inadvertently turn them back on just bacause there
        was an existing track that was not in a 'hidden' state.

2014-04-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: add methods to encode a frame's index based on its FrameTree position
        https://bugs.webkit.org/show_bug.cgi?id=131281

        Reviewed by Timothy Hatcher.

        Given a frame, its encoded index is computed by traversing the frame tree
        and saving how many nodes have been traversed to reach a given frame.

        This is used to disambiguate frames when dispatching frame-specific event
        loop inputs during replay, such as timers and resource loaders.

        * replay/SerializationMethods.cpp:
        (WebCore::frameIndexFromDocument): Added.
        (WebCore::frameIndexFromFrame): Added.
        (WebCore::documentFromFrameIndex): Added.
        (WebCore::frameFromFrameIndex): Added.
        * replay/SerializationMethods.h:

2014-04-06  Alexey Proskuryakov  <ap@apple.com>

        iOS build fix.

        * WebCore.exp.in: Move newly exported function to a right section of this file.

2014-04-06  Darin Adler  <darin@apple.com>

        Refactor post-attach and HTMLObjectElement-related code
        https://bugs.webkit.org/show_bug.cgi?id=131282

        Reviewed by Antti Koivisto.

        * dom/ContainerNode.cpp: Moved the post-attach callback code from here to
        StyleResolveTree.h/cpp.
        * dom/ContainerNode.h: Ditto.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Use Style::PostResolutionCallbackDisabler instead of
        PostAttachCallbackDisabler.

        * dom/Element.h: Moved the post-attach callback code from here to StyleResolveTree.h/cpp.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute): Simplified the code for typeAttr, turning
        it into a 1-liner. Added a FIXME in codeAttr about the fact that it does not have the
        code to trigger image loads.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didAttachRenderers): Updated to use
        Style::queuePostResolutionCallback and use a lambda instead of a function.
        (WebCore::HTMLFormControlElement::didRecalcStyle): Ditto. Also added RefPtr instead
        of just using wishful thinking to keep the object alive.
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc): Ditto.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):: Simplified the code for typeAttr, turning
        it into a 1-liner. Made dataAttr call setNeedsWidgetUpdate(true) unconditionally after
        checking carefully to see that's harmless if there is no renderer. Changed classidAttr
        to call setNeedsWidgetUpdate(true) unconditionally and not set m_classId.
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk): Use fastGetAttribute
        instead of classId and descendantsOfType instead of getElementsByTagName.
        (WebCore::HTMLObjectElement::hasValidClassId): Use fastGetAttribute instead of classId.
        (WebCore::HTMLObjectElement::renderFallbackContent): Use imageLoader instead of m_imageLoader.

        * html/HTMLObjectElement.h: Removed classId, since there is no reason to cache that
        attribute in a data member. Rearranged header, making more private, and fixing some typos,
        and doing a "using" instead of a function to disambiguate the inherited form functions.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer): Fixed some code that assumed the
        first child of the shadow root is guaranteed to be an element.
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument): Removed null check on oldDocument,
        since m_needsDocumentActivationCallbacks can't be true if the old document was null.
        (WebCore::is100Percent): Added helper to make function below more readable.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Restructured the code a
        bit. The part that attracted my attention was the local variable of type RenderBox, which
        was named renderEmbeddedObject. Turns out the caller guarantees to only call this if there
        is a renderer of type RenderEmbeddedObject, so depend on that.

        * html/HTMLPlugInImageElement.h: Trimmed includes a bit. Made more members private.
        Marked more function members final. Made a protected imageLoader function so that
        m_imageLoader can be private eventually. Made m_imageLoader be std::unique_ptr.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::needsPseudoElement): Fixed spelling error in the name of this function.
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded): Updated for name change.
        (WebCore::Style::attachRenderTree): Update for new name of PostResolutionCallbackDisabler.
        (WebCore::Style::updateBeforeOrAfterPseudoElement): Updated for name change.
        (WebCore::Style::postResolutionCallbackQueue): Added.
        (WebCore::Style::queuePostResolutionCallback): Added.
        (WebCore::Style::suspendMemoryCacheClientCalls): Added. This is a side effect of the original
        PostAttachCallbackDisabler that is now done in a cleaner way, using the callback queue, instead
        of as a special case. It should not work for multiple documents across multiple pages instead of
        only the outermost one.
        (WebCore::Style::PostResolutionCallbackDisabler::PostResolutionCallbackDisabler): Added.
        Calls suspendMemoryCacheClientCalls, but a FIXME tries to point out why that isn't so great.
        (WebCore::Style::PostResolutionCallbackDisabler::~PostResolutionCallbackDisabler): Added.
        (WebCore::Style::postResolutionCallbacksAreSuspended): Added.

        * style/StyleResolveTree.h: Added queuePostResolutionCallback and
        postResolutionCallbacksAreSuspended. Also added PostResolutionCallbackDisabler, which should
        eventually become a private implementation detail.

2014-04-04  Brian J. Burg  <burg@cs.washington.edu>

        Enable WEB_REPLAY for PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=130700

        Reviewed by Timothy Hatcher.

        Switch on WEB_REPLAY feature flag for non-production builds.

        * Configurations/FeatureDefines.xcconfig:
        * replay/ReplayInputDispatchMethods.cpp: Fix the ENABLE(WEB_REPLAY) build.
        It was broken by the bool to enum refactoring in r166684.
        (WebCore::InitialNavigation::dispatch):

2014-04-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove unused test hook setInspectorResourcesDataSizeLimits
        https://bugs.webkit.org/show_bug.cgi?id=131268

        Reviewed by Timothy Hatcher.

        This was used in the old inspector frontend tests for the Network panel.
        It's no longer used by any tests or frontend code.

        * WebCore.exp.in: Remove symbols.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setInspectorResourcesDataSizeLimits): Deleted.
        * inspector/InspectorController.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setResourcesDataSizeLimitsFromInternals): Deleted.
        * inspector/InspectorResourceAgent.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::setResourcesDataSizeLimits): Deleted.
        * inspector/NetworkResourcesData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setInspectorResourcesDataSizeLimits): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-04-05  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (NetworkProcess): Subresources fail to load from AppCache
        https://bugs.webkit.org/show_bug.cgi?id=131262
        <rdar://problem/15370653>

        Reviewed by Sam Weinig.

        Exported ApplicationCacheHost::maybeLoadResource. Changed it to take a const
        reference to ResourceRequest, as appropriate for WebResourceLoadScheduler.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        * loader/appcache/ApplicationCacheHost.h:

2014-04-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove unused metrics and commands from the Timeline agent
        https://bugs.webkit.org/show_bug.cgi?id=131184

        Reviewed by Timothy Hatcher.

        This patch removes several instrumentation hooks that are not being
        used by the frontend in any way. Most of them are not hooked up to
        produce any data, so they just clutter up InspectorClient and the agent.

        * WebCore.exp.in: Remove didBeginFrame/didCancelFrame.
        * inspector/InspectorClient.h: Remove client methods that are never overridden.
        (WebCore::InspectorClient::canMonitorMainThread): Deleted.
        (WebCore::InspectorClient::supportsFrameInstrumentation): Deleted.
        (WebCore::InspectorClient::getAllocatedObjects): Deleted.
        (WebCore::InspectorClient::dumpUncountedAllocatedObjects): Deleted.

        * inspector/InspectorController.cpp: Remove unused instrumentation.
        (WebCore::InspectorController::didBeginFrame): Deleted.
        (WebCore::InspectorController::didCancelFrame): Deleted.
        (WebCore::InspectorController::didComposite): Deleted.
        (WebCore::InspectorController::wilComposite): Deleted.
        * inspector/InspectorController.h:

        * inspector/InspectorTimelineAgent.cpp: Remove the backend's BeginFrame enum
        value, but keep it in the protocol for when it is reimplemented. Remove
        management of the current frame record, and simplify some code.
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        (WebCore::InspectorTimelineAgent::clearRecordStack):
        (WebCore::InspectorTimelineAgent::canMonitorMainThread): Deleted.
        (WebCore::InspectorTimelineAgent::supportsFrameInstrumentation): Deleted.
        (WebCore::InspectorTimelineAgent::didBeginFrame): Deleted.
        (WebCore::InspectorTimelineAgent::didCancelFrame): Deleted.
        (WebCore::InspectorTimelineAgent::didComposite): Deleted.
        (WebCore::InspectorTimelineAgent::wilComposite): Deleted.
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline): Deleted. Undo telescoping.
        (WebCore::usedHeapSize): Deleted.
        (WebCore::InspectorTimelineAgent::commitFrameRecord): Deleted.
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/protocol/Timeline.json:

        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp: Remove
        instrumentation hook for beginFrame. This is the only backend that implements it.
        (WebCore::CompositingCoordinator::syncDisplayState):

        * testing/Internals.cpp: Remove crufty test methods that aren't used.
        (WebCore::Internals::emitInspectorDidBeginFrame): Deleted.
        (WebCore::Internals::emitInspectorDidCancelFrame): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-04-05  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r163914): Application cache cannot be used in main frame
        https://bugs.webkit.org/show_bug.cgi?id=131263
        <rdar://problem/16532063>

        Reviewed by Sam Weinig.

        * loader/appcache/ApplicationCacheHost.cpp: (WebCore::ApplicationCacheHost::isApplicationCacheBlockedForRequest):
        Don't check main frame origin when loading into main frame, it's not a 3rd party
        subframe, and the URL is unrelated to the page we are loading now.

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        Removed the same incorrect check that was duplicated here. The only caller already
        checks isApplicationCacheBlockedForRequest().

2014-04-05  Dan Bernstein  <mitz@apple.com>

        [Xcode] Clean up the platform/graphics group
        https://bugs.webkit.org/show_bug.cgi?id=131271

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj: Created an opentype group and moved opentype file
        references into it. Removed duplicate file references.

2014-04-05  Andreas Kling  <akling@apple.com>

        Remove unused type casting helpers for HTMLUnknownElement...

        ...to fix the debug build.

        * html/HTMLUnknownElement.h:

2014-04-05  Dirk Schulze  <krit@webkit.org>

        Canvas strokeText and fillText with SourceIn, DestinationIn, SourceOut, DestinationAtop and Copy have errors
        https://bugs.webkit.org/show_bug.cgi?id=66766

        Reviewed by Andreas Kling.

        Use transparency layers to draw text with certain compositing modes on
        the canvas. This follows the Canvas specification and makes WebKit fully
        compatible with IE. It also makes it more compatible with Firefox, even though
        Firefox still has some bugs.

        Test: fast/canvas/canvas-composite-text-alpha.html

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

2014-04-05  Andreas Kling  <akling@apple.com>

        Devirtualize isHTMLUnknownElement().
        <https://webkit.org/b/131269>

        We were hitting isHTMLUnknownElement() pretty hard when marking
        out-of-document Nodes. (The check is part of isHTMLAudioElement()
        which is called by JSNodeOwner::isReachableFromOpaqueRoots().)

        This patch uses a Node flag for the unknown element instead.
        I'm also adding HTMLUnknownElement.{h,idl} to the Xcode project
        since they were suspiciously missing.

        Reviewed by Benjamin Poulain.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.h:
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isHTMLUnknownElement):
        * html/HTMLUnknownElement.h:
        (WebCore::toHTMLUnknownElement): Deleted.

2014-04-05  Dirk Schulze  <krit@webkit.org>

        Canvas stroke and strokeRect with SourceIn, DestinationIn, SourceOut, DestinationAtop and Copy have errors
        https://bugs.webkit.org/show_bug.cgi?id=66762

        Reviewed by Andreas Kling.

        For fill operations we create a new ImageBuffer to ensure that the results are composited
        correctly according to the Canvas spec. This patch creates a new transparency layer
        for stroking on certain compositing operators to archive the same. This makes WebKit's
        behavior interoperable with Firefox and IE as well. 

        Test: fast/fast/canvas/canvas-composite-stroke-alpha.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::strokeInternal):
        (WebCore::CanvasRenderingContext2D::strokeRect):

2014-04-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use preallocated stack reference to store adjacentBacktrackingStart
        https://bugs.webkit.org/show_bug.cgi?id=131237

        Reviewed by Benjamin Poulain.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateBacktrackingTailsIfNeeded):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToPreviousAdjacent): Deleted.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures): Deleted.
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDescendantBacktrackingTail): Deleted.
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::allocateUninitialized):

2014-04-05  Jeongeun Kim  <je_julie.kim@samsung.com>

        bad values from HTMLImageElement x and y attributes (CSSOM-View)
        https://bugs.webkit.org/show_bug.cgi?id=130308
        
        Reviewed by Simon Fraser.

        According to CSSOM-View, interface HTMLImageElement,
        The x attribute must return the x-coordinate.
        If style is not updated when x() is called, it can’t return anything.
        Style and layout should be done before getting value for x() and y(). 

        Test: cssom/cssom-view-img-attributes-001.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::x):
        (WebCore::HTMLImageElement::y):

2014-04-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove CSSBoxType member from BasicShape and CSSBasicShape
        https://bugs.webkit.org/show_bug.cgi?id=129706

        Reviewed by Andreas Kling.

        The CSSBoxType has been moved up to ShapeValue and is no longer needed in the BasicShape classes.

        No new tests, no behavior change.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::referenceBox): Deleted.
        (WebCore::BasicShape::setReferenceBox): Deleted.
        (WebCore::BasicShape::BasicShape): Deleted.

2014-04-05  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build after r166818.

        * WebCore.exp.in:

2014-04-03  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: hook up probe samples to TimelineAgent's records
        https://bugs.webkit.org/show_bug.cgi?id=131127

        Reviewed by Timothy Hatcher.

        Hook up probe callbacks from ScriptDebugListener so that timeline records are
        created for probe samples. The record includes the probe identifier and hit count.
        The actual probe evaluation result is sent separately by DebuggerAgent, and
        can be looked up in frontend models using the identifier and hit count.

        * inspector/InspectorTimelineAgent.cpp: Only listen to the debug server when recording.
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::breakpointActionProbe):
        (WebCore::toProtocol):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        * inspector/TimelineRecordFactory.h:
        * inspector/protocol/Timeline.json: Add new enum value.

2014-04-04  Andreas Kling  <akling@apple.com>

        Streamline cached wrapper lookup for Nodes in the normal world.
        <https://webkit.org/b/131249>

        Inline the hot path for toJS(..., Node*) for cached wrapper lookups
        in the normal world. (Or really, out-of-line the cold path, since
        that was preventing the compiler from inlining this function.)

        Also have JSDOMGlobalObject cache the "is normal world" flag from
        the DOMWrapperWorld so we can avoid the extra load.

        Reviewed by Benjamin Poulain.

        * WebCore.exp.in:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::worldIsNormal):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::getOutOfLineCachedWrapper):
        * bindings/js/JSNodeCustom.h:
        (WebCore::toJS):

2014-04-04  Brady Eidson  <beidson@apple.com>

        Show DataDetector UI on scanned phone numbers.
        <rdar://problem/16379588> and https://bugs.webkit.org/show_bug.cgi?id=131247

        Reviewed by Tim Horton.

        Gather the ranges of the scanned telephone numbers and send them up to WK2:
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        (WebCore::Editor::scanRangeForTelephoneNumbers):
        * editing/Editor.h:

        Add client method to receive scanned telephone number ranges:
        * page/EditorClient.h:
        (WebCore::EditorClient::selectedTelephoneNumberRangesChanged):

        Remove unneeded placeholder UI:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarkers):
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Deleted.
        (WebCore::InlineTextBox::paintCompositionUnderline): Deleted.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::expansionBehavior): Deleted.

2014-04-04  James Craig  <jcraig@apple.com>

        AX: supportsARIAExpanded should always return true for a few roles: combobox, disclosure.
        https://bugs.webkit.org/show_bug.cgi?id=129787

        Reviewed by Chris Fleizach.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

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

2014-04-04  Andreas Kling  <akling@apple.com>

        JSGenerateToNativeObject should use fast JSNode/JSElement casts.
        <https://webkit.org/b/131245>

        Make JSGenerateToNativeObject spit out code using the fast new wrapper
        casts for JSNode and JSElement.

        This avoids walking the ClassInfo chain in many core functions, e.g:

            - Node.insertBefore()
            - Node.replaceChild()
            - Node.removeChild()
            - Node.appendChild()
            - window.getComputedStyle()

        Reviewed by Geoff Garen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2014-04-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] polygon y-value calc() args serialize incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=129842

        Reviewed by Bem Jones-Bey.

        The code hit ASSERT(isCalculation(value)) in CSSParser::createPrimitiveNumbericValue, because
        CSSParser::validUnit had been called on both coordinates, which set the value for m_parsedCalculation,
        but only one of the coordinates was calculation value. I reordered calling valudUnit and
        createPrimitiveNumbericValue to be called in the correct order on the coordinates.

        I added the new test case to parsing-test-utils.js.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapePolygon):

2014-04-04  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: capture and replay wheel events and scroll commands
        https://bugs.webkit.org/show_bug.cgi?id=129402

        Reviewed by Timothy Hatcher and Simon Fraser.

        To capture and replay scrolling, the scrolling coordinator will force synchronous 
        scrolling during capture and replay. If the page is capturing or replaying,
        ForceOnMainThread will be added to the coordinator's SynchronousScrollingReasons.

        A callback was added to signal that replay session state have changed,
        and thus the synchronous scrolling reasons should be recomputed.

        Automated replay reftests for scrolling are not included, because they will be
        too flaky until more nondeterminism is handled. Specifically, resource loading,
        initial focus/active state, and parsing are known blocking issues.

        Test: ManualTests/inspector/replay-wheel-events.html

        * page/scrolling/ScrollingCoordinator.cpp: Add a new callback for replay state
        session changes. Add ForceOnMainThread if the page's active input cursor is
        capturing or replaying.

        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::replaySessionStateDidChange): Added.
        * page/scrolling/ScrollingCoordinator.h:

        * platform/PlatformWheelEvent.h:
        * platform/ScrollTypes.h: Add explicit enum storage types so these enums can
        be forward-declared. This is necessary to generate enum encode/decode implementations.

        * replay/ReplayController.cpp:
        (WebCore::ReplayController::setForceDeterministicSettings): If async scrolling
        support is available, tell the scrolling tree to behave deterministically.

        * replay/ReplayInputDispatchMethods.cpp:
        (WebCore::HandleWheelEvent::dispatch): Added.
        (WebCore::LogicalScrollPage::dispatch): Added.
        (WebCore::ScrollPage::dispatch): Added.
        * replay/SerializationMethods.cpp: Introduce more specific macros for values
        deserialized to arbitraray lvalues, scalars, RefPtr, and unique_ptr. Fix existing
        uses of decode macros.

        (JSC::EncodingTraits<NondeterministicInputBase>::encodeValue): Fix macro name.
        (JSC::EncodingTraits<KeypressCommand>::encodeValue): Fix macro name.
        (JSC::EncodingTraits<PlatformKeyboardEvent>::encodeValue): Fix macro name.
        (JSC::EncodingTraits<PlatformMouseEvent>::encodeValue): Fix macro name.
        (JSC::PlatformWheelEventCocoa::PlatformWheelEventCocoa): Added. Encapsulate
        and initialize data members specific to PLATFORM(COCOA).

        (JSC::EncodingTraits<PlatformWheelEvent>::encodeValue): Added.
        (JSC::EncodingTraits<PlatformWheelEvent>::decodeValue): Added.
        * replay/SerializationMethods.h:
        * replay/UserInputBridge.cpp: Fill in bridge methods to capture inputs.
        (WebCore::UserInputBridge::handleWheelEvent):
        (WebCore::UserInputBridge::scrollRecursively):
        (WebCore::UserInputBridge::logicalScrollRecursively):
        * replay/WebInputs.json: Add inputs and new enum types.

2014-04-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Upgrade to SelectorFailsAllSiblings when Child selector is failed.
        https://bugs.webkit.org/show_bug.cgi?id=130961

        Reviewed by Benjamin Poulain.

        When Child selector fails, we should resume matching from the closest
        Descendant selector.
        So upgrading SelectorFailsLocally to SelectorFailsAllSibling at least
        to prevent unnecessary direct/indirect adjacent selectors matching.

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

2014-04-04  Roger Fong  <roger_fong@apple.com>

        Keep track of filtered active attribute/uniform indices per shader program.
        https://bugs.webkit.org/show_bug.cgi?id=131235.

        Reviewed by Dean Jackson.

        Tests: Covered by existing Khronos Conformance tests. 
        Will create a test to use multiple shader programs in a follow-up patch.

        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::cacheActiveAttribLocations): Use getActiveAttribImpl. We do not need to use the filtered list of attributes here.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Use filtered list of uniforms for uniform count.
        * platform/graphics/GraphicsContext3D.h: Create a map of shader programs to ActiveShaderSymbolCounts.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::attachShader): 
        When attaching or detaching a shader the shader program's active symbols list will change. Clear it so that it will be updated later.
        (WebCore::GraphicsContext3D::detachShader): Ditto.
        (WebCore::GraphicsContext3D::compileShader): No need to clear symbol counts here.
        (WebCore::GraphicsContext3D::getActiveAttrib): getActiveAttrib should only be able to query for attributes in the filtered list.
        (WebCore::GraphicsContext3D::getActiveUniform): getActiveUniform should only be able to query for uniforms in the filtered list.
        (WebCore::GraphicsContext3D::getNonBuiltInActiveSymbolCount): Return the filtered symbol count for a shader program.

2014-04-04  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Add compositing reason for isolation.
        https://bugs.webkit.org/show_bug.cgi?id=131153

        Reviewed by Joseph Pecoraro.

        There are 2 reasons involving blend modes for a layer to be composited:
        1) the layer has blend mode and has composited descendants: CompositingReasonBlendingWithCompositedDescendants.
        2) the layer has to isolate composited blending descendants: CompositingReasonIsolatesCompositedBlendingDescendants

        Test: inspector-protocol/layers/layers-blending-compositing-reasons.html

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/protocol/LayerTree.json:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing):
        * rendering/RenderLayerCompositor.h: adding CompositingReasonIsolatesCompositedBlendingDescendants.

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

        Use more const refs in ShapeOutsideInfo and some misc cleanup
        https://bugs.webkit.org/show_bug.cgi?id=131192

        Reviewed by Dirk Schulze.

        Use const refs for pretty much everything that can't be null. Also
        cleanup some code that got a bit messy when ShapeInfo was merged into
        ShapeOutsideInfo.

        No new tests, no behavior change.

        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::shapeToRendererPoint):
        (WebCore::ShapeOutsideInfo::shapeToRendererSize):
        (WebCore::referenceBox):
        (WebCore::ShapeOutsideInfo::setReferenceBoxLogicalSize):
        (WebCore::getShapeImageAndRect):
        (WebCore::ShapeOutsideInfo::computedShape):
        (WebCore::ShapeOutsideInfo::logicalTopOffset):
        (WebCore::ShapeOutsideInfo::logicalLeftOffset):
        * rendering/shapes/ShapeOutsideInfo.h:

2014-04-04  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r166615): Pressing return doesn’t submit search term at bing.com
        https://bugs.webkit.org/show_bug.cgi?id=131212
        <rdar://problem/16521788>

        Reviewed by Dan Bernstein.

        Test: fast/forms/submit-while-you-submit.html

        Turns out that m_shouldSubmit can actually be modified in a code path where we can't
        directly return the result. I'm not sure if the current behavior is entirely correct
        (we have open bugs about submitting forms multiple times), but let's restore it to
        pre-r166615 state.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::prepareForSubmission):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:

2014-04-04  Martin Hock  <mhock@apple.com>

        [Mac] Change operation queue width to NSOperationQueueDefaultMaxConcurrentOperationCount.
        https://bugs.webkit.org/show_bug.cgi?id=131231

        <rdar://problem/13913483>

        Reviewed by Brady Eidson.

        No new tests, no behavior change.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::operationQueueForAsyncClients):

2014-04-04  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify Polygon implementation
        https://bugs.webkit.org/show_bug.cgi?id=130975

        Reviewed by Andreas Kling.

        Only floats can specify shape-outside. For polygon shape-outside values, the problem
        of finding the left and right exclusion edges reduces to finding the X axis
        limits of the polygon edges that overlap a particular layout line. This is a much
        simpler version of the problem that PolygonShape was originally designed for, and so
        the implementation can also be simplified. There's more about the new algorithm in
        http://hansmuller-webkit.blogspot.com/2014/03/a-simpler-algorithm-for-css-shapes.html.

        No new tests, since functionality was only removed.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::overlapsYRange):
        (WebCore::FloatRect::overlapsXRange):
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::OffsetPolygonEdge::xIntercept):
        (WebCore::circleXIntercept):
        (WebCore::OffsetPolygonEdge::clippedEdgeXRange): X axis extent of the edge clipped to a vertical interval.
        (WebCore::clippedCircleXRange): X axis extent of a circle clipped to a vertical interval.
        (WebCore::PolygonShape::shapeMarginLogicalBoundingBox):
        (WebCore::PolygonShape::getExcludedIntervals):
        (WebCore::PolygonShape::buildDisplayPaths):
        * rendering/shapes/PolygonShape.h:
        (WebCore::OffsetPolygonEdge::OffsetPolygonEdge):
        (WebCore::OffsetPolygonEdge::isWithinYRange):
        (WebCore::OffsetPolygonEdge::overlapsYRange):
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/ShapeInterval.h:
        (WebCore::ShapeInterval::isEmpty):
        (WebCore::ShapeInterval::unite):

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

        [CSS Shapes] shape-margin in percentage units always computes to 0px
        https://bugs.webkit.org/show_bug.cgi?id=130369

        Reviewed by Andreas Kling.

        Make shape-margin parsing accept percentages and properly compute the
        length once the percentage is accepted.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-shape-margin-percent.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computedShape):

2014-04-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove outside-shape CSS value
        https://bugs.webkit.org/show_bug.cgi?id=131201

        Reviewed by Bem Jones-Bey.

        Outside-shape is not a valid CSS value anymore. This patch removes it.

        No new tests, existing tests are removed.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue):
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computedShape):
        (WebCore::ShapeOutsideInfo::isEnabledFor):
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createOutsideValue): Deleted.

2014-04-04  Dirk Schulze  <krit@webkit.org>

        Gradient offsets are off if compositing operator != source-over
        https://bugs.webkit.org/show_bug.cgi?id=129791

        Reviewed by Andreas Kling.

        Instead of transforming the path before drawing it on the context,
        the whole context should be transformed. This will make the gradient
        map correctly to the context space.

        Test: fast/canvas/canvas-gradient-on-compositing.html

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

2014-04-04  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Move background images to device pixel boundaries.
        https://bugs.webkit.org/show_bug.cgi?id=131144

        Reviewed by Simon Fraser.

        Replace integral snapping with device pixel snapping.
        Background image geometry calculation uses LayoutUnits and we snap to device pixels right before painting.

        Tests: fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html
               fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html
               fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html
               fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsTilePhase):
        (WebCore::GraphicsLayer::contentsTilePhase):
        (WebCore::GraphicsLayer::setContentsTileSize):
        (WebCore::GraphicsLayer::contentsTileSize):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setContentsTileSize):
        (WebCore::TextureMapperLayer::setContentsTilePhase):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
        (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::resolveWidthForRatio):
        (WebCore::resolveHeightForRatio):
        (WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio):
        (WebCore::resolveAgainstIntrinsicRatio):
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::clip):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::relativePhase):
        (WebCore::getSpace):
        (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::applySubPixelHeuristicForTileSize): Deleted.
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destOrigin):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestOrigin):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destRect):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestRect):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::phase):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhase):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::tileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setTileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::spaceSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setSpaceSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseX):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseY):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::getShapeImageAndRect):

2014-04-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix (crash in debug build).

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::legibleOutputCallback): Correct assertion. This
        callback is scheduled for the caption queue, not the main queue.

2014-04-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Load Media Controls js/css from bundle
        https://bugs.webkit.org/show_bug.cgi?id=131194

        Reviewed by Dean Jackson.

        * DerivedSources.cpp: Remove no-longer generated file.
        * DerivedSources.make: Don't generate unneeded files.
        * WebCore.vcxproj/WebCore.vcxproj: Don't compile unneeded files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd: Copy css/js to resource
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:

2014-04-04  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Region's behaviour not updated when becoming valid from invalid
        https://bugs.webkit.org/show_bug.cgi?id=131211

        Reviewed by Andrei Bucur.

        When a region becomes valid again from invalid, it was part of a dependency cycle and the dependency cycle was broken,
        it needs to behave like a valid region again: if it has autoheight then it should compute its height based on the
        named flow content, if it has region styling then it should apply the additional style to the flowed content.

        Added a new method, updateRegionFlags, that is used to ensure that auto-height and region-styling flags
        are properly set in several situations. Checking the behaviour, autoheight or styling, is done only
        if the region is valid.

        Tests: fast/regions/auto-size/autoheight-region-valid-from-invalid.html
               fast/regions/region-styling/region-withstyling-valid-from-invalid.html

        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::updateRegionFlags):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::updateRegionHasAutoLogicalHeightFlag):
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::attachRegion):
        (WebCore::RenderNamedFlowFragment::detachRegion):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::addFragmentToNamedFlowThread):

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

        [GTK][CMake] Remove FindXt.cmake.
        https://bugs.webkit.org/show_bug.cgi?id=131227

        Reviewed by Anders Carlsson.

        * PlatformGTK.cmake: Use FindX11.cmake's Xt variables instead of our own FindXt.cmake's ones.

2014-04-03  Andreas Kling  <akling@apple.com>

        Fast-path for casting JS wrappers to JSElement.
        <https://webkit.org/b/131210>

        Add an extended JSType for Element wrappers so we can avoid walking
        the ClassInfo chain in those bindings as well.

        Generalized the code to select a casting helper in the bindings
        generator into a function (GetCastingHelperForThisObject.)
        Updated all the jsDynamicCast call sites to go through this, in case
        there's an optimized cast available for the desired type.

        Reviewed by Benjamin Poulain.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/JSElementCustom.h: Added.
        (WebCore::jsElementCast):
        * bindings/js/JSNodeCustom.h:
        (WebCore::jsNodeCast):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GetCastingHelperForThisObject):
        (GenerateImplementation):
        * dom/Element.idl:

2014-04-03  Andreas Kling  <akling@apple.com>

        Rebaseline a bindings test.

        * bindings/scripts/test/JS/JSTestNode.h:
        (WebCore::JSTestNode::createStructure):

2014-04-03  Andreas Kling  <akling@apple.com>

        Fast-path for casting JS wrappers to JSNode.
        <https://webkit.org/b/131196>

        Add a way to quickly determine that a given JSObject is a JSNode.
        This lets us avoid walking the ClassInfo chain in the DOM bindings
        for WebCore::Node.

        Reviewed by Mark Hahnenberg and Geoff Garen.

        * bindings/js/JSDOMWrapper.h:

            Added a JSNodeType constant that extends beyond JSC::JSType.

        * bindings/js/JSNodeCustom.h:
        (WebCore::jsNodeCast):

            Added. Fast cast from JSValue to JSNode.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):

            Generate code that uses jsNodeCast in Node interfaces.

2014-04-03  Bem Jones-Bey  <bjonesbe@adobe.com>

        Merge ShapeInfo & ShapeOutsideInfo now that ShapeInsideInfo is no more
        https://bugs.webkit.org/show_bug.cgi?id=131180

        Reviewed by Andreas Kling.

        Now that ShapeInsideInfo is gone, having a class hiearachy and
        templates doesn't make any sense. As a first step to cleaning up the
        code, this remove ShapeInfo and puts all of its functionality into
        ShapeOutsideInfo.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/shapes/ShapeInfo.cpp: Removed.
        * rendering/shapes/ShapeInfo.h: Removed.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computedShapePhysicalBoundingBox):
        (WebCore::ShapeOutsideInfo::shapeToRendererPoint):
        (WebCore::ShapeOutsideInfo::shapeToRendererSize):
        (WebCore::referenceBox):
        (WebCore::ShapeOutsideInfo::setReferenceBoxLogicalSize):
        (WebCore::checkShapeImageOrigin):
        (WebCore::getShapeImageAndRect):
        (WebCore::getShapeImageMarginRect):
        (WebCore::ShapeOutsideInfo::computedShape):
        (WebCore::borderBeforeInWritingMode):
        (WebCore::borderAndPaddingBeforeInWritingMode):
        (WebCore::ShapeOutsideInfo::logicalTopOffset):
        (WebCore::borderStartWithStyleForWritingMode):
        (WebCore::borderAndPaddingStartWithStyleForWritingMode):
        (WebCore::ShapeOutsideInfo::logicalLeftOffset):
        (WebCore::ShapeOutsideInfo::computeSegmentsForLine):
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):
        (WebCore::ShapeOutsideInfo::shapeValue): Deleted.
        (WebCore::ShapeOutsideInfo::styleForWritingMode): Deleted.
        * rendering/shapes/ShapeOutsideInfo.h:

2014-04-03  Andreas Kling  <akling@apple.com>

        Fix over-retain in SharedBufferCF's createCFData().
        <https://webkit.org/b/131139>

        Constructing the return type (RetainPtr<CFDataRef>) will also retain
        the pointee, so this would end up leaking.

        Reviewed by Anders Carlsson.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData):

2014-04-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Turn on ENABLE_CSS_GRID_LAYOUT
        https://bugs.webkit.org/show_bug.cgi?id=131147

        Reviewed by Simon Fraser.

        Covered by existing fast/css/getComputedStyle tests.

        * css/CSSAllInOne.cpp: Add CSSGridLineNamesValue.cpp when building
        with ENABLE(CSS_GRID_LAYOUT)

2014-04-03  Simon Fraser  <simon.fraser@apple.com>

        Pixelated WebView when display is changed from hiDPI to regularDPI
        https://bugs.webkit.org/show_bug.cgi?id=131185

        Reviewed by Tim Horton.

        r166309 added a short circuit in GraphicsLayerCA::updateContentsScale()
        when the scale didn't change. This broke layers which expected to
        unconditionally receive a setContentsScale(), namely the WebTiledBackingLayer
        which owns the TileController. WebTiledBackingLayer overrode -setContentsScale:
        to pass the scale down to the TileController; however, it didn't override
        -contentsScale, and it mucked with the scale passed in.
        
        Fix by having setting and fetching contentsScale on a WebTiledBackingLayer
        work as expected. Also rename the TileController functions to mirror the
        CALayer functions better.

        * WebCore.exp.in:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsScale):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::contentsScale):
        (WebCore::TileController::setContentsScale):
        (WebCore::TileController::scale): Deleted.
        (WebCore::TileController::setScale): Deleted.
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer setContentsScale:]):
        (-[WebTiledBackingLayer contentsScale]):

2014-04-03  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] LineSegment logicalLeft and logicalRight members should be floats
        https://bugs.webkit.org/show_bug.cgi?id=116160

        Reviewed by Andreas Kling. 

        LineSegment edges should not have been changed to LayoutUnit. These are
        used only as floats. I modified them back to floats. 

        No new tests are needed, no behavior change.

        * rendering/shapes/Shape.h:

2014-04-03  Dirk Schulze  <krit@webkit.org>

        [CG] Canvas lineDashOffset does not handle negative numbers correctly
        https://bugs.webkit.org/show_bug.cgi?id=80560

        Reviewed by Dean Jackson.

        CG ignores negative dash array offsets. Check if we have a negative offset, if yes
        then calculate the length of the dash array and modulo the dash array offset with
        the dash array length.

        Test: fast/canvas/canvas-negative-lineDashOffset.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setLineDash):

2014-04-03  David Hyatt  <hyatt@apple.com>

        REGRESSION: fast/css/relative-positioned-block-nested-with-inline-parent-multiple-descendant-blocks-dynamic.html broken
        https://bugs.webkit.org/show_bug.cgi?id=131183

        Reviewed by Simon Fraser.

        Revert the loop to continue rather than breaking when an invalid block is encountered.
        This is what it used to do if it encountered a non-continuation block.

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

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

        Harden FilterOperation type casting
        https://bugs.webkit.org/show_bug.cgi?id=131142

        Reviewed by Sam Weinig.

        DefaultFilterOperation had an error-prone behavior where it set the base class
        OperationType to the type of some other filter class, but overrode isDefault(). 
        This made it very easy to write incorrect code that casted incorrectly based on type().
        
        Fix by making adding a DEFAULT filter operation type, and storing the represented
        type on DefaultFilterOperation().
        
        Also remove the OperationType argument for constructors of FilterOperations that
        can only be of one type, to avoid possible mistakes.
        
        Make the type cast macros a bit more normal, and use them in a few places.
        
        Fixed PlatformCAFiltersMac to handle the default filter case more cleanly.

        * WebCore.exp.in:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::filterValueForOperation):
        (PlatformCAFilters::colorMatrixValueForFilter):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::DefaultFilterOperation::operator==):
        (WebCore::ReferenceFilterOperation::ReferenceFilterOperation):
        (WebCore::ReferenceFilterOperation::operator==):
        (WebCore::BlurFilterOperation::operator==):
        (WebCore::BlurFilterOperation::blend):
        (WebCore::DropShadowFilterOperation::operator==):
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::blend):
        (WebCore::FilterOperation::type):
        (WebCore::FilterOperation::isBasicColorMatrixFilterOperation):
        (WebCore::FilterOperation::isBasicComponentTransferFilterOperation):
        (WebCore::FilterOperation::isSameType):
        (WebCore::DefaultFilterOperation::create):
        (WebCore::DefaultFilterOperation::representedType):
        (WebCore::DefaultFilterOperation::DefaultFilterOperation):
        (WebCore::ReferenceFilterOperation::create):
        (WebCore::BlurFilterOperation::create):
        (WebCore::BlurFilterOperation::BlurFilterOperation):
        (WebCore::DropShadowFilterOperation::create):
        (WebCore::DropShadowFilterOperation::DropShadowFilterOperation):
        (WebCore::FilterOperation::isDefault): Deleted.
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::outsets):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):

2014-04-03  Andreas Kling  <akling@apple.com>

        Stop throwing away the Document's StyleResolver on a timer.
        <https://webkit.org/b/131168>
        <rdar://problem/15227045>

        This was causing some unfortunate pauses when returning to idle pages
        after a long-ish time. There's already a mechanism in place that will
        throw these away if the system comes under memory pressure.

        Reviewed by Sam Weinig.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didAccessStyleResolver): Deleted.
        (WebCore::Document::styleResolverThrowawayTimerFired): Deleted.
        * dom/Document.h:

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

        Assertion under RenderLayerCompositor::updateScrollCoordinatedLayer on time.com on iOS
        https://bugs.webkit.org/show_bug.cgi?id=131150

        Reviewed by Beth Dakin.

        When calling updateScrollCoordinatedLayer() under styleChanged, we haven't done
        layout yet so our composting layers haven't been hooked together. Don't try
        to add a zero nodeID to the map in this case.

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

2014-04-03  David Hyatt  <hyatt@apple.com>

        Continuations casting issue.
        https://bugs.webkit.org/show_bug.cgi?id=130057
        <rdar://problem/16283406>

        Reviewed by Simon Fraser.

        The code to update relative positioned anonymous block continuations should not
        have assumed that all siblings were RenderBlocks. Make the code smarter and
        make it bail when it hits something that isn't part of the block continuation
        chain.

        Added fast/block/continuation-crash.html

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

2014-04-03  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] CRASH with calc() value args in inset round
        https://bugs.webkit.org/show_bug.cgi?id=129816

        Reviewed by Andreas Kling.

        The code to parse the inset rounded corners was adding the parser
        value arguments to a temporary CSSParserValueList. Unfortunately,
        CSSParserValueList expects to own the values it contains, and it frees
        the values it contains when the list is destroyed. This was a problem
        because the values are owned by the CSSParserValueList passed in to
        parseInsetRoundedCorners, and thus the calc's argument list would get
        double freed, resulting in a crash. This patch fixes this by using a
        Vector to hold the pointers instead.

        Test: fast/shapes/shape-outside-floats/shape-outside-inset-round-calc-crash.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseInsetRoundedCorners):

2014-04-03  Jer Noble  <jer.noble@apple.com>

        Leaving a streaming movie by going "Back" keeps playing the audio
        https://bugs.webkit.org/show_bug.cgi?id=131149

        Reviewed by Eric Carlson.

        When stopping a HTMLMediaElement, call userCancelledLoad() (which clears the
        MediaPlayer) only after calling setPausedInternal() (which pauses the MediaPlayer).
        Previously, and in the reverse order, the MediaPlayer would never get a chance to pause
        before being cleared. There is an underlying error with the QTKit media engine which
        is causing it to continue playing even after its last reference is released, but this
        does fix the symptom of playback continuing even after stopping.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::stop):

2014-04-03  Jer Noble  <jer.noble@apple.com>

        [EME] Crash when passing a NULL initData to MediaKeys.createSession()
        https://bugs.webkit.org/show_bug.cgi?id=131156

        Reviewed by Eric Carlson.

        Update the checks at the start of createSession() to match the current spec, notably
        bailing early if the initData parameter is NULL or empty.

        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::createSession):

2014-04-03  Eric Carlson  <eric.carlson@apple.com>

        [iOS] add missing QuickTime plug-in replacement API
        https://bugs.webkit.org/show_bug.cgi?id=131042

        Reviewed by Dean Jackson.

        Rename QuickTimePluginReplacement.cpp to QuickTimePluginReplacement.mm to make it possible
        to use the ObjC JSC API.
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * Modules/plugins/QuickTimePluginReplacement.h:
        (WebCore::QuickTimePluginReplacement::parentElement):
        * Modules/plugins/QuickTimePluginReplacement.idl:

        * Modules/plugins/QuickTimePluginReplacement.js:
        (Replacement.prototype.timedMetadataUpdates): Implement.
        (Replacement.prototype.accessLog): Ditto.
        (Replacement.prototype.errorLog): Ditto.

        Use the JSC ObjC API to create a JavaScript object from an array of AVMetadataItems. The
        JSC ObjC API supports basic NSTypes, but an AVMetadataItem can also contain NSData which 
        the existing plug-in returns as base-64 encoded data, so create wrappers for NSDictionary
        and NSArray.
        * Modules/plugins/QuickTimePluginReplacement.mm: Copied from Source/WebCore/Modules/plugins/QuickTimePluginReplacement.cpp.
        (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected): Disambiguate with "JSC::"
        (WebCore::QuickTimePluginReplacement::installReplacement): Ditto.
        (WebCore::jsValueWithDataInContext): Create JSValue* from NSData.
        (WebCore::jsValueWithArrayInContext): Create JSValue* from NSArray.
        (WebCore::jsValueWithDictionaryInContext): Create JSValue* from NSDictionary.
        (WebCore::jsValueWithValueInContext): Create JSValue* from basic NSTypes plus AVMetadataItem
            and NSData.
        (WebCore::jsValueWithAVMetadataItemInContext): Create JSValue* from AVMetadataItem.
        (WebCore::JSQuickTimePluginReplacement::timedMetaData): Script interface.
        (WebCore::JSQuickTimePluginReplacement::accessLog): Ditto.
        (WebCore::JSQuickTimePluginReplacement::errorLog): Ditto.

        * WebCore.xcodeproj/project.pbxproj: QuickTimePluginReplacement.cpp -> QuickTimePluginReplacement.mm.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::timedMetadata): iOS only accessor.
        (WebCore::MediaPlayer::accessLog): Ditto.
        (WebCore::MediaPlayer::errorLog): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::timedMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::accessLog):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::errorLog):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (WebCore::itemKVOProperties):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2014-04-03  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Include region range information when printing the render tree
        https://bugs.webkit.org/show_bug.cgi?id=131159

        Reviewed by Mihnea Ovidenie.

        With this change showRenderObject() will print the region range for objects inside
        a flow thread. The format is:
        Rs: <startRegion> Re: <endRegion>

        Because this can be called anytime during debugging, it's necessary to disable the
        current flow thread caching to prevent using the wrong flow thread for an object.

        Tests: No new tests, no functional change.

        * rendering/RenderFlowThread.cpp:
        (WebCore::CurrentRenderFlowThreadDisabler::CurrentRenderFlowThreadDisabler):
        (WebCore::CurrentRenderFlowThreadDisabler::~CurrentRenderFlowThreadDisabler):
        * rendering/RenderFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRegionsInformation): Added.
        (WebCore::RenderObject::showRenderObject):
        * rendering/RenderObject.h:

2014-04-03  Antti Koivisto  <antti@apple.com>

        RenderSnapshottedPlugIn::paint should use iterator for traversal.
        https://bugs.webkit.org/show_bug.cgi?id=131158

        Reviewed by Dean Jackson.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paint):

2014-03-27  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] <string> not allowed in grid-{area | row | column} syntax
        https://bugs.webkit.org/show_bug.cgi?id=129713

        Reviewed by Darin Adler.

        Grid positioning properties no longer accept <string> values for
        named grid lines as they did in previous versions of the specs. They
        were first replaced by <ident> and since the beginning of 2014 they
        should only accept <custom-ident>.

        Updated the parser and the style resolver to this new syntax. Also
        updated the tests accordingly.

        Test: fast/css-grid-layout/grid-container-change-named-grid-lines-recompute-child.html

        * css/CSSParser.cpp:
        (WebCore::isValidCustomIdent): New function that checks that the
        <custom-ident> is valid.
        (WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition):
        (WebCore::CSSParser::parseGridPosition):
        (WebCore::CSSParser::parseIntegerOrStringFromGridPosition):
        Replaced by WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition.
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::createGridPosition):

2014-04-03  Antti Koivisto  <antti@apple.com>

        Crash after mutating after pseudo style
        https://bugs.webkit.org/show_bug.cgi?id=130881

        Reviewed by Andreas Kling.

        Test: fast/css/pseudo-after-crash.html

        * style/StyleResolveTree.cpp:
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        
            Invalidate the cached renderer for pseudo elements too.
    
        (WebCore::Style::needsPseudeElement): Deleted.
        
            Fix spelling.

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

        AX: AccessibilityObject::children() returns invalid results sometimes
        https://bugs.webkit.org/show_bug.cgi?id=130563

        Reviewed by Joseph Pecoraro.

        Allow the DOM inspector to handle AX objects that do not have Node equivalents
        (e.g. anonymous renderers).

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::processAccessibilityChildren):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/InspectorDOMAgent.h:

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

        Sandbox violation in NetworkProcess when uploading a bundle
        https://bugs.webkit.org/show_bug.cgi?id=131133

        Reviewed by Brady Eidson.

        Track generated file ownership explicitly, so that each copy of FormData would know
        whether to delete the file.

        This part is needed to prevent asserting in FormData destructor in NetworkProcess,
        because it doesn't delete the files. Also, some cleanup.

        * WebCore.exp.in: Don't export FormData::removeGeneratedFilesIfNeeded(), WebKit2
        doesn't need it any more.
        * platform/network/FormData.cpp: Removed m_hasGeneratedFiles. There is no problem
        iterating over FormDataElements to compute it, and that's more robust when FormDatas
        are passed or stored on disk permanently.
        Updated touched functions to use C++ iteration, and renamed "e" to "element".
        (WebCore::FormData::encode): Keep encoding a boolean for hasGeneratedFiles, because
        the encoded FormData can be stored persitently, and we can't change the format.

        * platform/network/FormData.h: (WebCore::FormDataElement::FormDataElement):
        Added m_ownsGeneratedFile. FormData will only delete files it owns. Since files
        are generated immediately before form submission, it's always the FormData being
        submitted that owns the generated files.

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

        [CSSRegions] Use RenderStyle::hasFlowInto when needed
        https://bugs.webkit.org/show_bug.cgi?id=131092

        Reviewed by Andrei Bucur.

        Add hasFlowInto() helper method on RenderStyle to be used
        instead of directly checking the presence or absence of flowThread value.
        No new functionality, no new tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * dom/Element.cpp:
        (WebCore::Element::shouldMoveToFlowThread):
        * rendering/style/RenderStyle.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::isRendererReparented):

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

        CSS JIT: the adjacent position is never reset
        https://bugs.webkit.org/show_bug.cgi?id=131145

        Reviewed by Andreas Kling.

        Corresponding radar: <rdar://problem/16440036>. The backtracking action would use a tail
        when not needed.

        Test: fast/selectors/multiple-adjacent-chain-without-adjacent-tail.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::updateChainStates):

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

        Speculative build fix for Windows.

        * DerivedSources.make: Make sure we generate our media control
        scripts for Apple Windows (but not WinCairo)

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Fix the !USE(IOSURFACE) iOS build.

        * platform/ios/MemoryPressureHandlerIOS.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):

2014-04-02  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/131136> Remove FrameLoadRequest's m_lockHistory member since it's always false.

        Reviewed by Andreas Kling.

        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::lockHistory): Deleted.
        (WebCore::FrameLoadRequest::setLockHistory): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load): Remove an if whose body was never executed.

2014-04-02  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/131135> Introduce LockHistory and LockBackForwardList enums to use in place of bools.

        These arguments are often passed using literals at the call site, where the use of bools severely hinders
        the readability of the code.

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::setLocation):
        * html/HTMLFrameElementBase.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::FormSubmission):
        (WebCore::FormSubmission::create):
        * loader/FormSubmission.h:
        (WebCore::FormSubmission::lockHistory):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::ScheduledNavigation):
        (WebCore::ScheduledNavigation::lockHistory):
        (WebCore::ScheduledNavigation::lockBackForwardList):
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        (WebCore::ScheduledRedirect::ScheduledRedirect):
        (WebCore::ScheduledLocationChange::ScheduledLocationChange):
        (WebCore::ScheduledRefresh::ScheduledRefresh):
        (WebCore::ScheduledHistoryNavigation::ScheduledHistoryNavigation):
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::mustLockBackForwardList):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        * loader/NavigationScheduler.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::loadOrRedirectSubframe):
        * loader/SubframeLoader.h:
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Pool IOSurfaces to help with allocation cost
        https://bugs.webkit.org/show_bug.cgi?id=131096
        <rdar://problem/15373942>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        
        * platform/Timer.h:
        (WebCore::TimerBase::startRepeating): Add a std::chrono startRepeating.

        * platform/graphics/cg/IOSurfacePool.h: Added.
        (WebCore::IOSurfacePool::CachedSurfaceDetails::CachedSurfaceDetails):
        (WebCore::IOSurfacePool::CachedSurfaceDetails::resetLastUseTime):
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Removed.
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Removed.
        * platform/graphics/cg/IOSurfacePool.cpp: Added.
        (WebCore::IOSurfacePool::IOSurfacePool):
        (WebCore::IOSurfacePool::sharedPool):
        (WebCore::surfaceMatchesParameters):
        (WebCore::IOSurfacePool::willAddSurface):
        (WebCore::IOSurfacePool::didRemoveSurface):
        (WebCore::IOSurfacePool::didUseSurfaceOfSize):
        (WebCore::IOSurfacePool::takeSurface):
        (WebCore::IOSurfacePool::addSurface):
        (WebCore::IOSurfacePool::insertSurfaceIntoPool):
        (WebCore::IOSurfacePool::setPoolSize):
        (WebCore::IOSurfacePool::tryEvictInUseSurface):
        (WebCore::IOSurfacePool::tryEvictOldestCachedSurface):
        (WebCore::IOSurfacePool::evict):
        (WebCore::IOSurfacePool::collectInUseSurfaces):
        (WebCore::IOSurfacePool::markOlderSurfacesPurgeable):
        (WebCore::IOSurfacePool::collectionTimerFired):
        (WebCore::IOSurfacePool::scheduleCollectionTimer):
        (WebCore::IOSurfacePool::discardAllSurfaces):
        (WebCore::IOSurfacePool::showPoolStatistics):
        Add a pool of IOSurfaces. It behaves as such:

            - Keeps up to 64MB of surfaces.
            - Keeps unused and in-use surfaces (but never gets more than 1/2 full with the latter)
            - Marks surfaces purgeable after they've been unused for 2 seconds.
            - Tries to move surfaces from the in-use pool to the unused pool every 500ms.
            - Evicts in an LRU-ish fashion, interleaving eviction of the oldest
              surfaces and the in-use surfaces (since in-use surfaces are not immediately
              useful for the pool, but they are desirous because they were recently used).
            - Throws everything away under memory pressure.

        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::create):
        Try to grab a surface from the IOSurfacePool.

        * platform/ios/MemoryPressureHandlerIOS.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        Fix some includes, and throw away all surfaces when we're under memory pressure.

2014-04-02  Stephanie Lewis  <slewis@apple.com>

        Roll out http://trac.webkit.org/changeset/166144
        <rdar://problem/16481284> PLT stops loading on news.google.com

        Unreviewed rollout.

        Rollout 166144 since it prevents the PLT from completing.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        (WebCore::ContainerNode::queuePostAttachCallback):
        (WebCore::ContainerNode::postAttachCallbacksAreSuspended):
        (WebCore::ContainerNode::dispatchPostAttachCallbacks):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Element.h:
        (WebCore::PostAttachCallbackDisabler::PostAttachCallbackDisabler):
        (WebCore::PostAttachCallbackDisabler::~PostAttachCallbackDisabler):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::focusPostAttach):
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        (WebCore::updateFromElementCallback):
        (WebCore::HTMLFormControlElement::didRecalcStyle):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::needsStyleRecalcCallback):
        (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        (WebCore::HTMLObjectElement::hasValidClassId):
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        (WebCore::HTMLPlugInImageElement::willDetachRenderers):
        (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        (WebCore::HTMLPlugInImageElement::startLoadingImage):
        (WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        (WebCore::HTMLPlugInImageElement::didRecalcStyle): Deleted.
        (WebCore::HTMLPlugInImageElement::scheduleUpdateForAfterStyleResolution): Deleted.
        (WebCore::HTMLPlugInImageElement::updateAfterStyleResolution): Deleted.
        (WebCore::HTMLPlugInImageElement::removedFrom): Deleted.
        (WebCore::is100Percent): Deleted.
        (WebCore::HTMLPlugInImageElement::setNeedsImageReload): Deleted.
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::imageLoader): Deleted.
        (WebCore::HTMLPlugInImageElement::updateImageLoaderWithNewURLSoon): Deleted.
        * style/StyleResolveTree.cpp:
        (WebCore::Style::needsPseudeElement):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::needsPseudoElement): Deleted.
        (WebCore::Style::postResolutionCallbackQueue): Deleted.
        (WebCore::Style::queuePostResolutionCallback): Deleted.
        (WebCore::Style::suspendMemoryCacheClientCalls): Deleted.
        (WebCore::Style::PostResolutionCallbackDisabler::PostResolutionCallbackDisabler): Deleted.
        (WebCore::Style::PostResolutionCallbackDisabler::~PostResolutionCallbackDisabler): Deleted.
        (WebCore::Style::postResolutionCallbacksAreSuspended): Deleted.
        * style/StyleResolveTree.h:

2014-04-02  Jinwoo Song  <jinwoo7.song@samsung.com>

        Page should use std::unique_ptr for PointerLockController
        https://bugs.webkit.org/show_bug.cgi?id=131098

        Reviewed by Anders Carlsson.

        Make Page keep a std::unique_ptr to PointerLockController. Store page 
        references and return controller references where possible.

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::webkitExitPointerLock):
        (WebCore::Document::webkitPointerLockElement):
        * dom/Element.cpp:
        (WebCore::Element::removedFrom):
        (WebCore::Element::webkitRequestPointerLock):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::pointerLockController):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::PointerLockController):
        (WebCore::PointerLockController::requestPointerLock):
        (WebCore::PointerLockController::requestPointerUnlock):
        (WebCore::PointerLockController::create): Deleted.
        * page/PointerLockController.h:

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

        Load Media Controls js/css from bundle
        https://bugs.webkit.org/show_bug.cgi?id=131086

        Followup comments from Eric Carlson.

        Remove the booleans that were guarding loading the resources.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet):
        (WebCore::RenderThemeIOS::mediaControlsScript):
        (WebCore::RenderThemeIOS::RenderThemeIOS):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::mediaControlsStyleSheet):
        (WebCore::RenderThemeMac::mediaControlsScript):

2014-04-01  Dean Jackson  <dino@apple.com>

        Load Media Controls js/css from bundle
        https://bugs.webkit.org/show_bug.cgi?id=131086

        Reviewed by Eric Carlson.

        Rather than embed encoded versions of the JS and CSS files
        into C++ source, just load the files directly from the bundle.

        * DerivedSources.make: Removed now unnecessary rules.
        * WebCore.xcodeproj/project.pbxproj: Copy mediaControls files to the bundle.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::RenderThemeIOS):
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet): Load from the bundle.
        (WebCore::RenderThemeIOS::mediaControlsScript): Ditto.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::mediaControlsStyleSheet):
        (WebCore::RenderThemeMac::mediaControlsScript):

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

        Move focus management API from HTMLDocument to Document
        https://bugs.webkit.org/show_bug.cgi?id=131079
        <rdar://problem/16220103>

        Reviewed by Timothy Hatcher.

        Merged from Blink (patch by Christophe Dumez):
        https://src.chromium.org/viewvc/blink?view=rev&revision=165515

        Move hasFocus() and attribute activeElement from interface HTMLDocument
        to DOMDocument as per section Focus management APIs of the HTML5 standard:
        <http://www.whatwg.org/specs/web-apps/current-work/#focus-management-apis> (1 April 2014).

        Test: fast/dom/Document/xml-document-focus.xml

        * bindings/objc/PublicDOMInterfaces.h: Moved hasFocus() and property activeElement from
        interface DOMHTMLDocument to DOMDocument.
        * dom/Document.cpp:
        (WebCore::Document::activeElement): Added.
        (WebCore::Document::hasFocus): Added.
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::activeElement): Deleted.
        (WebCore::HTMLDocument::hasFocus): Deleted.
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:

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

        Refactor the function call generator to take the arguments by value
        https://bugs.webkit.org/show_bug.cgi?id=131129

        Reviewed by Andreas Kling.

        Nothing forces the pointed address to stay alive between setOneArgument/setTwoArguments
        and prepareAndCall.

        This patch changes FunctionCall to:
        -Keep the register by value instead of using pointers.
        -Crash at compile time if a register is invalid.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setOneArgument):
        (WebCore::FunctionCall::setTwoArguments):
        (WebCore::FunctionCall::swapArguments):
        (WebCore::FunctionCall::prepareAndCall):
        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::isValidRegister):

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

        Remove Settings::maximumDecodedImageSize()
        https://bugs.webkit.org/show_bug.cgi?id=131057
        <rdar://problem/15626368>

        Reviewed by Darin Adler.

        The setting Settings::maximumDecodedImageSize() and its related logic have various
        shortcomings, including the inability to cancel an image load when the estimated
        decoded image size exceeds the maximum decoded image size. In the iOS port, this
        setting is less useful given image subsampling support. For now, we remove this
        setting and its related logic. Should it turn out that such a setting is useful
        then we can implement it again taking care to address the shortcomings in the
        original design.

        * html/HTMLCanvasElement.cpp: For the iOS port, define MaxCanvasArea to be 4580 * 1145
        pixels such that the maximum size of the image buffer is 20 MB (assumes 4 bytes per pixel).
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addIncrementalDataBuffer):
        (WebCore::CachedImage::finishLoading):
        * loader/cache/CachedImage.h:
        * page/Settings.in:

2014-04-02  Martin Hock  <mhock@apple.com>

        Unify private browsing with sessions.
        https://bugs.webkit.org/show_bug.cgi?id=130099

        Reviewed by Alexey Proskuryakov.

        Unless otherwise noted, the following consists solely of mechanical changes to replace querying WebCore::Settings::privateBrowsingEnabled() with Page::usesEphemeralSession().

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::allowDatabaseAccess):
        * WebCore.exp.in: Remove Settings::setPrivateBrowsingEnabled, add Page::legacyPrivateBrowsingEnabled.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForClientRedirect):
        (WebCore::HistoryController::updateForSameDocumentNavigation):
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::update):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::isApplicationCacheEnabled):
        * loader/icon/IconController.cpp:
        (WebCore::IconController::continueLoadWithDecision):
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize with defaultSessionID.
        (WebCore::Page::legacyPrivateBrowsingEnabled): Legacy setting for private browsing.
        (WebCore::Page::privateBrowsingStateChanged): Move implementation to setSessionID.
        (WebCore::Page::sessionID): Simplify to just return m_sessionID.
        (WebCore::Page::setSessionID): Also perform privateBrowsingStateChanged action.a
        (WebCore::Page::privateBrowsingStateChanged): Deleted.
        (WebCore::Page::checkSubframeCountConsistency): Deleted.
        * page/Page.h:
        * page/PageConsole.cpp:
        (WebCore::PageConsole::addMessage):
        (WebCore::PageConsole::messageWithTypeAndLevel):
        * page/Settings.cpp: Remove privateBrowsingEnabled setting.
        (WebCore::Settings::Settings):
        (WebCore::Settings::setPrivateBrowsingEnabled): Page reflects setting using session.
        * page/Settings.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValue):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::addSearchResult):
        * storage/Storage.cpp:
        (WebCore::Storage::isDisabledByPrivateBrowsing):

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

        Try to fix test failures.

        * platform/graphics/ca/mac/TileGrid.mm:
        (WebCore::TileGrid::TileGrid):  Initialize a field.

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

        Remove Input domain from the Web Inspector protocol.

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

        Reviewed by Joseph Pecoraro.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorInputAgent.cpp: Removed.
        * inspector/InspectorInputAgent.h: Removed.
        * inspector/protocol/Input.json: Removed.

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

        Split tile grid out from TileController
        https://bugs.webkit.org/show_bug.cgi?id=131102

        Reviewed by Simon Fraser.

        Add a TileGrid class that encapsulates tiles, zoom level and the related metadata.
        This will make it possible to have multiple grids per TileController later.

2014-03-31  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct media controls for test harness
        https://bugs.webkit.org/show_bug.cgi?id=131008 

        Reviewed by Eric Carlson.

        * rendering/RenderThemeSafari.cpp: Revise to match RenderThemeWin logic.
        (WebCore::RenderThemeSafari::systemFont):
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton):
        (WebCore::RenderThemeSafari::mediaControlsStyleSheet):
        (WebCore::RenderThemeSafari::mediaControlsScript):
        (WebCore::RenderThemeSafari::paintMediaFullscreenButton): Deleted.
        (WebCore::RenderThemeSafari::paintMediaMuteButton): Deleted.
        (WebCore::RenderThemeSafari::paintMediaPlayButton): Deleted.
        (WebCore::RenderThemeSafari::paintMediaSeekBackButton): Deleted.
        (WebCore::RenderThemeSafari::paintMediaSeekForwardButton): Deleted.
        (WebCore::RenderThemeSafari::paintMediaSliderTrack): Deleted.
        (WebCore::RenderThemeSafari::paintMediaSliderThumb): Deleted.
        * rendering/RenderThemeSafari.h:

2014-04-02  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=131110

        Reviewed by Simon Fraser.

        Image::size() now returns a FloatSize instead of an IntSize.

        * platform/win/DragImageCairoWin.cpp:
        (WebCore::createDragImageFromImage):

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

        Use outermost containing isolate when constructing bidi runs
        <http://webkit.org/b/131107>
        <rdar://problem/15690021>

        Reviewed by Darin Adler.

        Merged from Blink (patch by jww@chromium.org):
        https://src.chromium.org/viewvc/blink?revision=157268&view=revision
        http://crbug.com/279277

            Update containingIsolate to go back all the way to top
            isolate from current root, rather than stopping at the first
            isolate it finds. This works because the current root is
            always updated with each isolate run.

        Tests: fast/text/international/unicode-bidi-isolate-nested-with-removes-not-adjacent.html
               fast/text/international/unicode-bidi-isolate-nested-with-removes.html

        * rendering/InlineIterator.h:
        (WebCore::highestContainingIsolateWithinRoot):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment):

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

        AX: Improve ARIA live region reliability by sending notifications when live regions are created/shown and hidden/destroyed
        https://bugs.webkit.org/show_bug.cgi?id=124381

        Reviewed by Mario Sanchez Prada.

        Re-organize some code so that when we detect a new node has been created, we can safely determine its live region status.
        If it is a live region, we fire off a live region created notification.

        Test: platform/mac/accessibility/live-region-creation-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleLiveRegionCreated):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::handleAttributeChanged):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::childrenChanged):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::defaultLiveRegionStatusForRole):
        (WebCore::AccessibilityObject::liveRegionStatusIsEnabled):
        (WebCore::AccessibilityObject::supportsARIALiveRegion):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::ariaLiveRegionStatus):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaLiveRegionStatus):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper postLiveRegionCreatedNotification]):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2014-04-02  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(r165704): [GTK] Inspector resources not correctly generated
        https://bugs.webkit.org/show_bug.cgi?id=130343

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Generate the web inspector JS file into the new WebInspectorUI derived sources
        directory.

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

        Unreviewed build fix after r166642.
        (WinCairo should really turn subpixel layout on.)

        * platform/graphics/LayoutSize.h:
        (WebCore::flooredForPainting):

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

        Subpixel rendering: Make GraphicsContext::drawTiledImage* functions float based.
        https://bugs.webkit.org/show_bug.cgi?id=131062

        Reviewed by Simon Fraser.

        This is in preparation to support subpixel positioned/sized background images. Generated images
        need to be able to sized on device pixels.

        No change in behavior.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:

2014-04-02  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Build fix after r166496.
        https://bugs.webkit.org/show_bug.cgi?id=131006

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::activeChanged):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcChangeState):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):
        Added std::function<void()> constructors to help Visual Studio decide which version of 
        GMainLoopSource::schedule or GMainLoopSource::scheduleAfterDelay to use.

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

        Subpixel rendering: Transition class CSSImageGeneratorValue/class StyleImage (and its dependencies) from 
        IntSize to FloatSize to enable subpixel sized (generated)images.
        https://bugs.webkit.org/show_bug.cgi?id=130659

        Reviewed by Simon Fraser and Andreas Kling.

        This is in preparation to support subpixel positioned/sized background images. Generated images
        needs to be able to sized on device pixels.

        No change in behavior.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::fixedSize):
        (WebCore::CSSCanvasValue::image):
        * css/CSSCanvasValue.h:
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::fixedSize):
        (WebCore::CSSCrossfadeValue::image):
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::fixedSize):
        (WebCore::CSSFilterImageValue::image):
        * css/CSSFilterImageValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        (WebCore::positionFromValue):
        (WebCore::CSSGradientValue::computeEndPoint):
        (WebCore::endPointsFromAngle):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::fixedSize):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::cachedImageForSize):
        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize):
        (WebCore::CSSImageGeneratorValue::evictCachedGeneratedImage):
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::CachedGeneratedImage):
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        * css/CSSImageGeneratorValue.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setContainerSizeForRenderer):
        * loader/cache/CachedImage.h:
        * platform/graphics/FloatSizeHash.h: Added.
        (WTF::FloatHash<WebCore::FloatSize>::hash):
        (WTF::FloatHash<WebCore::FloatSize>::equal):
        (WTF::HashTraits<WebCore::FloatSize>::constructDeletedValue):
        (WTF::HashTraits<WebCore::FloatSize>::isDeletedValue):
        * platform/graphics/LayoutSize.h:
        (WebCore::flooredForPainting):
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::imageSize):
        (WebCore::StyleCachedImage::setContainerSizeForRenderer):
        (WebCore::StyleCachedImage::image):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::imageSize):
        (WebCore::StyleCachedImageSet::setContainerSizeForRenderer):
        (WebCore::StyleCachedImageSet::image):
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::imageSize):
        (WebCore::StyleGeneratedImage::computeIntrinsicDimensions):
        (WebCore::StyleGeneratedImage::image):
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/style/StylePendingImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::setContainerSizeForRenderer):
        * svg/graphics/SVGImageCache.h:

2014-04-02  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Warning fix for RenderLayer.
        https://bugs.webkit.org/show_bug.cgi?id=131090

        Reviewed by Csaba Osztrogonác.

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

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

        Operator stretching: read the Open Type MATH table
        https://bugs.webkit.org/show_bug.cgi?id=130324

        Reviewed by Chris Fleizach.

        We parse and expose some data from the OpenType MATH table that will be
        be relevant for at least the MathML operator stretching (bug 130322):
        math constants, italic corrections and size variants / glyph assembly.
        This will be tested when the MathML code uses the data.

        * WebCore.xcodeproj/project.pbxproj: Add OpenTypeTypes.h to the Mac build.
        * platform/graphics/opentype/OpenTypeMathData.cpp: We implement the low-level parsing of the MATH table.
        (WebCore::OpenType::MathItalicsCorrectionInfo::getItalicCorrection):
        (WebCore::OpenType::MathGlyphInfo::mathItalicsCorrectionInfo):
        (WebCore::OpenType::GlyphAssembly::getAssemblyParts):
        (WebCore::OpenType::MathGlyphConstruction::getSizeVariants):
        (WebCore::OpenType::MathGlyphConstruction::getAssemblyParts):
        (WebCore::OpenType::MathVariants::mathGlyphConstruction):
        (WebCore::OpenType::MATHTable::mathConstants):
        (WebCore::OpenType::MATHTable::mathGlyphInfo):
        (WebCore::OpenType::MATHTable::mathVariants):
        (WebCore::OpenTypeMathData::OpenTypeMathData): We load the MATH table.
        (WebCore::OpenTypeMathData::getMathConstant): We add a function to get values from the MathConstant subtable.
        (WebCore::OpenTypeMathData::getItalicCorrection): We add a function to get italic correction from the MathGlyphInfo subtable.
        (WebCore::OpenTypeMathData::getMathVariants): We add a function to get size variants / glyph assembly from the MathVariants subtable.
        * platform/graphics/opentype/OpenTypeMathData.h: We expose three new functions to get math data.
        * platform/graphics/opentype/OpenTypeTypes.h: We share the coverage tables that are common to vertical and math data.
        (WebCore::OpenType::TableWithCoverage::getCoverageIndex): We add a function to get the coverage index from a given glyph.
        * platform/graphics/opentype/OpenTypeVerticalData.cpp: We move the coverage tables to OpenTypeTypes.h.

2014-04-02  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Compositing requirements for blending are not computed correctly
        https://bugs.webkit.org/show_bug.cgi?id=130664

        Reviewed by Dean Jackson.

        Tests: css3/compositing/blend-mode-accelerated-with-multiple-stacking-contexts.html
               css3/compositing/blend-mode-with-accelerated-sibling.html

        Compositing requirements for blending: if a layer having blend mode
        other than normal is composited for any reason, its closest stacking
        context ancestor should be composited as well.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        * rendering/RenderLayer.h: added a new field,
        m_hasUnisolatedCompositedBlendingDescendants, which is true if the layer
        has composited blending descendants not isolated by any stacking context child;
        added a new method: isolatesCompositedBlending(), which is true if we should
        accelerate that layer in order to perform isolation correctly.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState): m_subtreeHasBlending was renamed
        m_hasUnisolatedCompositedBlendingDescendants in order to be more self-explanatory.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        computes the isolation requirements for composited blending by
        (re)setting RenderLayer::m_hasUnisolatedCompositedBlendingDescendants flag.

        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        fixed the reason of compositing: isolation instead of blending.

        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason):
        * rendering/RenderLayerCompositor.h:

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

        Operator stretching: expose a math data API
        https://bugs.webkit.org/show_bug.cgi?id=130572

        Reviewed by Chris Fleizach.

        We expose a new SimpleFontData API to give access to the data from the
        OpenType MATH table. The class OpenTypeMathData will
        be implemented in bug 130324. On Darwin platform, we also implement the
        missing FontPlatformData::openTypeTable function which will be necessary
        to load the OpenType MATH table. The changes are intended to be used
        for MathML operator stretching (bug 130322) so tests are not added yet.

        * CMakeLists.txt: add new OpenTypeMathData files.
        * WebCore.vcxproj/WebCore.vcxproj: ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::openTypeTable): We implement openTypeTable() on Darwin platform.
        * platform/graphics/FontPlatformData.h: We expose openTypeTable() on Darwin platform.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::mathData): Initialize and return the math data.
        * platform/graphics/SimpleFontData.h: We expose a mathData() function to access the MATH data.
        * platform/graphics/opentype/OpenTypeMathData.cpp: Added. This is a new class that will be used to parse the data from the OpenType MATH table.
        (WebCore::OpenTypeMathData::OpenTypeMathData):
        * platform/graphics/opentype/OpenTypeMathData.h: Added.
        (WebCore::OpenTypeMathData::create):
        (WebCore::OpenTypeMathData::hasMathData):

2014-04-01  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Displaying region's children in another region not supported
        https://bugs.webkit.org/show_bug.cgi?id=130735

        Reviewed by David Hyatt.

        With http://trac.webkit.org/changeset/166353, we disabled the possibility
        of collecting the region's children into another flow and displaying them
        in another region.
        I added a new test for this and also changed the plain ASSERT in Element dtor
        to ASSERT_WITH_SECURITY_IMPLICATION to better reflect the meaning of the assertion.

        Test: fast/regions/region-child-not-flowed.html

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

2014-04-01  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Simplify the RenderFlowThread state pusher
        https://bugs.webkit.org/show_bug.cgi?id=131035

        Reviewed by David Hyatt.

        The RenderFlowThread state pusher is desynchronized from the RenderView layout state pusher
        by one renderer. This patch fixes the anomaly by correctly ordering the push and pop operations
        between the two systems.

        Tests: no functional change, no new tests.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::pushFlowThreadLayoutState):
        (WebCore::RenderFlowThread::popFlowThreadLayoutState):
        (WebCore::RenderFlowThread::offsetFromLogicalTopOfFirstRegion):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutState):
        * rendering/RenderView.h:

2014-04-01  Beth Dakin  <bdakin@apple.com>

        willReveal edge events should be hooked up for overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=131071
        -and corresponding-
        <rdar://problem/16190392>

        Reviewed by Sam Weinig.

        This patch moves the will reveal logic from FrameView to Document so that it can 
        be shared for RenderLayers.

        This is mostly just a moved function, but now the function takes an Element* that 
        represents the target of the event if the target is not the window.
        * dom/Document.cpp:
        (WebCore::Document::sendWillRevealEdgeEventsIfNeeded):
        * dom/Document.h:

        No longer implement sendWillRevealEdgeEventsIfNeeded() on FrameView or 
        ScrollableArea at all. Call into Document instead.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::sendWillRevealEdgeEventsIfNeeded): Deleted.
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::sendWillRevealEdgeEventsIfNeeded): Deleted.

        Call sendWillRevealEdgeEventsIfNeeded() after sending scroll events. 
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):

2014-04-01  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash in WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients

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

        Reviewed by Dean Jackson.

        Test: svg/filters/first-letter-crash.html

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        Added a null check to prevent crashes for anonymous RenderObjects.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::filterNeedsRepaint):
        Get the enclosing element, if there is one, and recalculate its style.
        We use the enclosing element so that we recalculate style for the
        ancestor of an anonymous RenderElement.
        (WebCore::RenderLayer::enclosingElement):
        Remove an assertion; we may now reach this condition if loading a
        cached SVG document results in RenderLayer::filterNeedsRepaint() being
        called before the object has been inserted into the render tree.

        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::notifyFinished):
        Tell the RenderLayer that the filter needs repainting.
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
        Get the Element from the renderer rather than asking the renderer's
        Element, which will be null for anonymous RenderObjects.

        * rendering/RenderLayerFilterInfo.h:
        Removed declaration for the old workaround function, layerElement().

2014-04-01  Ryuan Choi  <ryuan.choi@samsung.com>

        Build break when disabled VIDEO since r166261
        https://bugs.webkit.org/show_bug.cgi?id=131087

        Reviewed by Gyuyoung Kim.

        * testing/Internals.cpp: Added ENABLE(VIDEO) guards
        (WebCore::Internals::simulateSystemSleep):
        (WebCore::Internals::simulateSystemWake):

2014-04-01  Timothy Hatcher  <timothy@apple.com>

        Remove HeapProfiler from the Web Inspector protocol.

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

        Reviewed by Joseph Pecoraro.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptHeapSnapshot.h: Removed.
        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::takeHeapSnapshot): Deleted.
        (WebCore::ScriptProfiler::isSampling): Deleted.
        (WebCore::ScriptProfiler::hasHeapProfiler): Deleted.
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorHeapProfilerAgent.cpp: Removed.
        * inspector/InspectorHeapProfilerAgent.h: Removed.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::removeProfile):
        (WebCore::InspectorProfilerAgent::resetState): The CommandLineAPIHost call to
        clear inspected objects should have not been here. It was only needed by the
        HeapProfilerAgent.
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::collectGarbage): Deleted.
        (WebCore::InspectorProfilerAgent::createSnapshotHeader): Deleted.
        (WebCore::InspectorProfilerAgent::isSampling): Deleted.
        (WebCore::InspectorProfilerAgent::hasHeapProfiler): Deleted.
        (WebCore::InspectorProfilerAgent::getHeapSnapshot): Deleted.
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot): Deleted.
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId): Deleted.
        (WebCore::InspectorProfilerAgent::getHeapObjectId): Deleted.
        * inspector/InspectorProfilerAgent.h:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorHeapProfilerAgent): Deleted.
        (WebCore::InstrumentingAgents::setInspectorHeapProfilerAgent): Deleted.
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::addInspectedHeapObject): Deleted.
        * inspector/WebConsoleAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/protocol/HeapProfiler.json: Removed.
        * inspector/protocol/Profiler.json:

2014-04-01  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Exclusions] Remove exclusions parsing support
        https://bugs.webkit.org/show_bug.cgi?id=131046

        Reviewed by David Hyatt.

        CSS Exclusions specification [1] needs some evolution before the actual implementation happens.
        We have only the parsing code in WebKit for -webkit-wrap-flow and -webkit-wrap-through.
        This patch removes the code from the trunk for now, it doesn't make sense to keep it around.

        [1] http://www.w3.org/TR/css3-exclusions/

        Removed existing parsing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Deleted.
        (WebCore::CSSPrimitiveValue::operator WrapFlow): Deleted.
        (WebCore::CSSPrimitiveValue::operator WrapThrough): Deleted.
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-04-01  Timothy Hatcher  <timothy@apple.com>

        Remove the rest of the old Canvas inspection support.

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

        Reviewed by Joseph Pecoraro.

        * CMakeLists.txt: Removed Canvas.json.
        * DerivedSources.make: Ditto.
        * inspector/InjectedScriptCanvasModuleSource.js: Removed.
        * inspector/protocol/Canvas.json: Removed.

2014-04-01  Alexey Proskuryakov  <ap@apple.com>

        Eliminate HTMLFormElement::m_shouldSubmit
        https://bugs.webkit.org/show_bug.cgi?id=131055

        Reviewed by Tim Horton.

        m_shouldSubmit was used for two purposes:
        - as a return value in a function whose return value is ignored by all callers;
        - to make a decision that's local to a function.

        There is no need for it to be an instance variable.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::prepareForSubmission):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:

2014-04-01  Benjamin Poulain  <bpoulain@apple.com>

        Remove a couple of useless static strings
        https://bugs.webkit.org/show_bug.cgi?id=131003

        Reviewed by David Kilzer.

        There is zero value in keeping those strings alive.

        * css/StyleProperties.cpp:
        (WebCore::isInitialOrInherit):

2014-04-01  Myles C. Maxfield  <mmaxfield@apple.com>

        svg/text/text-overflow-ellipsis-svgfont-kerning-ligatures.html and svg/css/font-face-crash.html frequently assert in ComplexTextController::offsetForPosition
        https://bugs.webkit.org/show_bug.cgi?id=119747

        Reviewed by Simon Fraser.

        Even though kerning and ligatures currently don't work with the
        simple text path, messing those up is better than creating null
        CTRun and CTLine objects.

        Rather than calling the badly-named renderingContext() function on TextRun objects
        to determine if they are drawn with an SVG font, this patch creates a wrapper function
        with a better name and uses that instead.

        Test: svg/text/svg-font-hittest.html

        * platform/graphics/Font.cpp:
        (WebCore::isDrawnWithSVGFont): Wrapper around renderingContext()
        (WebCore::Font::drawText): Use wrapper function
        (WebCore::Font::drawEmphasisMarks): Use wrapper function
        (WebCore::Font::width): Use wrapper function
        (WebCore::Font::selectionRectForText): Use wrapper function
        (WebCore::Font::offsetForPosition): If we are using an SVG font, use the simple path
        instead of the complex one
        (WebCore::Font::codePath): Use wrapper function
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont):

2014-04-01  Daniel Bates  <dabates@apple.com>

        RenderQuote must destroy remaining text renderer before first letter renderer
        https://bugs.webkit.org/show_bug.cgi?id=78023
        <rdar://problem/10830009>

        Reviewed by Brent Fulgham.

        Merged from Blink (patch by Abhishek Arya):
        https://src.chromium.org/viewvc/blink?view=rev&revision=151270

        Following the fix for <https://bugs.webkit.org/show_bug.cgi?id=114586>, a
        RenderQuote may have child render objects for the first letter of its text
        and everything following the first letter so as to support the CSS first-
        letter property. The latter renderer is responsible for destroying the former
        on destruction. It's sufficient to reverse the destruction of the children of
        RenderQuote to ensure that we destroy the remaining text renderer before we
        destroy the first letter renderer.

        Test: fast/css-generated-content/quote-first-letter-crash.html

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::updateText):

2014-04-01  David Kilzer  <ddkilzer@apple.com>

        Do not allow HTTP refresh headers to refresh to javascript: URLs
        <http://webkit.org/b/119051>
        <rdar://problem/14536453>

        Reviewed by Alexey Proskuryakov.

        Merged from Blink (patch by tsepez@chromium.org):
        https://src.chromium.org/viewvc/blink?revision=153912&view=revision
        http://crbug.com/258151

            This behaviour has been standard in IE since IE7.  This makes us both
            more compatible and less vulnerable to XSS.

        Tests: http/tests/security/no-javascript-location-percent-escaped.html
               http/tests/security/no-javascript-location.html
               http/tests/security/no-javascript-refresh-percent-escaped.php
               http/tests/security/no-javascript-refresh-spaces.php
               http/tests/security/no-javascript-refresh-static-percent-escaped.html
               http/tests/security/no-javascript-refresh-static-spaces.html
               http/tests/security/no-javascript-refresh-static.html
               http/tests/security/no-javascript-refresh.php

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        - Do not fire meta http refresh for a javascript: URL protocol.

2014-04-01  Pratik Solanki  <psolanki@apple.com>

        Unreviewed build fix. Remove duplicate file entries.

        * WebCore.xcodeproj/project.pbxproj:

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        Enable WEB_TIMING on Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=128064

        Reviewed by Sam Weinig, Brent Fulgham.

        Enable WEB_TIMING. Add PerformanceTiming.cpp and JSPerformanceTiming.cpp
        to the project.
        
        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2014-04-01  James Craig  <jcraig@apple.com>

        AX: AccessibilityRenderObject::ariaLiveRegionAtomic() should default to true if
        roleValue is ApplicationAlertRole || ApplicationStatusRole
        https://bugs.webkit.org/show_bug.cgi?id=130907

        Reviewed by Chris Fleizach.

        Tests: inspector-protocol/dom/getAccessibilityPropertiesForNode_liveRegion.html:
               platform/mac/accessibility/aria-liveregions-attributes.html:

        Updated AccessibilityRenderObject::ariaLiveRegionAtomic() to match ARIA spec.

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

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing debug builds after r166586.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::addEventListener): Fix the ASSERT.
        (WebCore::SVGElement::removeEventListener): Ditto.

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        Prevent unnecessary copies in compareEqual template
        https://bugs.webkit.org/show_bug.cgi?id=131014

        Reviewed by Antti Koivisto.

        * rendering/style/RenderStyle.h:
        (compareEqual): Casting the second parameter to a non-const, non-reference type
        causes an extra copy of that object. Casting to the const reference type of the
        first parameter avoids that.

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        Avoid unnecessary HashSet copies when calling collectInstancesForSVGElement
        https://bugs.webkit.org/show_bug.cgi?id=131020

        Reviewed by Andreas Kling.

        Remove collectInstancesForSVGElement() to avoid HashSet copies when assigning a const
        HashSet reference to a non-const HashSet reference. Instead, range-based for-loops are
        deployed to iterate directly over the const reference to HashSet that's returned by
        SVGElement::instancesForElement(). SVGElement::containingShadowRoot() return value
        is checked to see if the iteration should be performed in the first place, preserving
        the behavior of collectInstancesForSVGElement().

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::addEventListener):
        (WebCore::SVGElement::removeEventListener):
        (WebCore::collectInstancesForSVGElement): Deleted.

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        Move the attributes HashMap out of the parseAttributes function
        https://bugs.webkit.org/show_bug.cgi?id=131019

        Reviewed by Andreas Kling.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::parseAttributes): Avoid copying the HashMap object that's being returned by
        converting it to an xvalue through using std::move() in the return statement.

2014-04-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Transition class Image (and its dependencies) from int to float to enable subpixel positioned/sized images.
        https://bugs.webkit.org/show_bug.cgi?id=130643

        Reviewed by Simon Fraser.

        This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
        subpixel sizing on hidpi resolutions, both generated and hidpi images can.
        This patch does not change Image behavior in general as both position and size are still snapped to integral values.  

        No change in behavior.

        * WebCore.exp.in:
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::fixedSize):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::fixedSize):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawImageIntoBuffer):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * platform/Cursor.cpp:
        (WebCore::determineHotSpot):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::size):
        (WebCore::BitmapImage::currentFrameSize):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::CrossfadeGeneratedImage):
        (WebCore::drawCrossfadeSubimage):
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::adjustParametersForTiledDrawing):
        * platform/graphics/Gradient.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createCompatibleBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::adjustSourceRectForDownSampling):
        * platform/graphics/Image.h:
        (WebCore::Image::setContainerSize):
        (WebCore::Image::rect):
        (WebCore::Image::width):
        (WebCore::Image::height):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        * platform/graphics/IntPoint.cpp:
        (WebCore::IntPoint::IntPoint):
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntSize.cpp:
        (WebCore::IntSize::IntSize):
        * platform/graphics/IntSize.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::size):
        (WebCore::PDFDocumentImage::updateCachedImageIfNeeded):
        (WebCore::applyRotationForPainting):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/mac/GraphicsContextMac.mm:
        * platform/graphics/mac/IconMac.mm:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::update):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * platform/win/DragImageCGWin.cpp:
        (WebCore::createDragImageFromImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageSizeForError):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::drawPlatformResizerImage):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageSizeForRenderer):
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::size):
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::externalRepresentation):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):

2014-04-01  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix when disabled ACCESSIBILITY

        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        Separated macros not to check ATK version when disabled ACCESSIBILITY

2014-04-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMake][EFL] Enable CSS JIT
        https://bugs.webkit.org/show_bug.cgi?id=131010

        Reviewed by Benjamin Poulain.

        Add an inclusion path for enabling CSS JIT on EFL and GTK ports.
        This patch only enables it for EFL port.

        * CMakeLists.txt:

2014-04-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Readonly attributes installed as readwrite in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=130978

        Reviewed by Carlos Garcia Campos.

        Unify how we decide if an attribute is readable or writeable and improve the code.
        This results in some attributes now being marked as read-only which didn't have
        corresponding case statements in the set_property switch statements and also correctly
        installs set_property support for some more POD types.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (IsPropertyReadable): Added this helper to simplify deciding if an attribute is readable.
        (IsPropertyWriteable): Added this helper to simplify deciding if an attribute is writeable. Also
        update the list of types to reflect the full list of types we can generate setters for.
        (GenerateProperty): Use the IsPropertyWriteable helper instead of checking whether the attribute is read-only.
        Also fix generation of the blurb by using $mutableString instead of $mutableStringconst which isn't used.
        (GenerateProperties): Use grep and the new helpers to simplify the code.
        (GetReadableProperties): Deleted.
        (GetWriteableProperties): Deleted.
        * bindings/scripts/test/GObject: Update results

2014-03-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Extract the control of page background out of color_set
        https://bugs.webkit.org/show_bug.cgi?id=127539

        Reviewed by Gyuyoung Kim.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        Added m_viewBackgroundColor to clear when m_setDrawsBackground is false.
        (WebCore::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebCore::CoordinatedGraphicsScene::paintToGraphicsContext):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (WebCore::CoordinatedGraphicsScene::setViewBackgroundColor):
        (WebCore::CoordinatedGraphicsScene::viewBackgroundColor):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        Added EFL guard not to set opaque as a default for MainFrameRenderViewLayer.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        Added EFL guard to apply page scale on RenderView like IOS.

2014-03-31  Byungseon Shin  <sun.shin@lge.com>

        [WebGL][OpenGLES] Enable MSAA support for WebGL Canvas
        https://bugs.webkit.org/show_bug.cgi?id=130955

        Reviewed by Dean Jackson.

        To avoid aliasing issues when we render content to WebGL canvas,
         we need to implement MSAA support.
        - Imagination OpenGLES GPU Driver already support MSAA, so we
         need a separate code path to enable it.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        (WebCore::Extensions3DOpenGLCommon::isImagination):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):

2014-03-31  Alexey Proskuryakov  <ap@apple.com>

        Crashes in PageConsole::addMessage
        https://bugs.webkit.org/show_bug.cgi?id=130991
        <rdar://problem/14795232>

        Reviewed by Geoffrey Garen.

        Test: http/tests/misc/detached-frame-console.html

        * page/DOMWindow.cpp: (WebCore::DOMWindow::printErrorMessage): Added a null check.
        It's legitimate for this to be called for a window that is not currently displayed
        in a frame.

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Proxy animations to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=130946

        Reviewed by Tim Horton.
        
        To proxy CA animations, make PlatformCAAnimation a pure virtual base class
        and subclass for Mac, Windows, and Remote (just like PlatformCALayer).
        
        Add coding support for TimingFunctions.
        
        Do some minor #include tidyup.
        
        Minor refactor in GraphicsLayerCA to share some animations code.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/animation/TimingFunction.h: Add setters need for encode/decode.
        (WebCore::CubicBezierTimingFunction::setValues):
        (WebCore::CubicBezierTimingFunction::setTimingFunctionPreset):
        (WebCore::StepsTimingFunction::create):
        (WebCore::StepsTimingFunction::setNumberOfSteps):
        (WebCore::StepsTimingFunction::setStepAtStart):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCAAnimation):
        (WebCore::GraphicsLayerCA::animationCanBeAccelerated): Minor refactor so we can share
        code with GraphicsLayerCARemote.
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::createBasicAnimation):
        (WebCore::PassRefPtr<PlatformCAAnimation>GraphicsLayerCA::createKeyframeAnimation):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        (WebCore::PlatformCAAnimation::~PlatformCAAnimation):
        (WebCore::PlatformCAAnimation::isPlatformCAAnimationMac):
        (WebCore::PlatformCAAnimation::isPlatformCAAnimationWin):
        (WebCore::PlatformCAAnimation::isPlatformCAAnimationRemote):
        (WebCore::PlatformCAAnimation::PlatformCAAnimation):
        (WebCore::PlatformCAAnimation::setType):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.h: Added.
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::addAnimationForKey):
        (PlatformCALayerMac::animationForKey):
        * platform/graphics/ca/mac/TileController.mm:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        * platform/graphics/ca/win/PlatformCAAnimationWin.h: Added.

2014-03-31  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: compile the first-child pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=130954

        Reviewed by Andreas Kling.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        The compiler use the context's style directly when resolving style. An error introduced
        in the rule collector would cause a crash in the compiled code which would be hard to debug.
        Add an assertion early in the stack to catch errors where it is easier to debug them.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initForStyleResolve):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToPreviousAdjacentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToPreviousAdjacent):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        Refactor those to be able to reuse the code getting a sibling element preceding the current element.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::jumpIfNotResolvingStyle):
        Extract the code checking the current mode from SelectorCodeGenerator::markParentElementIfResolvingStyle()
        in a separate function. This will be useful for all the pseudo class with marking.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::setFirstChildState):
        This is the slow path for when the first-child pseudo class is on a fragment that is not
        the rightmost.
        The reason to use a slow path is accessing renderStyle() is not trivial and this case isn't not
        as common. We should improve this later.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstChild):
        This is just implementing the test for first-child plus the tree marking. Nothing fancy,
        this is basically the same thing as SelectorChecker.

        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByFirstChildRules):
        * dom/Element.h:
        C++ fallback to set the flag, to be improved later with the other flags.

        * rendering/style/RenderStyle.h:
        I accidentaly put noninheritedFlagsMemoryOffset() as private in the RenderStyle refactoring.

        Also update the flags accessor to make them easier to work with from the compiler. In particular,
        setFirstChildStateFlags() sets both isUnique and firstChild. Currently the JIT does not need to access
        the value so individual flags are made private.

2014-03-31  Dean Jackson  <dino@apple.com>

        Remove WEB_ANIMATIONS
        https://bugs.webkit.org/show_bug.cgi?id=130989

        Reviewed by Simon Fraser.

        Remove this feature flag until we plan to implement.

        * Configurations/FeatureDefines.xcconfig:

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.

        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::updateLayersAfterDelegatedScroll):

2014-03-31  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. iOS build fix after r166532. Add missing comma.

        * dom/DocumentMarker.h:

2014-03-31  Brady Eidson  <beidson@apple.com>

        Add variant of phone number parsing that use DocumentMarker in the current selection
        <rdar://problem/16379566> and https://bugs.webkit.org/show_bug.cgi?id=130917

        Reviewed by Darin Adler.

        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::AllMarkers::AllMarkers): Add a new TelephoneNumber document marker type.

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::scanSelectionForTelephoneNumbers): TextIterate over the selected range looking for numbers.
        (WebCore::Editor::scanRangeForTelephoneNumbers): Scan the given range for a telephone number,
          adding the DocumentMarker to any that are found.
        (WebCore::Editor::clearDataDetectedTelephoneNumbers):
        * editing/Editor.h:

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody): Only linkify on iOS.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTelephoneNumberMarker): Placeholder UI while the feature is developed.
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/InlineTextBox.h:

        * testing/Internals.cpp:
        (WebCore::markerTypesFrom):

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Hook up scroll events for accelerated overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=130976

        Reviewed by Tim Horton.

        When an accelerated overflow:scroll is scrolled in the UI process,
        tell the WebProcess that the scroll happened to update RenderLayer
        state and fire events.
        
        In the WebProcess, RemoteScrollingCoordinator gets a message from the
        UI process and calls AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll().
        Fixed that function to handle scrolling nodes other than the root, which
        required storing a map of ScrollingNodeID->RenderLayer* on RenderLayerCompositor,
        accessible through FrameView::scrollableAreaForScrollLayerID().

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollableAreaForScrollLayerID):
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll): Handle
        overflow as well as main frame scrolling nodes.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling): Use isScrollingNode().
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling): When an overflow
        scroll node was scrolled externally, we have to update layers in decendant nodes,
        and then call scrollingTreeNodeDidScroll() which tells the ScrollingCoordinator that
        we scrolled.
        * page/scrolling/ScrollingTree.h: Try to reduce confusion between the roles played
        by these various functions, some of which happen in the UI process with UI-side
        compositing.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h: Need some functions to be
        callable by subclasses.
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::updateLayersAfterDelegatedScroll):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Add
        scrolling layers to the m_scrollingNodeToLayerMap
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer): Remove
        layer from the m_scrollingNodeToLayerMap.
        (WebCore::RenderLayerCompositor::scrollableAreaForScrollLayerID):
        * rendering/RenderLayerCompositor.h:

2014-03-31  Antti Koivisto  <antti@apple.com>

        Rename TileCache to LegacyTileCache
        https://bugs.webkit.org/show_bug.cgi?id=130986

        Reviewed by Simon Fraser.

        Rename iOS WebKit1 tile cache classes to reflect its status.
        This also frees some good type names.

        TileCache -> LegacyTileCache
        TileGrid -> LegacyTileGrid
        TileGridTile -> LegacyTileGridTile
        etc.

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Small adjustments to WebCore::IOSurface
        https://bugs.webkit.org/show_bug.cgi?id=130981

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export some more things.

        * platform/graphics/cocoa/IOSurface.h:
        createImage() can't be const because it calls ensurePlatformContext().

        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::createImage):
        We should be able to create an image even if the CGContext has been cleared (or never created).

        (IOSurface::isInUse):
        Rename inUse() to isInUse().

        (IOSurface::clearGraphicsContext):
        Add clearGraphicsContext().

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Allocate IOSurfaces with the same cache mode that CoreAnimation uses
        https://bugs.webkit.org/show_bug.cgi?id=130982

        Reviewed by Simon Fraser.

        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::IOSurface):
        CA uses kIOMapWriteCombineCache for IOSurfaces allocated on iOS.

2014-03-31  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Blend mode property is propagated to multiple GraphicLayers
        https://bugs.webkit.org/show_bug.cgi?id=130337

        Reviewed by Dean Jackson.

        Resets the blend mode for graphicsLayer when it has an ancestorClippingLayer.

        Test: css3/compositing/blend-mode-ancestor-clipping-layer.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateBlendMode):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateBlendMode):
        * rendering/RenderLayerBacking.h:

2014-03-31  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] showLayerTree should dump layer's blend mode and isolation properties
        https://bugs.webkit.org/show_bug.cgi?id=130922

        Reviewed by Simon Fraser.

        This change only updates existing tests involving blending. No new test required,
        as there is no new or changed functionality.

        * rendering/RenderLayer.h: adding blendMode() getter.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        adding blendMode property and layer's isolation status (does layer isolate blending descendants or not?).

2014-03-31  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: clean up the functions ending when generating a checker with context
        https://bugs.webkit.org/show_bug.cgi?id=130959

        Reviewed by Andreas Kling.

        This code got refactored over time and now both branches do the exact same action
        on the stack.
        This patch removes the stack split and move the stack cleanup in the common ending
        just before restoring the callee saved registers.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):

2014-03-31  Beth Dakin  <bdakin@apple.com>

        ThemeMac should use std::array instead of IntSize* for control sizes
        https://bugs.webkit.org/show_bug.cgi?id=130985

        Reviewed by Darin Adler.

        Replace uses of const IntSize* with const std::array<IntSize, 3>
        * platform/mac/ThemeMac.mm:
        (WebCore::sizeFromNSControlSize):
        (WebCore::sizeFromFont):
        (WebCore::controlSizeFromPixelSize):
        (WebCore::setControlSize):
        (WebCore::checkboxSizes):
        (WebCore::radioSizes):
        (WebCore::buttonSizes):
        (WebCore::setUpButtonCell):
        (WebCore::stepperSizes):

2014-03-31  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify RasterShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=130916

        Reviewed by Dean Jackson.

        Since only floats can specify shape-outside, the RasterShapeIntervals
        class only needs to track the first and last above threshold pixel column
        (x1 and x2 in the implementation) for each row. Removed code for dealing with
        multiple "runs" per row as well as shape-inside internals.

        No new tests, since functionality was only removed.

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals):
        (WebCore::RasterShapeIntervals::initializeBounds):
        (WebCore::RasterShapeIntervals::buildBoundsPath):
        (WebCore::RasterShape::getExcludedIntervals):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals):
        (WebCore::RasterShapeIntervals::intervalAt):
        (WebCore::RasterShape::RasterShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/shapes/ShapeInterval.h:
        (WebCore::ShapeInterval::unite):

2014-03-31  Andreas Kling  <akling@apple.com>

        Always inline toJS() for NodeList.
        <https://webkit.org/b/130974>

        This is a pretty cheesy optimization, but it's a 3% progression on
        Dromaeo/dom-query.html on my MBP.

        Reviewed by Benjamin Poulain.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNodeListCustom.h: Added.
        (WebCore::toJS):
        * dom/NodeList.idl:

2014-03-31  Benjamin Poulain  <bpoulain@apple.com>

        Attempt to fix the 32bits debug builds

        The additional debug flags in RefCounted cause the structure to have different alignment
        with the 64bits flags.

        * rendering/style/RenderStyle.cpp:

2014-03-29  Simon Fraser  <simon.fraser@apple.com>

        Clarify some scrolling tree terminology
        https://bugs.webkit.org/show_bug.cgi?id=130929

        Reviewed by Tim Horton.

        Attempt to reduce some ambiguity in scrolling tree terminology.
        When async scrolling occurs, there are two tasks we have to perform:
        1. Layers need to be updated to reflect the scroll
        2. WebCore state has to be updated.
        The "updateForViewport" name didn't clearly reflect which of these
        tasks was being performed, so rename it to updateLayersAfterViewportChange()
        to reflect the fact that it only does the first.
        
        Remove the Mac implementation of updateLayersAfterViewportChange(), since
        it was confsued about this, and was never called anyway.

        * WebCore.exp.in:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::updateLayersAfterViewportChange):
        (WebCore::ScrollingTreeScrollingNodeIOS::updateForViewport): Deleted.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateLayersAfterViewportChange):
        (WebCore::ScrollingTreeScrollingNodeMac::updateForViewport): Deleted.

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Disable tile cohort retention for now
        https://bugs.webkit.org/show_bug.cgi?id=130926
        <rdar://problem/16465413>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setScrollingPerformanceLoggingEnabled):
        (WebCore::Settings::setAggressiveTileRetentionEnabled): Deleted.
        * page/Settings.h:
        (WebCore::Settings::aggressiveTileRetentionEnabled): Deleted.
        * page/Settings.in:
        Use Settings.in for these simple settings.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::shouldAggressivelyRetainTiles):
        (WebCore::GraphicsLayerClient::shouldTemporarilyRetainTileCohorts):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerShouldAggressivelyRetainTiles):
        (WebCore::GraphicsLayerCA::platformCALayerShouldTemporarilyRetainTileCohorts):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerShouldAggressivelyRetainTiles):
        (WebCore::PlatformCALayerClient::platformCALayerShouldTemporarilyRetainTileCohorts):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldAggressivelyRetainTiles):
        (WebCore::RenderLayerBacking::shouldTemporarilyRetainTileCohorts):
        * rendering/RenderLayerBacking.h:
        Plumb the two tile-retention settings through to TileController in a pull manner
        instead of a push manner, as there were some cases (especially on iOS) where
        the settings weren't always getting pushed down.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tileRevalidationTimerFired):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::drawTileMapContents):
        Aggressive tile retention wins over temporary retention. If we aren't
        using temporary (cohort) retention, throw away the cohort as soon as it
        is created.

2014-03-31  Beth Dakin  <bdakin@apple.com>

        Radio buttons and checkboxes should share code
        https://bugs.webkit.org/show_bug.cgi?id=130915

        Reviewed by Sam Weinig.

        Radio buttons and checkboxes now share a lot of code. The common term for both is 
        toggle buttons.

        Move these radio-sizing functions up in the file to be next to the checkbox sizing 
        functions.
        * platform/mac/ThemeMac.mm:
        (WebCore::radioSizes):
        (WebCore::radioMargins):
        (WebCore::radioSize):

        Configures a radio button or a checkbox.
        (WebCore::configureToggleButton):

        Creates a radio button or a checkbox.
        (WebCore::createToggleButtonCell):

        Still have a shared cell for each.
        (WebCore::sharedRadioCell):
        (WebCore::sharedCheckboxCell):

        Does the work of the old paintRadio() and paintCheckbox().
        (WebCore::paintToggleButton):

        Use sharedRadioCell() here.
        (WebCore::ThemeMac::inflateControlPaintRect):

        Call paintToggleButton() for radio buttons and checkboxes.
        (WebCore::ThemeMac::paint):

        All gone.
        (WebCore::configureCheckbox): Deleted.
        (WebCore::createCheckboxCell): Deleted.
        (WebCore::paintCheckbox): Deleted.
        (WebCore::radio): Deleted.
        (WebCore::paintRadio): Deleted.

2014-03-31  Samuel White  <samuel_white@apple.com>

        AX: Need ability to get line range for text marker.
        https://bugs.webkit.org/show_bug.cgi?id=130906

        Reviewed by Chris Fleizach.

        Added ability to get line range from any marker on that line. This matches the functionality of existing
        attributes such as AXParagraphTextMarkerRangeForTextMarker and AXSentenceTextMarkerRangeForTextMarker.

        Test: platform/mac/accessibility/line-range-for-text-marker.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForRange):
        (WebCore::AccessibilityObject::lineRangeForPosition):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::updateViewportConstrainedLayers):

2014-03-31  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Support lease-renewal.
        https://bugs.webkit.org/show_bug.cgi?id=130919

        Reviewed by Eric Carlson.

        Trigger a new key request when receiving an update message containting "renew".

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyRequest): Drive-by fix; generate a UTF-8
            based array.
        (WebCore::CDMSessionMediaSourceAVFObjC::update):

2014-03-31  Alexey Proskuryakov  <ap@apple.com>

        Remove special handling of soft hyphens in search code
        https://bugs.webkit.org/show_bug.cgi?id=130940

        Reviewed by Anders Carlsson.

        ICU knows to ignore soft hyphens, so we don't need to replace them before searching.

        Covered by existing tests.

        * editing/TextIterator.cpp:
        (WebCore::foldQuoteMark):
        (WebCore::foldQuoteMarks):
        (WebCore::SearchBuffer::SearchBuffer):
        (WebCore::SearchBuffer::append):
        (WebCore::foldQuoteMarkOrSoftHyphen): Deleted.
        (WebCore::foldQuoteMarksAndSoftHyphens): Deleted.

2014-03-31  Alex Christensen  <achristensen@webkit.org>

        Preparation for using Soup on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=130615

        Reviewed by Carlos Garcia Campos.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Added Soup source files in WinCairo build.
        * loader/soup/CachedRawResourceSoup.cpp:
        * loader/soup/SubresourceLoaderSoup.cpp:
        * platform/soup/SharedBufferSoup.cpp:
        * platform/soup/URLSoup.cpp:
        * platform/network/NetworkStorageSessionStub.cpp:
        Only build if USE(SOUP) to prevent building when USE(CURL) is true.
        * platform/network/soup/ResourceHandleSoup.cpp:
        Only include unistd.h in non-Visual Studio builds.
        This would normally be done with a HAVE_UNISTD_H macro when compiling glib and Soup,
        but that would need to be left undefined for Visual Studio.

2014-03-31  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Addressing reviewing comments for r166491 that I forgot
        to address before landing.

        * html/FormController.cpp:
        (WebCore::SavedFormState::deserialize): No need to move the std::unique_ptr
        object on the way out.
        (WebCore::FormController::createSavedFormStateMap): FormKeyGenerator can be
        allocated on the stack.
        (WebCore::FormController::formStatesFromStateVector): Use auto.

2014-03-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use GMainLoopSource for idle and timeout sources in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=130078

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/gtk/GtkDragAndDropHelper.cpp:
        * platform/gtk/SharedTimerGtk.cpp:

2014-03-31  Andrei Bucur  <abucur@adobe.com>

        Wrong layout while animating content in regions
        https://bugs.webkit.org/show_bug.cgi?id=125086

        Reviewed by David Hyatt.

        The region to layer and regions to layer mappings should be cleared when the region chain changes.

        Test: fast/regions/layers/region-removed-during-animation.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::invalidateRegions): Clear the two maps and flag them for recomputation.
        (WebCore::RenderFlowThread::cachedRegionForCompositedLayer): Assert that the returned region exists.

2014-03-31  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        Remove hostThisRegister() and hostThisValue()
        https://bugs.webkit.org/show_bug.cgi?id=130895

        Reviewed by Geoffrey Garen.

        Removed hostThisRegister() and hostThisValue() and instead use thisArgumentOffset() and thisValue() respectively.

        No new tests, no behavior changes.

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        (WebCore::jsFloat64ArrayPrototypeFunctionSet):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod3):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionByteMethod):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethod):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethod):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionCustomMethod):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces):
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClamp):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionOrange):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithSequence):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithArray):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        (WebCore::jsTestObjPrototypeFunctionAny):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionFunc):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableArrayArg):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp):
        (WebCore::jsTestTypedefsPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction2):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithException):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):

2014-03-31  Zan Dobersek  <zdobersek@igalia.com>

        Move the rest of Source/WebCore/html/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129669

        Reviewed by Anders Carlsson.

        Replace the remaining uses of OwnPtr, PassOwnPtr under Source/WebCore/html/ with std::unique_ptr.

        * html/FormController.cpp:
        (WebCore::SavedFormState::SavedFormState):
        (WebCore::SavedFormState::deserialize):
        (WebCore::FormController::createSavedFormStateMap):
        (WebCore::FormController::formElementsState):
        (WebCore::FormController::takeStateForFormElement):
        (WebCore::FormController::formStatesFromStateVector):
        * html/FormController.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::mapMouseEvent):
        * html/HTMLAreaElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setSurfaceSize):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLCanvasElement.h:
        * html/HTMLCollection.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateVisibleValidationMessage):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::addToPastNamesMap):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::imageLoader):
        (WebCore::HTMLInputElement::resetListAttributeTargetObserver):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::hasImageLoader):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::startLoadingImage):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/HTMLVideoElement.h:
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::ValidationMessage):
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):
        * html/ValidationMessage.h:

2014-03-31  Maurice van der Pot  <griffon26@kfk4ever.com>

        Fix mixed use of booleans in JPEGImageDecoder.cpp
        https://bugs.webkit.org/show_bug.cgi?id=122412

        Reviewed by Darin Adler.

        Trivial fix for compilation error; no new tests.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        (WebCore::fill_input_buffer):
        Use TRUE/FALSE defined by libjpeg for libjpeg booleans

2014-03-23  Zan Dobersek  <zdobersek@igalia.com>

        Move Source/WebCore/rendering/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129664

        Reviewed by Anders Carlsson.

        Replace uses of OwnPtr and PassOwnPtr in code under Source/WebCore/rendering/ with std::unique_ptr.

        * platform/graphics/FloatPolygon.cpp:
        (WebCore::FloatPolygon::FloatPolygon):
        * platform/graphics/FloatPolygon.h:
        * rendering/ClipPathOperation.h:
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName):
        * rendering/FlowThreadController.h:
        * rendering/HitTestLocation.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::rectBasedTestResult):
        (WebCore::HitTestResult::mutableRectBasedTestResult):
        * rendering/HitTestResult.h:
        * rendering/HitTestingTransformState.cpp:
        * rendering/ImageQualityController.h:
        * rendering/RenderBlock.cpp:
        (WebCore::removeBlockFromDescendantAndContainerMaps):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::RenderBlock::insertIntoTrackedRendererMaps):
        (WebCore::RenderBlock::removeFromTrackedRendererMaps):
        (WebCore::RenderBlock::setComputedColumnCountAndWidth):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createFloatingObjects):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBoxRegionInfo.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange):
        * rendering/RenderButton.h:
        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::push):
        (WebCore::RenderGeometryMap::pushView):
        * rendering/RenderGeometryMap.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::resolveGridPositionsFromStyle):
        (WebCore::RenderGrid::resolveGridPositionAgainstOppositePosition):
        (WebCore::RenderGrid::resolveNamedGridLinePositionAgainstOppositePosition):
        (WebCore::RenderGrid::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
        (WebCore::RenderGrid::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
        * rendering/RenderGrid.h:
        * rendering/RenderImageResource.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::clearZOrderLists):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::notifyFlushBeforeDisplayRefresh):
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::map):
        (WebCore::RenderLayer::FilterInfo::get):
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRenderBoxRegionInfo):
        (WebCore::RenderRegion::takeRenderBoxRegionInfo):
        * rendering/RenderRegion.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange):
        * rendering/RenderTable.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::compositor):
        (WebCore::RenderView::flowThreadController):
        (WebCore::RenderView::imageQualityController):
        * rendering/RenderView.h:
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::appendFloat):
        * rendering/TextAutosizer.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::computeShapePaddingBounds):
        (WebCore::computeShapeMarginBounds):
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::RasterShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::createInsetShape):
        (WebCore::createRectangleShape):
        (WebCore::createCircleShape):
        (WebCore::createEllipseShape):
        (WebCore::createPolygonShape):
        (WebCore::Shape::createShape):
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createLayoutBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::markShapeAsDirty):
        (WebCore::ShapeInfo::isShapeDirty):
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/style/ContentData.h:
        * rendering/style/CounterDirectives.cpp:
        (WebCore::clone):
        * rendering/style/CounterDirectives.h:
        * rendering/style/GridCoordinate.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCachedPseudoStyle):
        (WebCore::RenderStyle::accessCounterDirectives):
        (WebCore::RenderStyle::accessAnimations):
        (WebCore::RenderStyle::accessTransitions):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::updateShapeFromElement):
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::setClipper):
        (WebCore::SVGResources::setFilter):
        (WebCore::SVGResources::setMarkerStart):
        (WebCore::SVGResources::setMarkerMid):
        (WebCore::SVGResources::setMarkerEnd):
        (WebCore::SVGResources::setMasker):
        (WebCore::SVGResources::setFill):
        (WebCore::SVGResources::setStroke):
        * rendering/svg/SVGResources.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderer):
        (WebCore::SVGResourcesCache::removeResourcesFromRenderer):
        * rendering/svg/SVGResourcesCache.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        * rendering/svg/SVGTextMetricsBuilder.h:

2014-03-28  Sergio Villar Senin  <svillar@igalia.com>

        Replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed<T> in loader
        https://bugs.webkit.org/show_bug.cgi?id=130893

        Reviewed by Darin Adler.

        * loader/ImageLoader.cpp:
        (WebCore::beforeLoadEventSender):
        (WebCore::loadEventSender):
        (WebCore::errorEventSender):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::cacheStorage):
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::brokenImage):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::shouldIgnoreHeaderForCacheReuse):
        * loader/cache/MemoryCache.cpp:
        (WebCore::dummyCachedImageClient):

2014-03-28  Sergio Villar Senin  <svillar@igalia.com>

        Replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed<T> in css
        https://bugs.webkit.org/show_bug.cgi?id=130409

        Reviewed by Darin Adler.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::logUnimplementedPropertyID):
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::screenEval):
        (WebCore::printEval):
        * css/CSSParser.cpp:
        (WebCore::strictCSSParserContext):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::cssTextCache):
        * css/CSSProperty.cpp:
        (WebCore::borderDirections):
        * css/CSSStyleRule.cpp:
        (WebCore::selectorTextCache):
        * css/CSSValuePool.cpp:
        (WebCore::cssValuePool):
        * css/CSSValuePool.h:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyPageSize::getPageSizeFromName):
        (WebCore::DeprecatedStyleBuilder::sharedStyleBuilder):
        * css/DeprecatedStyleBuilder.h:

2014-03-30  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] [TextureMapper] Weird brightness with some videos with acceletared compositing
        https://bugs.webkit.org/show_bug.cgi?id=130665

        Reviewed by Martin Robinson.

        When we uploaded a video texture to the mapper we were not
        considering that some videos could be decoded into a format
        without alpha component. Now we check if the video has alpha and
        if it does not, we remove the alpha flag when retrieving the
        texture from the pool. For this, the method to get the texture
        from the pool was modified to receive the flags, that is mapped to
        have alpha by default in order not to break any other existing
        code.

        Though we have a problem with AC in WTR and that makes it
        currently not testable, no new tests are needed because once this
        is fixed the current test set suffices to detect a possible
        regression in this.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture): Check
        the video format and decide if the texture shall be pulled with
        alpha support or not.
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::acquireTextureFromPool): Use the flags
        when resetting the texture.
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::Flag::None): Added with 0x00.
        (WebCore::TextureMapper::acquireTextureFromPool): Added flag
        parameter to set up the texture with the default for including
        alpha channel.

2014-03-30  Jinwoo Song  <jinwoo7.song@samsung.com>

        Adopt range-based for loops to TextCheckerEnchant
        https://bugs.webkit.org/show_bug.cgi?id=130714

        Reviewed by Darin Adler.

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::ignoreWord):
        (WebCore::TextCheckerEnchant::learnWord):
        (WebCore::TextCheckerEnchant::checkSpellingOfWord):
        (WebCore::TextCheckerEnchant::getGuessesForWord):
        (WebCore::TextCheckerEnchant::updateSpellCheckingLanguages):
        (WebCore::TextCheckerEnchant::loadedSpellCheckingLanguages):
        (WebCore::TextCheckerEnchant::availableSpellCheckingLanguages):
        (WebCore::TextCheckerEnchant::freeEnchantBrokerDictionaries):

2014-03-30  Benjamin Poulain  <benjamin@webkit.org>

        Second attempt to fix 32bits build after r166465

        * rendering/style/RenderStyle.h:
        The compiler probably complain about the return value, that makes more sense.

2014-03-30  Benjamin Poulain  <benjamin@webkit.org>

        Attempt to fix 32bits build after r166465

        * rendering/style/RenderStyle.h:

2014-03-30  Benjamin Poulain  <benjamin@webkit.org>

        Make RenderStyle's non inherited flags more JSC friendly
        https://bugs.webkit.org/show_bug.cgi?id=130939

        Reviewed by Andreas Kling.

        Make RenderStyle::NonInheritedFlags accessible to the JIT:
        -Make the struct public to give access to the offset.
        -Move away from a bit field to static offsets we can use
         with the MacroAssembler.
        -Reorder the field to simplify bit access of the flags we need.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyVerticalAlign::createHandler):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::copyNonInheritedFrom):
        (WebCore::RenderStyle::hashForTextAutosizing):
        (WebCore::RenderStyle::equalForTextAutosizing):
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasAnyPublicPseudoStyles):
        (WebCore::RenderStyle::hasPseudoStyle):
        (WebCore::RenderStyle::setHasPseudoStyle):
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2014-03-30  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build of HTMLConverter.mm after r166454

        Fixes the following build failures:

            WebCore/editing/cocoa/HTMLConverter.mm:1507:13: error: value of type 'WebCore::Element' is not contextually convertible to 'bool'
                    if (element)
                        ^~~~~~~
            WebCore/editing/cocoa/HTMLConverter.mm:1508:49: error: no matching function for call to 'core'
                        _caches->floatPropertyValueForNode(*core(element), CSSPropertyVerticalAlign, verticalAlign);
                                                            ^~~~
            In file included from WebCore/editing/cocoa/HTMLConverter.mm:41:
            In file included from WebCore/page/Frame.h:42:
            In file included from WebCore/editing/VisibleSelection.h:30:
            In file included from WebCore/editing/VisiblePosition.h:30:
            In file included from WebCore/dom/Position.h:31:
            WebCore/editing/TextAffinity.h:54:27: note: candidate function not viable: no known conversion from 'WebCore::Element' to 'NSSelectionAffinity' (aka '_NSSelectionAffinity') for 1st argument
            inline WebCore::EAffinity core(NSSelectionAffinity affinity)
                                      ^
            WebCore/editing/cocoa/HTMLConverter.mm:1509:81: error: reference to non-static member function must be called; did you mean to call it with no arguments?
                    attachment.get().bounds = CGRectMake(0, (verticalAlign / 100) * element.clientHeight, element.clientWidth, element.clientHeight);
                                                                                    ~~~~~~~~^~~~~~~~~~~~
                                                                                                        ()
            WebCore/editing/cocoa/HTMLConverter.mm:1509:103: error: reference to non-static member function must be called; did you mean to call it with no arguments?
                    attachment.get().bounds = CGRectMake(0, (verticalAlign / 100) * element.clientHeight, element.clientWidth, element.clientHeight);
                                                                                                          ~~~~~~~~^~~~~~~~~~~
                                                                                                                             ()
            WebCore/editing/cocoa/HTMLConverter.mm:1509:124: error: reference to non-static member function must be called; did you mean to call it with no arguments?
                    attachment.get().bounds = CGRectMake(0, (verticalAlign / 100) * element.clientHeight, element.clientWidth, element.clientHeight);
                                                                                                                               ~~~~~~~~^~~~~~~~~~~~
                                                                                                                                                   ()
            5 errors generated.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addAttachmentForElement):

2014-03-30  Andreas Kling  <akling@apple.com>

        Make NodeList and HTMLCollection caching helpers use PassRef.
        <https://webkit.org/b/130943>

        Tweak the helpers in NodeListsNodeData to return PassRef instead of
        PassRefPtr. This knocks 2 branches off of some pretty hot code on
        Dromaeo/dom-query.

        Reviewed by Antti Koivisto.

        * dom/ChildNodeList.h:
        * dom/ClassNodeList.h:
        * dom/NameNodeList.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::ensureChildNodeList):
        (WebCore::NodeListsNodeData::ensureEmptyChildNodeList):
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::addCachedCollection):
        * dom/TagNodeList.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::create):
        * html/HTMLCollection.h:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::create):
        * html/HTMLFormControlsCollection.h:
        * html/RadioNodeList.h:

2014-03-29  Antti Koivisto  <antti@apple.com>

        LiveNodeLists should use ElementDescendantIterator
        https://bugs.webkit.org/show_bug.cgi?id=130931

        Reviewed by Andreas Kling.
        
        Make LiveNodeList traversal use the common DOM tree iterator.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::collectionBegin):
        (WebCore::ChildNodeList::collectionTraverseForward):
        (WebCore::ChildNodeList::collectionTraverseBackward):
        (WebCore::ChildNodeList::invalidateCache):
        (WebCore::ChildNodeList::collectionFirst): Deleted.
        
            Iterator for ChildNodeList is still just Node*.

        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h:
        (WebCore::CollectionIndexCache::hasValidCache):
        (WebCore::Iterator>::CollectionIndexCache):
        (WebCore::Iterator>::nodeCount):
        (WebCore::Iterator>::computeNodeCountUpdatingListCache):
        (WebCore::Iterator>::traverseBackwardTo):
        (WebCore::Iterator>::traverseForwardTo):
        (WebCore::Iterator>::nodeAt):
        (WebCore::Iterator>::invalidate):
        
            Make CollectionIndexCache iterator based instead of using NodeType*. The iterator type may
            still be a Node* though.

        (WebCore::NodeType>::CollectionIndexCache): Deleted.
        (WebCore::NodeType>::nodeCount): Deleted.
        (WebCore::NodeType>::computeNodeCountUpdatingListCache): Deleted.
        (WebCore::NodeType>::nodeBeforeCached): Deleted.
        (WebCore::NodeType>::nodeAfterCached): Deleted.
        (WebCore::NodeType>::nodeAt): Deleted.
        (WebCore::NodeType>::invalidate): Deleted.
        * dom/ElementDescendantIterator.h:
        (WebCore::ElementDescendantIterator::operator--):
        
            Add backward iteration support.

        (WebCore::ElementDescendantIteratorAdapter::last):
        (WebCore::ElementDescendantConstIteratorAdapter::last):
        
            Add a way to get the last item.
            Provide std::iterator_traits so we can extract the type.

        * dom/LiveNodeList.h:
        (WebCore::CachedLiveNodeList::collectionEnd):
        (WebCore::CachedLiveNodeList<NodeListType>::CachedLiveNodeList):
        (WebCore::CachedLiveNodeList<NodeListType>::~CachedLiveNodeList):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionBegin):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionLast):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseForward):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseBackward):
        (WebCore::CachedLiveNodeList<NodeListType>::invalidateCache):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionFirst): Deleted.
        
            Make LiveNodeList traversal use ElementDescendantIterator.

        (WebCore::nextMatchingElement): Deleted.
        (WebCore::previousMatchingElement): Deleted.
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::collectionBegin):
        (WebCore::HTMLCollection::collectionTraverseForward):
        (WebCore::HTMLCollection::collectionTraverseBackward):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::collectionFirst): Deleted.
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::collectionEnd):
        
            HTMLCollection still uses Element* as iterator for now.

2014-03-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166434.
        https://bugs.webkit.org/show_bug.cgi?id=130938

        Caused crashes and other failures on cache tests (Requested by
        ap on #webkit).

        Reverted changeset:

        "Web Replay: add page-level setting to bypass the MemoryCache"
        https://bugs.webkit.org/show_bug.cgi?id=130728
        http://trac.webkit.org/changeset/166434

2014-03-29  David Kilzer  <ddkilzer@apple.com>

        Preserve selection end positions in directionOfSelection
        <http://webkit.org/b/104813>
        <rdar://problem/13666417>

        Reviewed by Brent Fulgham.

        Merged from Blink (patch by kenrb@chromium.org):
        https://src.chromium.org/viewvc/blink?revision=150621&view=revision
        http://crbug.com/164263

            VisibleSelection::visibleStart() and VisibleSelection::visibleEnd()
            can both cause layouts, which has the potential to invalidate any
            rendertree-based objects. This was causing a problem in
            FrameSelection::directionOfSelection(), where a reference to a
            lineBox was being held across a call to visibleEnd().

            This patch ensures that the any layout is completed before linebox
            references are retrieved.

        Test: editing/selection/layout-during-move-selection-crash.html

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

2014-03-29  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Simple line layout should not round to integral position while painting.
        https://bugs.webkit.org/show_bug.cgi?id=130934

        Reviewed by Simon Fraser.

        Remove rounding to integral position. When RenderLayer is injected and hides subpixel positions,
        integral rounding produces different paint position.

        Test: fast/flexbox/hidpi-simple-line-layout-with-flexbox-and-transition.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2014-03-29  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make GraphicsContext::drawImageBuffer* functions float based.
        https://bugs.webkit.org/show_bug.cgi?id=130932

        Reviewed by Simon Fraser.
        
        This is in preparation to support device pixel based filter painting.
        Filter calculation is still integral based.

        No change in behavior.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/filters/FilterEffect.cpp: This will eventually be fully float based.
        Right now, this IntRect->FloatRect change is only to ensure that we can call 
        the float based drawImageBuffer(). 
        (WebCore::FilterEffect::drawingRegionOfInputImage):
        * platform/graphics/filters/FilterEffect.h:

2014-03-27  Sam Weinig  <sam@webkit.org>

        Convert yet more of HTMLConverter to C++
        https://bugs.webkit.org/show_bug.cgi?id=130850

        Reviewed by Anders Carlsson.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::isAncestorsOfStartToBeConverted):
        (HTMLConverter::HTMLConverter):
        (HTMLConverter::~HTMLConverter):
        (HTMLConverter::convert):
        (HTMLConverter::computedAttributesForElement):
        (HTMLConverter::attributesForElement):
        (HTMLConverter::_newParagraphForElement):
        (HTMLConverter::_newLineForElement):
        (HTMLConverter::_newTabForElement):
        (HTMLConverter::_addAttachmentForElement):
        (HTMLConverter::_addQuoteForElement):
        (HTMLConverter::_addValue):
        (HTMLConverter::_processHeadElement):
        (HTMLConverter::_enterElement):
        (HTMLConverter::_addTableCellForElement):
        (HTMLConverter::_processElement):
        (HTMLConverter::_addMarkersToList):
        (HTMLConverter::_exitElement):
        (HTMLConverter::_processText):
        (HTMLConverter::_traverseNode):
        (HTMLConverter::_traverseFooterNode):
        (WebCore::attributedStringFromRange):
        (_childrenForNode): Deleted.
        (HTMLConverter::_computedAttributesForElement): Deleted.
        (HTMLConverter::_attributesForElement): Deleted.
        (HTMLConverter::_loadFromDOMRange): Deleted.

2014-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r166441 and r166443.

        * CMakeLists.txt: Add platform/audio/AudioHardwareListener.cpp.

2014-03-28  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] The 'auto' height must be adapted to the item's margin.
        https://bugs.webkit.org/show_bug.cgi?id=130920

        Reviewed by Darin Adler.

        Adding the grid-item's marginLogicalHeight to the used breadth when computing
        content based grid-track sizes.

        Test: fast/css-grid-layout/grid-item-margin-auto-columns-rows.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):

2014-03-28  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: support for live regions
        https://bugs.webkit.org/show_bug.cgi?id=130725

        Reviewed by Timothy Hatcher.

        Tests: inspector-protocol/dom/getAccessibilityPropertiesForNode.html
               inspector-protocol/dom/getAccessibilityPropertiesForNode_liveRegion.html

        Initial support for @aria-live, @aria-atomic, and @aria-busy.

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

2014-03-28  Darin Adler  <darin@apple.com>

        Fix recently-introduced off-by-one error in centerTruncateToBuffer
        https://bugs.webkit.org/show_bug.cgi?id=130889
        <rdar://problem/16408694>

        Reviewed by Alexey Proskuryakov.

        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer): Simplified expression that computes truncatedLength.
        Removed incorrect "+ 1" from computation of where to write characters.

2014-03-28  Benjamin Poulain  <bpoulain@apple.com>

        Update the code related to SelectorPseudoTypeMap to reflect its new purpose
        https://bugs.webkit.org/show_bug.cgi?id=130620

        Reviewed by Andreas Kling.

        Since r166094, SelectorPseudoTypeMap only contains PseudoClass instances and the 4 compatibility PseudoElement.

        This patch rename SelectorPseudoTypeMap to SelectorPseudoClassAndCompatibilityElementMap and update the parsing
        to split PseudoClass and PseudoElement.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector):
        (WebCore::CSSParserSelector::setPseudoClassValue):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::appendPseudoClassFunctionTail):
        (WebCore::CSSSelector::selectorText):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in: Renamed from Source/WebCore/css/SelectorPseudoTypeMap.in.
        * css/SelectorPseudoTypeMap.h:
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py: Renamed from Source/WebCore/css/makeSelectorPseudoTypeMap.py.
        (enumerablePseudoType):
        (expand_ifdef_condition):

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Unreviewed build fix.

        * platform/audio/AudioHardwareListener.cpp:
        (WebCore::AudioHardwareListener::create):
        (WebCore::AudioHardwareListener::audioHardwareListenerIsSupported): Deleted.
        * platform/audio/AudioHardwareListener.h:

2014-03-28  Lukasz Bialek  <l.bialek@samsung.com>

        Refactor cut and copy functions as suggested in FIXME line
        https://bugs.webkit.org/show_bug.cgi?id=129867

        Reviewed by Darin Adler.

        Cut and Copy functions in Editor.cpp use lots of common code.
        Those functions are merged into one to share code, several
        additional conditions are added to preserve Cut and Copy
        functionality.

        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::performCutOrCopy):
        * editing/Editor.h:

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Rename pluginDidEvaluate to better represent when it’s called.
        Part of <rdar://problem/16061257> PluginProcess should AppNap when no plugins on active tab.

        Reviewed by Anders Carlsson.

        No new test because it’s just a name change.

        * page/PageThrottler.h:
        (WebCore::PageThrottler::pluginDidEvaluateWhileAudioIsPlaying):

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Notification handler for telling if audio hardware is active.
        https://bugs.webkit.org/show_bug.cgi?id=130743

        Reviewed by Jer Noble.

        Not web-exposed so no easy way to test.

        Listen to CoreAudio to see if audio hardware is active in the current process.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/AudioHardwareListener.cpp: Added.
        (WebCore::AudioHardwareListener::create):
        (WebCore::AudioHardwareListener::AudioHardwareListener):
        * platform/audio/AudioHardwareListener.h: Added.
        (WebCore::AudioHardwareListener::Client::~Client):
        (WebCore::AudioHardwareListener::~AudioHardwareListener):
        (WebCore::AudioHardwareListener::isHardwareActive):
        * platform/audio/mac/AudioHardwareListenerMac.cpp: Added.
        (WebCore::isAudioHardwareProcessRunning):
        (WebCore::AudioHardwareListener::create):
        (WebCore::AudioHardwareListenerMac::create):
        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
        (WebCore::AudioHardwareListenerMac::~AudioHardwareListenerMac):
        (WebCore::AudioHardwareListenerMac::setHardwareActive):
        * platform/audio/mac/AudioHardwareListenerMac.h: Added.

2014-03-28  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: expose what elements get generic "clickable" status
        https://bugs.webkit.org/show_bug.cgi?id=130721

        Reviewed by Timothy Hatcher.

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

        Expose ancestor element link to "Click Listener" or generic "Clickable: Yes" if current node has mouse handler.

        Update AccessibilityNodeObject::mouseButtonListener() to optionally return body element if 
            requested so that Web Inspector can display body event delegate handlers.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::mouseButtonListener):
        * accessibility/AccessibilityNodeObject.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/protocol/DOM.json:

2014-03-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Really drop all locks in nested run loop on iOS if WebThread is enabled
        https://bugs.webkit.org/show_bug.cgi?id=130912

        Reviewed by Geoffrey Garen.

        Previously we were calling DropAllLocks inside of a single line if statement,
        so the JSLock was getting reaquired very quickly. We really want to DropAllLocks
        for the duration of running the nested run loop on iOS if there is a WebThread.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::PageScriptDebugServer::runEventLoopWhilePausedInternal):

2014-03-28  Brent Fulgham  <bfulgham@apple.com>

        [Win] Enable Media Track testing features on Windows
        https://bugs.webkit.org/show_bug.cgi?id=130851

        Reviewed by Eric Carlson.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Execute code on Windows as well.
        (WebCore::Internals::Internals): Ditto.
        (WebCore::Internals::captionsStyleSheetOverride): Ditto.
        (WebCore::Internals::setCaptionsStyleSheetOverride): Ditto.
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride): Ditto.
        (WebCore::Internals::setCaptionDisplayMode): Ditto.

2014-03-28  Brian Burg  <bburg@apple.com>

        Web Replay: add page-level setting to bypass the MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=130728

        Reviewed by Timothy Hatcher.

        When replaying a specific Page we don't want to store its cached resources in the
        MemoryCache. This patch adds a page setting to prevent the page's resources from
        being saved in the MemoryCache.

        If Settings::usesMemoryCache() is false, page resources are given the special
        SessionID bypassCacheSessionID(). The cached resource loader and memory cache
        act as if the memory cache is disabled if the resource has this special session id.

        Hook up ReplayController to override the memory cache setting during capture/replay.

        Test: http/tests/cache/bypass-memory-cache-after-reload.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):
        * page/Page.cpp:
        (WebCore::Page::sessionID):
        * page/SessionID.h:
        (WebCore::SessionID::bypassCacheSessionID):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setUsesMemoryCache):
        (WebCore::Settings::usesMemoryCache):
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::setForceDeterministicSettings):
        * replay/ReplayController.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setUsesMemoryCache):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2014-03-28  Radu Stavila  <stavila@adobe.com>

        In some situations, partial layouts of floating elements produce incorrect results.
        https://bugs.webkit.org/show_bug.cgi?id=122668

        Reviewed by David Hyatt.

        When performing partial layout of float elements and checking if other float
        elements are encountered, incorrect results were obtained by not checking
        the size of the existing floats vector.

        Test: fast/block/float/floats-in-clean-line-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::checkFloatsInCleanLine):

2014-03-28  Beth Dakin  <bdakin@apple.com>

        Build fix.

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

2014-03-28  Jer Noble  <jer.noble@apple.com>

        [MSE] Implement support for SourceBuffer.remove()
        https://bugs.webkit.org/show_bug.cgi?id=121562

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-remove.html

        Add support for SourceBuffer.remove().

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer): Initialize new member variables.
        (WebCore::SourceBuffer::setTimestampOffset): Update comments to match spec.
        (WebCore::SourceBuffer::remove): Added; start removeTimer.
        (WebCore::SourceBuffer::abortIfUpdating): Cancel removeTimer.
        (WebCore::SourceBuffer::removedFromMediaSource): Call abortIfUpdating().
        (WebCore::SourceBuffer::stop): Cancel removeTimer.
        (WebCore::SourceBuffer::removeCodedFrames): Added.
        (WebCore::SourceBuffer::removeTimerFired): Added.
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:

2014-03-27  Dean Jackson  <dino@apple.com>

        Support form controls that may need incremental redraw
        https://bugs.webkit.org/show_bug.cgi?id=130736

        Reviewed by Beth Dakin.

        There are some form controls that change appearance
        over time. Expand the ControlStates so that it can
        hold a little more information, including a reference
        to the native form control. This way the Theme implementation
        can repaint the existing native control if necessary. At
        least ThemeMac was reusing a single control for painting
        all instances before this change.

        Since ControlStates is now a class, pass it around by
        reference.

        The other major change is keeping a timer to trigger a
        repaint in RenderBox, which happens if Theme/RenderTheme
        update the ControlState to request one.

        * WebCore.xcodeproj/project.pbxproj: Add ControlStates.h.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * dom/Element.cpp:
        (WebCore::Element::setActive): States now within ControlStates.
        (WebCore::Element::setHovered): Ditto.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged): Ditto.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledStateChanged): Ditto.
        (WebCore::HTMLFormControlElement::readOnlyAttributeChanged): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked): Ditto.
        (WebCore::HTMLInputElement::setIndeterminate): Ditto.
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute): Ditto.
        * platform/ControlStates.h: New file. Copied the old ControlStates enum,
        and added accessors to hold whether or not the state is dirty, and
        a reference to a platform control if necessary.
        * platform/Theme.h:
        (WebCore::Theme::selectionColor): Pass ControlStates pointer.
        (WebCore::Theme::paint): Ditto.
        (WebCore::Theme::inflateControlPaintRect): Ditto.
        * platform/ThemeTypes.h: Remove ControlStates enum.
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::applyEdjeStateFromForm): Pass ControlStates pointer.
        (WebCore::RenderThemeEfl::paintThemePart): Ditto.
        * platform/efl/RenderThemeEfl.h: Ditto.
        * platform/mac/ThemeMac.h: Ditto.
        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeView addSubview:]): New method to make sure we don't add CALayer backed
        views to the NSView we're using for rendering.
        (WebCore::updateStates): Use the private animated setters if necessary.
        (WebCore::convertControlStatesToThemeDrawState): Namespacing.
        (WebCore::configureCheckbox): Pass ControlStates pointer.
        (WebCore::createCheckboxCell): New helper since we're creating non-static cells.
        (WebCore::sharedCheckboxCell): The old static provider, renamed.
        (WebCore::paintCheckbox): Check if this paint was triggered by a state change
        or an animation. Update the ControlStates if we need to be repainted.
        (WebCore::radio): Parameter is now ControlStates*.
        (WebCore::paintRadio): Ditto.
        (WebCore::setUpButtonCell): Ditto.
        (WebCore::button): Ditto.
        (WebCore::paintButton): Ditto.
        (WebCore::paintStepper): Ditto.
        (WebCore::ThemeMac::ensuredView): Ditto.
        (WebCore::ThemeMac::inflateControlPaintRect): Ditto.
        (WebCore::ThemeMac::paint): Ditto.
        (WebCore::checkbox): Deleted.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox): Initialize timer.
        (WebCore::RenderBox::~RenderBox): Stop any pending timers and delete the ControlState if necessary.
        (WebCore::RenderBox::paintBoxDecorations): Create a ControlStates if needed. Paint, and start the repaint
        timer if the ControlStates say we should.
        (WebCore::RenderBox::repaintTimerFired): Call repaint when the timer fires.
        * rendering/RenderBox.h: Add a timer for repainting.
        * rendering/RenderElement.cpp:
        (WebCore::controlStatesRendererMap): A static HashMap that associates renderers with ControlStates.
        (WebCore::RenderElement::hasControlStatesForRenderer):
        (WebCore::RenderElement::controlStatesForRenderer):
        (WebCore::RenderElement::removeControlStatesForRenderer):
        (WebCore::RenderElement::addControlStatesForRenderer):
        * rendering/RenderElement.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Use a pointer to ControlStates.
        (WebCore::RenderTheme::adjustRepaintRect): Ditto.
        (WebCore::RenderTheme::stateChanged): Ditto.
        (WebCore::RenderTheme::updateControlStatesForRenderer): New method that just updates the states part of ControlStates.
        (WebCore::RenderTheme::extractControlStatesForRenderer): New method that calculates the state.
        (WebCore::RenderTheme::controlStatesForRenderer): Deleted.
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor): Use a ControlStates pointer.

2014-03-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Clear SVGInlineTextBox fragments when the text changes.
        https://bugs.webkit.org/show_bug.cgi?id=130879

        Reviewed by Darin Adler.

        Ported from Blink: https://src.chromium.org/viewvc/blink?revision=150456&view=revision

        This patch modifies SVGInlineTextBox::dirtyLineBoxes to clear all
        following text boxes when invoked. Typically this method is called
        when the underlying text string changes, and that change needs to
        be propagated to all the boxes that use the text beyond the point
        where the text is first modified.
        
        Also cleans up final function keywords for SVGRootInlineBox.

        Test: svg/custom/unicode-in-tspan-multi-svg-crash.html

        * rendering/InlineTextBox.h: Added (non-recursive) dirtyOwnLineBoxes() function
        (WebCore::InlineTextBox::dirtyOwnLineBoxes): Calls dirtyLineBoxes()
        * rendering/svg/SVGInlineTextBox.h: Added (non-recursive) dirtyOwnLineBoxes() function
        (WebCore::SVGInlineTextBox::dirtyOwnLineBoxes):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::dirtyOwnLineBoxes): Non-recursive part of dirtyLineBoxes()
        (WebCore::SVGInlineTextBox::dirtyLineBoxes): Calls dirtyOwnLineBoxes() in a loop
        * rendering/svg/SVGRootInlineBox.h:

2014-03-28  Andreas Kling  <akling@apple.com>

        Rebaseline bindings tests.

2014-03-28  Michael Saboff  <msaboff@apple.com>

        Unreviewed, rolling r166248 back in.

        Turns out r166070 didn't cause a 2% performance loss in page load times

        Reverted changeset:

        Unreviewed, rolling out r166126.
        Rollout r166126 in prepartion to roll out prerequisite r166070

2014-03-26  Antonio Gomes  <a1.gomes@sisa.samsung.com>

        [Bindings] constants are always typed to 'int'
        https://bugs.webkit.org/show_bug.cgi?id=130775

        Reviewed by Darin Adler.

        Patch fixes a bug where all constant getter generated
        methods were returning 'integer' values due to static_cast.

        Compilers should be smarth enough to properly infer which
        jsNumber class construtor to call given a literal value.

        Patch also fixes a bug where values whose representation
        is bigger an integer maximum were overflowing. For instance,
        NodeFilter.SHOW_ALL (0xFFFFFFFF).

        Tests:
        Binding tests updated.
        Rebaselined fast/dom/constants.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceIMPLEMENTSCONSTANT1):
        (WebCore::jsTestInterfaceIMPLEMENTSCONSTANT2):
        (WebCore::jsTestInterfaceSUPPLEMENTALCONSTANT1):
        (WebCore::jsTestInterfaceSUPPLEMENTALCONSTANT2):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjCONDITIONAL_CONST):
        (WebCore::jsTestObjCONST_VALUE_0):
        (WebCore::jsTestObjCONST_VALUE_1):
        (WebCore::jsTestObjCONST_VALUE_2):
        (WebCore::jsTestObjCONST_VALUE_4):
        (WebCore::jsTestObjCONST_VALUE_8):
        (WebCore::jsTestObjCONST_VALUE_9):
        (WebCore::jsTestObjCONST_VALUE_11):
        (WebCore::jsTestObjCONST_VALUE_12):
        (WebCore::jsTestObjCONST_VALUE_13):
        (WebCore::jsTestObjCONST_VALUE_14):
        (WebCore::jsTestObjCONST_JAVASCRIPT):
        (WebCore::jsTestObjReadonly):

2014-03-28  Myles C. Maxfield  <mmaxfield@apple.com>

        A TrailingObject's endpoint might get decremented twice
        https://bugs.webkit.org/show_bug.cgi?id=130874

        Reviewed by Darin Adler.

        There are two places where we might shave off a trailing space from the end
        of a line. We don't want to hit both codepaths for a single line.

        Fixes fast/block/update-midpoints-for-trailing-boxes-crash.html after r166245.

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):

2014-03-28  Andreas Kling  <akling@apple.com>

        Inline JSDOMWrapper subclasses' finishCreation().
        <https://webkit.org/b/130890>

        finishCreation() is really a no-op for JSDOMWrapper subclasses in
        release builds. None of the ancestor classes do anything but assert
        in their implementations.

        Generate the function inline, reducing binary size, and removing
        an unnecessary call from the JSFoo::create() helpers.

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):

2014-03-28  Jer Noble  <jer.noble@apple.com>

        [Mac] HLS streams will report an incorrect natural size.
        https://bugs.webkit.org/show_bug.cgi?id=130859

        Reviewed by Eric Carlson.

        Some HLS streams will report incorrect naturalSizes due to the asset's preferredTransform
        property not being  available at the same time as the track's natural size. Given that
        AVFoundation only allows one video track to be selected at a time, simply use the asset's
        presentation size, cached in m_cachedPresentation size in all cases.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):

2014-03-28  Antti Koivisto  <antti@apple.com>

        Remove NodeListRootType flag
        https://bugs.webkit.org/show_bug.cgi?id=130896

        Reviewed by Anders Carlsson.

        This can be handled statically (except for the RadioNodeList case) removing
        a branch from NodeList traversal.

        * dom/ClassNodeList.h:
        * dom/Document.cpp:
        (WebCore::Document::registerNodeListForInvalidation):
        (WebCore::Document::unregisterNodeListForInvalidation):
        (WebCore::Document::registerNodeList): Deleted.
        (WebCore::Document::unregisterNodeList): Deleted.
        
            Mark document invalidation registered lists with a bit.
            Renamed for clarity.

        * dom/Document.h:
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::rootNode):
        
            Base class version that invokes virtual isRootedAtDocument. It is needed to support 
            LiveNodeList::namedItem.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::isRegisteredForInvalidationAtDocument):
        (WebCore::LiveNodeList::setRegisteredForInvalidationAtDocument):
        (WebCore::LiveNodeList::document):
        (WebCore::CachedLiveNodeList<NodeListType>::CachedLiveNodeList):
        (WebCore::CachedLiveNodeList<NodeListType>::~CachedLiveNodeList):
        (WebCore::CachedLiveNodeList<NodeListType>::rootNode):
        
            Call isRootedAtDocument on the final leaf type. Except for RadioNodeList this
            resolves statically.

        (WebCore::CachedLiveNodeList<NodeListType>::willValidateIndexCache):
        (WebCore::CachedLiveNodeList<NodeListType>::invalidateCache):
        (WebCore::LiveNodeList::isRootedAtDocument): Deleted.
        (WebCore::LiveNodeList::rootType): Deleted.
        (WebCore::LiveNodeList::rootNode): Deleted.
        * dom/NameNodeList.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * dom/TagNodeList.h:
        * html/HTMLCollection.cpp:
        (WebCore::rootTypeFromCollectionType):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::isRootedAtDocument):
        (WebCore::HTMLCollection::rootType):
        
            HTMLCollections still needs the flag.

        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::LabelsNodeList):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::RadioNodeList):
        * html/RadioNodeList.h:

2014-03-28  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Geoclue2 providers won't work after reloading
        https://bugs.webkit.org/show_bug.cgi?id=130898

        Reviewed by Martin Robinson.

        Don't reuse the Geoclue2 client proxy between different calls to
        startPosition(), and create a new client proxy each time instead.

        * platform/geoclue/GeolocationProviderGeoclue2.cpp:
        (GeolocationProviderGeoclue::startUpdating): Don't reuse the
        client proxy, by always calling geoclue_manager_call_get_client().
        (GeolocationProviderGeoclue::stopUpdating): Disconnect from the
        'location-updated' signal and dispose the client proxy.

2014-03-28  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Too many redirects visiting www.globalforestwatch.org
        https://bugs.webkit.org/show_bug.cgi?id=129681

        Reviewed by Martin Robinson.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent): Append Safari version to UserAgent
        string.

2014-03-28  Michael Saboff  <msaboff@apple.com>

        Unreviewed, rolling r166249 back in.

        Turns out r166070 didn't cause a 2% performance loss in page load times

        Reverted changeset:

        Unreviewed, rolling out r166070.
        Rollout r166070 due to 2% performance loss in page load times

2014-03-28  James Craig  <jcraig@apple.com>

        Web Inspector: Copy/paste error. EventListener block in DOM.json uses description from Node.
        https://bugs.webkit.org/show_bug.cgi?id=130158

        Reviewed by Timothy Hatcher.

        * inspector/protocol/DOM.json: Fixed a copy/paste annoyance.

2014-03-27  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: expose selectedChildNodeIds of list boxes, tree controls, etc., and reconcile UI with childNodeIds
        https://bugs.webkit.org/show_bug.cgi?id=130827

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        Support for selectedChildNodeIds in inspector-protocol: DOM.getAccessibilityPropertiesForNode.

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

2014-03-27  Brent Fulgham  <bfulgham@apple.com>

        Specify Shadow DOM Pseudo IDs in Media Element Constructors
        https://bugs.webkit.org/show_bug.cgi?id=130882

        Reviewed by Eric Carlson.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::MediaControlPanelElement): Call setPseudoId in constructor.
        (WebCore::MediaControlPanelEnclosureElement::MediaControlPanelEnclosureElement): Ditto.
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement): Ditto.
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement): Ditto.
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement): Ditto.
        (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement): Ditto.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement): Ditto.
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): Ditto.
        (WebCore::MediaControlOverlayPlayButtonElement::MediaControlOverlayPlayButtonElement): Ditto.
        (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement): Ditto.
        (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement): Ditto.
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement): Ditto.
        (WebCore::MediaControlClosedCaptionsContainerElement::MediaControlClosedCaptionsContainerElement): Ditto.
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): Ditto.
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Ditto.
        (WebCore::MediaControlPanelVolumeSliderElement::MediaControlPanelVolumeSliderElement): Ditto.
        (WebCore::MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): Ditto.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement): Ditto.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement): Ditto.
        (WebCore::MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement): Ditto.
        (WebCore::MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement): Ditto.
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement): Ditto.

2014-03-27  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Adjust the tile coverage on the scrollview's edges
        https://bugs.webkit.org/show_bug.cgi?id=130884

        Reviewed by Dan Bernstein.

        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::computeCoverageRect):
        Pull back the future rect inside the contentRect if it goes outside.
        There is no point in retiling for rubberbanding and the extra tiles should be always be
        on the opposite side to the edges.

2014-03-27  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused LocaleMac::create method
        https://bugs.webkit.org/show_bug.cgi?id=130870

        Reviewed by Andreas Kling.

        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::create): Deleted.
        (WebCore::LocaleMac::shortDateFormatter): Deleted.

2014-03-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up unneeded "mutable" keyword
        https://bugs.webkit.org/show_bug.cgi?id=130832

        Reviewed by Andreas Kling.

        As r166350, this patch cleans up unneeded "mutable" keywords.
        Additionally, m_validatedSelectionCache is removed because it is not used anywhere else.

        * css/CSSFontFaceRule.h:
        * css/CSSStyleRule.h:
        * editing/FrameSelection.h:

2014-03-27  Enrica Casucci  <enrica@apple.com>

        Add support for AirPlay picker in WK2 for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=130855
        <rdar://problem/15349859>

        Reviewed by Eric Carlson, Joseph Pecoraro and Benjamin Poulain.

        Adds support in HTMLMediaSession to display the airplay picker
        and to monitor presence of available wireless targets.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::showPlaybackTargetPicker):
        (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets):
        (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged):
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::hasWirelessTargetsAvailable):
        (WebCore::MediaSessionManager::startMonitoringAirPlayRoutes):
        (WebCore::MediaSessionManager::stopMonitoringAirPlayRoutes):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::hasWirelessTargetsAvailable):
        (WebCore::MediaSessionManageriOS::startMonitoringAirPlayRoutes):
        (WebCore::MediaSessionManageriOS::stopMonitoringAirPlayRoutes):
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper hasWirelessTargetsAvailable]):
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]):
        (-[WebMediaSessionHelper stopMonitoringAirPlayRoutes]):
        (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled):

2014-03-27  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes][css clip-path] rounded corner calculation for box shapes is wrong
        https://bugs.webkit.org/show_bug.cgi?id=127982

        Reviewed by Simon Fraser.

        Calculate rounded corners for box shapes as defined in the CSS Shapes
        spec.

        Tests: css3/masking/clip-path-border-radius-border-box-000.html
               css3/masking/clip-path-border-radius-content-box-000.html
               css3/masking/clip-path-border-radius-content-box-001.html
               css3/masking/clip-path-border-radius-padding-box-000.html
               css3/masking/clip-path-border-radius-padding-box-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-border-box-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-border-box-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-border-box-002.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-content-box-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-content-box-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-content-box-002.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-content-box-003.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-margin-box-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-margin-box-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-margin-box-002.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-margin-box-003.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-margin-box-004.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-padding-box-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-padding-box-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-padding-box-002.html
               fast/shapes/shape-outside-floats/shape-outside-floats-border-radius-padding-box-003.html

        * platform/graphics/RoundedRect.h:
        (WebCore::RoundedRect::Radii::transposedRadii): Transpose radii for
            vertical writing modes.
        (WebCore::RoundedRect::moveBy): Add method for use with clip path.
        (WebCore::RoundedRect::transposedRect): Transpose rect for vertical
            writing modes.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::marginBoxRect): Return the margin box rect for
            the RenderBox.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Call the new function for the
            rounded corner calculation.
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape): Call the new function
            for the rounded corner calculation.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::adjustRadiusForMarginBoxShape): Helper function for
            computeRoundedRectForLayoutBoxShape.
        (WebCore::computeMarginBoxShapeRadius): Ditto.
        (WebCore::computeMarginBoxShapeRadii): Ditto.
        (WebCore::computeRoundedRectForBoxShape): Utility function to do the
            rounded corner calculation.
        * rendering/shapes/BoxShape.h: Add new function.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::getRoundedInnerBorderFor): Add default argument
            values.

2014-03-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166364.
        https://bugs.webkit.org/show_bug.cgi?id=130872

        Caused a test assertion (Requested by smfr on #webkit).

        Reverted changeset:

        "Operator stretching: expose a math data API"
        https://bugs.webkit.org/show_bug.cgi?id=130572
        http://trac.webkit.org/changeset/166364

2014-03-27  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Compute a good exposed rect when scaling WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=130761

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::setScrollVelocity):
        (WebCore::ScrollView::computeCoverageRect):
        While scaling in, do not add margins tiles. When scaling out, add 1 margin tile size
        all around.

2014-03-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166360.
        https://bugs.webkit.org/show_bug.cgi?id=130869

        Seems to have broken PLT (Requested by ap on #webkit).

        Reverted changeset:

        "Connection::dispatchOneMessage() can be re-entered while
        handling Cmd-key menu"
        https://bugs.webkit.org/show_bug.cgi?id=130767
        http://trac.webkit.org/changeset/166360

2014-03-27  Antti Koivisto  <antti@apple.com>

        Remove LiveNodeList::Type
        https://bugs.webkit.org/show_bug.cgi?id=130866

        Reviewed by Andreas Kling.

        We don't need dynamic type information anymore.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::LiveNodeList):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::invalidationType):
        (WebCore::CachedLiveNodeList<NodeListType>::CachedLiveNodeList):
        (WebCore::LiveNodeList::type): Deleted.
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::nodeMatches): Deleted.
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::nodeMatches):
        * dom/NodeRareData.h:
        (WebCore::NodeListTypeIdentifier<ClassNodeList>::value):
        (WebCore::NodeListTypeIdentifier<NameNodeList>::value):
        (WebCore::NodeListTypeIdentifier<TagNodeList>::value):
        (WebCore::NodeListTypeIdentifier<HTMLTagNodeList>::value):
        (WebCore::NodeListTypeIdentifier<RadioNodeList>::value):
        (WebCore::NodeListTypeIdentifier<LabelsNodeList>::value):
        
            Get unique id from type for key generation purposes only.

        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCacheWithName):
        (WebCore::NodeListsNodeData::namedNodeListKey):
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::HTMLTagNodeList::HTMLTagNodeList):
        * dom/TagNodeList.h:
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::LabelsNodeList):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::RadioNodeList):
        * html/RadioNodeList.h:

2014-03-27  Simon Fraser  <simon.fraser@apple.com>

        Fix crash when RenderView is cleared inside of frame flattening layout
        https://bugs.webkit.org/show_bug.cgi?id=130864

        Reviewed by Dan Bernstein.
        
        Navigating on http://wallstcheatsheet.com pages on iOS in WebKit1 would
        sometimes crash when, inside the inChildFrameLayoutWithFrameFlattening clause,
        our frame's RenderView would be null after doing a layout from the root frame,
        possibly also when WebCore was being re-entered from another thread.
        
        Add a null check to fix this.
        
        Crash was timing-dependent and hard to test.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2014-03-27  Antti Koivisto  <antti@apple.com>

        Remove some unnecessary branches from LiveNodeList traversal
        https://bugs.webkit.org/show_bug.cgi?id=130854

        Reviewed by Andreas Kling.

        Compile different traversal code paths for all NodeList subclasses.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        (WebCore::ClassNodeList::~ClassNodeList):
        (WebCore::ClassNodeList::nodeMatches): Deleted.
        * dom/ClassNodeList.h:
        (WebCore::ClassNodeList::nodeMatches):
        (WebCore::ClassNodeList::nodeMatchesInlined): Deleted.
        
            Remove separate nodeMatchesInlined functions. 
            We now rely on exact types and marking classes final.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        (WebCore::LiveNodeList::namedItem):
        (WebCore::LiveNodeList::rootNode): Deleted.
        (WebCore::isMatchingElement): Deleted.
        (WebCore::firstMatchingElement): Deleted.
        (WebCore::lastMatchingElement): Deleted.
        (WebCore::nextMatchingElement): Deleted.
        (WebCore::previousMatchingElement): Deleted.
        (WebCore::traverseMatchingElementsForward): Deleted.
        (WebCore::traverseMatchingElementsBackward): Deleted.
        (WebCore::LiveNodeList::collectionFirst): Deleted.
        (WebCore::LiveNodeList::collectionLast): Deleted.
        (WebCore::LiveNodeList::collectionTraverseForward): Deleted.
        (WebCore::LiveNodeList::collectionTraverseBackward): Deleted.
        (WebCore::LiveNodeList::length): Deleted.
        (WebCore::LiveNodeList::item): Deleted.
        (WebCore::LiveNodeList::memoryCost): Deleted.
        (WebCore::LiveNodeList::invalidateCache): Deleted.
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::invalidateCacheForAttribute):
        (WebCore::CachedLiveNodeList::collectionCanTraverseBackward):
        (WebCore::LiveNodeList::rootNode):
        (WebCore::CachedLiveNodeList<NodeListType>::CachedLiveNodeList):
        
            Add CachedLiveNodeList<NodeListType> utility type that interfaces with CollectionIndexCache.
            It is the base class for all concrete LiveNodeLists.

        (WebCore::CachedLiveNodeList<NodeListType>::~CachedLiveNodeList):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionFirst):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionLast):
        (WebCore::nextMatchingElement):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseForward):
        (WebCore::previousMatchingElement):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseBackward):
        (WebCore::CachedLiveNodeList<NodeListType>::willValidateIndexCache):
        (WebCore::CachedLiveNodeList<NodeListType>::invalidateCache):
        (WebCore::CachedLiveNodeList<NodeListType>::length):
        (WebCore::CachedLiveNodeList<NodeListType>::item):
        (WebCore::CachedLiveNodeList<NodeListType>::memoryCost):
        
            Templated code moves to header.

        (WebCore::LiveNodeList::LiveNodeList): Deleted.
        (WebCore::LiveNodeList::~LiveNodeList): Deleted.
        (WebCore::LiveNodeList::invalidateCache): Deleted.
        (WebCore::LiveNodeList::collectionCanTraverseBackward): Deleted.
        (WebCore::LiveNodeList::willValidateIndexCache): Deleted.
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        * dom/NameNodeList.h:
        * dom/Node.cpp:
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::NodeListsNodeData::invalidateCaches):
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::HTMLTagNodeList::HTMLTagNodeList):
        (WebCore::HTMLTagNodeList::~HTMLTagNodeList):
        (WebCore::TagNodeList::nodeMatches): Deleted.
        (WebCore::HTMLTagNodeList::nodeMatches): Deleted.
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::nodeMatches):
        (WebCore::HTMLTagNodeList::nodeMatches):
        (WebCore::TagNodeList::create): Deleted.
        (WebCore::HTMLTagNodeList::nodeMatchesInlined): Deleted.
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::LabelsNodeList):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::RadioNodeList):
        * html/RadioNodeList.h:

2014-03-27  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Remove comment from Filter.h
        https://bugs.webkit.org/show_bug.cgi?id=130848

        Reviewed by Simon Fraser.

        Exploring the use of consts on applyScale() methods didn't yield
        good results.

        No new tests, no change on behavior.

        * platform/graphics/filters/Filter.h:

2014-03-27  Frédéric Wang  <fred.wang@free.fr>

        Operator stretching: expose a math data API
        https://bugs.webkit.org/show_bug.cgi?id=130572

        Reviewed by Chris Fleizach.

        We expose a new SimpleFontData API to give access to the data from the
        OpenType MATH table using a font cache. The class OpenTypeMathData will
        be implemented in bug 130324. On Darwin platform, we also implement the
        missing FontPlatformData::openTypeTable function which will be necessary
        to load the OpenType MATH table. The changes are intended to be used
        for MathML operator stretching (bug 130322) so tests are not added yet.

        * CMakeLists.txt: add new OpenTypeMathData files.
        * WebCore.vcxproj/WebCore.vcxproj: ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * platform/graphics/FontCache.cpp: We add a FontCache::getMathData function to implement a cache for the math data.
        We make the math and vertical data share the same key for the cache.
        (WebCore::fontMathDataCacheInstance):
        (WebCore::FontCache::getMathData):
        (WebCore::fontVerticalDataCacheInstance):
        * platform/graphics/FontCache.h: We declare FontCache::getMathData and FontFileKey on all platforms.
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::openTypeTable): We implement openTypeTable() on Darwin platform.
        * platform/graphics/FontPlatformData.h: We expose openTypeTable() on Darwin platform.
        * platform/graphics/SimpleFontData.cpp: We initialize m_mathData from the font cache.
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h: We expose a mathData() function to access the MATH data.
        * platform/graphics/opentype/OpenTypeMathData.cpp: Added. This is a new class that will be used to parse the data from the OpenType MATH table.
        (WebCore::OpenTypeMathData::OpenTypeMathData):
        * platform/graphics/opentype/OpenTypeMathData.h: Added.
        (WebCore::OpenTypeMathData::create):
        (WebCore::OpenTypeMathData::hasMathData):

2014-03-27  Brent Fulgham  <bfulgham@apple.com>

        Fix a crash caused by track insertion after load()
        https://bugs.webkit.org/show_bug.cgi?id=130777

        Reviewed by Eric Carlson.

        Test: media/track/track-insert-after-load-crash.html

        Based on the Blink change (patch by acolwell@chromium.org):
        https://codereview.chromium.org/211373009/

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Remove stale LoadMediaResource flag after explicit load.

2014-03-27  Alexey Proskuryakov  <ap@apple.com>

        Connection::dispatchOneMessage() can be re-entered while handling Cmd-key menu
        equivalents, ASSERT(!_data->_keyDownEventBeingResent)
        https://bugs.webkit.org/show_bug.cgi?id=130767
        <rdar://problem/16307487>

        Added a wrapper for RunLoop::initializeMainThread that also adds modal run loop
        mode to it on Mac.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/MainRunLoop.cpp: Added.
        (WebCore::initializeMainRunLoop):
        * platform/MainRunLoop.h: Added.
        * platform/mac/MainRunLoop.mm: Added.
        (WebCore::initializeMainRunLoop):

2014-03-27  Krzysztof Czech  <k.czech@samsung.com>

        AX: Returns const reference to static string.
        https://bugs.webkit.org/show_bug.cgi?id=130835

        Reviewed by Mario Sanchez Prada.

        Avoiding some unnecessary copies by returning const reference to static string.

        No new tests. No behaviour change.

        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):
        (WebCore::AccessibilityMediaControlsContainer::elementTypeName):
        * accessibility/AccessibilityMediaControls.h:

2014-03-27  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Rename inNamedFlow flag to isNamedFlowContentNode flag
        https://bugs.webkit.org/show_bug.cgi?id=130731

        Reviewed by Andrei Bucur.

        Currently, the inNamedFlow flag in Node class tells if a node is a content node, one that has a style with flow-into.
        Since it is used only for those nodes and not propagated through hierarchy, i want to renamed it to a more meaningful name.
        No new functionality, no new tests.

        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::unregisterNamedFlowContentElement):
        * dom/Node.h:
        (WebCore::Node::isNamedFlowContentNode):
        (WebCore::Node::setIsNamedFlowContentNode):
        (WebCore::Node::clearIsNamedFlowContentNode):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::clearContentElements):
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentElement):
        (WebCore::nextNodeInsideContentElement):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachChildren):
        (WebCore::Style::resolveLocal):

2014-03-27  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash when cloning a region child with a content node child
        https://bugs.webkit.org/show_bug.cgi?id=129811

        Reviewed by David Hyatt.

        Collecting the children of a region in another named flow will be supported
        again in the future and it will be revisited when we will implement the content
        keyword: http://dev.w3.org/csswg/css-regions-1/#the-flow-into-property.
        Remove the support for now as it introduces unnecessary complexity in the code
        and potential wrong behavior.

        Test: fast/regions/region-content-node-child-clone-crash.html

        * dom/Element.cpp:
        (WebCore::Element::shouldMoveToFlowThread):
        (WebCore::Element::clearStyleDerivedDataBeforeDetachingRenderer):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        * rendering/FlowThreadController.cpp:
        * rendering/FlowThreadController.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::moveToFlowThreadIfNeeded):
        (WebCore::Style::createRendererIfNeeded):

2014-03-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unneeded mutable keyword in some member variables 
        https://bugs.webkit.org/show_bug.cgi?id=130813

        Reviewed by Andreas Kling.

        Some member variables have mutable keyword though they don't used by const function.
        This patch removes them. 

        No new tests, no behavior changes. Just clean up.

        * storage/StorageAreaSync.h:
        * svg/animation/SVGSMILElement.h:

2014-03-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166296 and r166331.
        https://bugs.webkit.org/show_bug.cgi?id=130822

        caused some crashes and frequent assertion failures, and the
        fix is going to take a little while (Requested by thorton on
        #webkit).

        Reverted changesets:

        "[iOS WebKit2] Flush all surfaces after painting into all of
        them, instead of after painting into each one"
        https://bugs.webkit.org/show_bug.cgi?id=130768
        http://trac.webkit.org/changeset/166296

        "Assertion failure in RemoteLayerBackingStore::flush"
        https://bugs.webkit.org/show_bug.cgi?id=130810
        http://trac.webkit.org/changeset/166331

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Fix failing scrolling tests by reverting to previous behavior where
        the scrolling geometry for the main frame scrolling node was only
        updated from frameViewLayoutUpdated() and no-where else.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateScrollingNode):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer): Deleted.

2014-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLConverter::_processText is slow because it walks up ancestor elements
        https://bugs.webkit.org/show_bug.cgi?id=130820

        Reviewed by Sam Weinig.

        Avoid walking up the tree from each text node by caching the aggregated attributed strings for each element.
        Also compute the attributed strings top-down to avoid calling mutableCopy in every iteration. 

        This reduces the runtime of Interactive/CopyAll.html from 15s to 13s (15%).

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_attributesForElement):
        (HTMLConverter::attributesForElement):
        (HTMLConverter::aggregatedAttributesForAncestors):
        (HTMLConverter::_processText):

2014-03-26  Sam Weinig  <sam@webkit.org>

        Fix iOS build.

        * editing/cocoa/HTMLConverter.mm:
        (_font):

2014-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Make _processText and _traverseNode in HTMLConverter more efficient
        https://bugs.webkit.org/show_bug.cgi?id=130769

        Reviewed by Sam Weinig.

        Rewrote a bunch of code in C++ and avoided creating wrappers.
        This reduces the runtime of Interactive/CopyAll.html from ~16.5s to 15s.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::isAncestorsOfStartToBeConverted):
        (HTMLConverter::HTMLConverter):
        (HTMLConverter::~HTMLConverter):
        (HTMLConverter::_processElement):
        (HTMLConverter::_processText):
        (HTMLConverter::_traverseNode):
        (HTMLConverter::_traverseFooterNode):
        (HTMLConverterCaches::cacheAncestorsOfStartToBeConverted):
        (HTMLConverter::_loadFromDOMRange):

2014-03-26  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        FEGaussianBlur: unify and const-ify calculateKernelSize
        https://bugs.webkit.org/show_bug.cgi?id=130779

        Some methods can benefit of using const refs as also make sense to
        unify the interface (i.e. parameters) in calculateKernelSize/Unscaled.

        FilterEffect::filter() will now return a reference, which helps since
        its descendants were accessing methods into the pointer without testing
        for it.

        Reviewed by Simon Fraser.

        No new tests, no changes on behavior.

        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::determineAbsolutePaintRect):
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):
        (WebCore::FEGaussianBlur::calculateKernelSize):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::determineAbsolutePaintRect):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::determineAbsolutePaintRect):
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::applyHorizontalScale):
        (WebCore::Filter::applyVerticalScale):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::filter):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::determineAbsolutePaintRect):
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::determineAbsolutePaintRect):
        (WebCore::SourceGraphic::platformApplySoftware):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::platformApplySoftware):

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Make sure childContainmentLayer is parented
        https://bugs.webkit.org/show_bug.cgi?id=130808

        Reviewed by Tim Horton.

        m_childContainmentLayer was never parented if the page
        created no other compositing layers, which left a dangling
        GraphicsLayer which in turn confused UI-side compositing a little.
        Fix by always parenting this layer.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):

2014-03-26  Brian Burg  <bburg@apple.com>

        Web Replay: disable page cache during capture/replay
        https://bugs.webkit.org/show_bug.cgi?id=130672

        Reviewed by Timothy Hatcher.

        Save, set, and restore page cache settings at the correct times.

        No new tests. If this code fails, then the tests for network replay will fail.

        * replay/ReplayController.cpp:
        (WebCore::ReplayController::setForceDeterministicSettings): Added.
        (WebCore::ReplayController::startCapturing):
        (WebCore::ReplayController::stopCapturing):
        (WebCore::ReplayController::cancelPlayback):
        (WebCore::ReplayController::replayToPosition):
        * replay/ReplayController.h:

2014-03-26  Sam Weinig  <sam@webkit.org>

        Convert more of HTMLConverter to C++
        https://bugs.webkit.org/show_bug.cgi?id=130811

        Reviewed by Anders Carlsson.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::HTMLConverter):
        (HTMLConverter::~HTMLConverter):
        (HTMLConverter::_blockLevelElementForNode):
        (HTMLConverter::_colorForElement):
        (HTMLConverter::_computedAttributesForElement):
        (HTMLConverter::_attributesForElement):
        (HTMLConverter::_fillInBlock):
        (HTMLConverter::_enterElement):
        (HTMLConverter::_addTableForElement):
        (HTMLConverter::_addTableCellForElement):
        (HTMLConverter::_processElement):
        (HTMLConverter::_exitElement):
        (HTMLConverter::_getFloat): Deleted.
        (HTMLConverter::_elementIsBlockLevel): Deleted.
        (HTMLConverter::_elementHasOwnBackgroundColor): Deleted.
        (HTMLConverter::_colorForNode): Deleted.

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Hook up -webkit-overflow-scrolling:touch for iOS WK2
        https://bugs.webkit.org/show_bug.cgi?id=130809

        Reviewed by Tim Horton.

        Get -webkit-overflow-scrolling: touch working for iOS WK2.
        
        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        Send in ScrollingGeometry when we update scrolling nodes.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateScrollingNode):
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        Need to get to the scrolling layer in a subclass.
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasAcceleratedTouchScrolling): Remove code
        that temporarily disabled touch-scrolling.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): When we
        update scrolling nodes, send in the right scrolling geometry.

2014-03-26  Timothy Hatcher  <timothy@apple.com>

        Modernize the loops in InspectorPageAgent.cpp.

        Also moves the check for hiddenFromInspector to a lower level.
        This hides hidden resources from more places.

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

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildArrayForCookies):
        (WebCore::cachedResourcesForFrame):
        (WebCore::allResourcesURLsForFrame):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::loaderDetachedFromFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):

2014-03-26  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Add platform implementation for RTCOfferAnswerOptions and RTCOfferOptions
        https://bugs.webkit.org/show_bug.cgi?id=130689

        Reviewed by Eric Carlson.

        RTCOfferAnswerOptions and RTCOfferOptions objects were being passed to platform class, causing a layer
        violation.

        * Modules/mediastream/RTCOfferAnswerOptions.cpp:
        (WebCore::RTCOfferAnswerOptions::initialize):
        (WebCore::RTCOfferOptions::initialize):
        * Modules/mediastream/RTCOfferAnswerOptions.h:
        (WebCore::RTCOfferAnswerOptions::requestIdentity):
        (WebCore::RTCOfferAnswerOptions::privateOfferAnswerOptions):
        (WebCore::RTCOfferAnswerOptions::RTCOfferAnswerOptions):
        (WebCore::RTCOfferOptions::offerToReceiveVideo):
        (WebCore::RTCOfferOptions::offerToReceiveAudio):
        (WebCore::RTCOfferOptions::voiceActivityDetection):
        (WebCore::RTCOfferOptions::iceRestart):
        (WebCore::RTCOfferOptions::privateOfferOptions):
        (WebCore::RTCOfferOptions::RTCOfferOptions):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        * platform/mediastream/RTCOfferAnswerOptionsPrivate.h: Added.
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):
        (WebCore::RTCPeerConnectionHandlerMock::createAnswer):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2014-03-26  Zalan Bujtas  <zalan@apple.com>

        Device scale factor should always be greater than 0.
        https://bugs.webkit.org/show_bug.cgi?id=130798

        Reviewed by David Kilzer.

        Rendering context requires a device scale factor > 0 so that we can map CSS pixels
        to device pixels properly. Neither 0 nor a negative device pixel ratio are considered to be valid.

        * page/Page.cpp:
        (WebCore::Page::setDeviceScaleFactor):

2014-03-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Skipping underlines disregard points completely inside the underline rect
        https://bugs.webkit.org/show_bug.cgi?id=130800

        Reviewed by Dean Jackson.

        When determining bounds for underline skipping, endpoints of glyph contours
        that lie entirely within the rect of the underline are ignored. This patch
        makes these points affect the skipping regions the same way that intersections
        do.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/glyph-inside-underline.html

        * platform/graphics/mac/FontMac.mm:
        (WebCore::updateX): Refactored common code into a function
        (WebCore::findPathIntersections): Test for endpoints which lie entirely within
        the underline bounds

2014-03-26  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. iOS build fix after r166312. Soft link CMTimeRangeGetEnd.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:

2014-03-26  Timothy Hatcher  <timothy@apple.com>

        Propagate the hiddenFromInspector flag on ResourceRequest in
        places when a new request a made or passed between processes.

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

        Reviewed by Joseph Pecoraro.

        * WebCore.exp.in: Updated symbols for updateFromDelegatePreservingOldProperties.
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties): Added.
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody): Deleted.
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties): Added.
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody): Deleted.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties): Added.
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody): Deleted.
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties): Added.
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody): Deleted.

2014-03-26  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove no-longer-used shape-inside geometry code
        https://bugs.webkit.org/show_bug.cgi?id=130740

        Reviewed by David Hyatt.

        This patch removes shape-padding support, since it can be used only with shape-inside.
        Shape-inside support has been removed in r166301.

        No new tests needed, existing tests have been removed by r166301.

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::shapePaddingLogicalBoundingBox): Deleted.
        (WebCore::BoxShape::shapePaddingBounds): Deleted.
        (WebCore::BoxShape::getIncludedIntervals): Deleted.
        (WebCore::BoxShape::firstIncludedIntervalLogicalTop): Deleted.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::leftSide): Deleted.
        (WebCore::isReflexVertex): Deleted.
        (WebCore::computeShapePaddingBounds): Deleted.
        (WebCore::PolygonShape::shapePaddingBounds): Deleted.
        (WebCore::PolygonShape::getIncludedIntervals): Deleted.
        (WebCore::firstFitRectInPolygon): Deleted.
        (WebCore::aboveOrToTheLeft): Deleted.
        (WebCore::PolygonShape::firstIncludedIntervalLogicalTop): Deleted.
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::firstIncludedIntervalY): Deleted.
        (WebCore::RasterShapeIntervals::getIncludedIntervals): Deleted.
        (WebCore::RasterShape::paddingIntervals): Deleted.
        (WebCore::RasterShape::getIncludedIntervals): Deleted.
        (WebCore::RasterShape::firstIncludedIntervalLogicalTop): Deleted.
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::ellipseYIntercept): Deleted.
        (WebCore::RectangleShape::shapePaddingBounds): Deleted.
        (WebCore::RectangleShape::getIncludedIntervals): Deleted.
        (WebCore::cornerInterceptForWidth): Deleted.
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop): Deleted.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createBoxShape):
        * rendering/shapes/Shape.h:
        (WebCore::Shape::lineOverlapsShapePaddingBounds): Deleted.
        (WebCore::Shape::shapePadding): Deleted.
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        * 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-03-26  Jeremy Jones  <jeremyj@apple.com>

        Implement hasLiveStreamingContent property in WebAVPlayerController
        https://bugs.webkit.org/show_bug.cgi?id=128684

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Add export for WebVideoFullscreenInterfaceAVKit::setSeekableRanges().

        * platform/ios/WebVideoFullscreenInterface.h:
        Add setSeekableRanges()

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        Add setSeekableRanges()

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        Remove vestigial playerLayer property. Add seekableTimeRanges property.

        (-[WebAVPlayerController dealloc]):
        Release _seekableTimeRanges.
        Remove references to _playerLayer.

        (-[WebAVPlayerController hasLiveStreamingContent]):
        Implement based on duration. Live stream has an infinite duration.

        (+[WebAVPlayerController keyPathsForValuesAffectingHasLiveStreamingContent]):
        Describe dependent keys for computed property hasLiveStreamingContent.

        (-[WebAVPlayerController skipBackwardThirtySeconds:]):
        Seek back 30 seconds if that time is in the seekable ranges.

        (-[WebAVPlayerController gotoEndOfSeekableRanges:]):
        Jump to live by going to the of the seekable ranges.

        (WebVideoFullscreenInterfaceAVKit::setSeekableRanges):
        Convert TimeRange to CMTimeRange.

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::setMediaElement):
        Set initial seekable ranges.

        (WebVideoFullscreenModelMediaElement::handleEvent):
        Update seekable ranges when time changes.

2014-03-26  Brent Fulgham  <bfulgham@apple.com>

        Fix OS X build.

        * WebCore.exp.in: Add missing export symbol.

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Fix the Windows build. Add a no-op impl for Mac non-UI-side.

        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r155977): matrix animations no longer animate
        https://bugs.webkit.org/show_bug.cgi?id=130789
        <rdar://problem/15650946>

        Reviewed by Dean Jackson.
        
        r155977 erroneously removed two lines that set the end points for
        matrix animations (used when transform lists don't match), so
        put them back.
        
        Also don't repaint when updateContentsScale()
        is called and doesn't change the contents scale.

        Test: compositing/animation/matrix-animation.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateRootRelativeScale):
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerCA::updateContentsScale):

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Add a custom behavior flag to GraphicsLayer, piped down to PlatformCALayer, for scrolling layers
        https://bugs.webkit.org/show_bug.cgi?id=130778

        Reviewed by Tim Horton.

        Make it possible to put a "custom behavior" flag on a layer so that,
        with UI-side compositing, we know to create a specific type of
        layer or view for that GraphicsLayer.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setCustomBehavior):
        (WebCore::GraphicsLayer::customBehavior):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateCustomBehavior):
        (WebCore::GraphicsLayerCA::setCustomBehavior):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateScrollingLayers):

2014-03-26  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test correction.

        Because of the way DRT on Windows links to WebCore, having the implementaion of the update
        method in the header caused a runtime failure due to duplicate symbols being bound to the
        compilation unit.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility): Moved from header.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility): Deleted.

2014-03-26  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r162679): Poster image visible under the video
        https://bugs.webkit.org/show_bug.cgi?id=130783

        Reviewed by Simon Fraser.

        In the listed revision, we started checking for isRenderImage()
        instead of isImage(). RenderMedias return 'true' for the first
        but 'false' for the second. Change the if() statement to check
        for isRenderMedia() in addition to !isRenderImage().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):

2014-03-26  Antti Koivisto  <antti@apple.com>

        Render tree construction is O(N^2) in number of siblings
        https://bugs.webkit.org/show_bug.cgi?id=129065

        Reviewed by Darin Adler.
        
        When adding a new renderer to the tree we would search for the correct render tree
        position by traversing DOM children forward to find something that already has a renderer.
        In common case there is no such renderer. This would be repeated for each inserted renderer
        leading to O(n^2) in respect to child node count.
        
        This patch caches the computed render tree insertion position and passes it to siblings.
        Until the cached position is reached it can be used for all new renderers.

        Test: perf/sibling-renderer-On2.html

        * style/StyleResolveTree.cpp:
        (WebCore::Style::RenderTreePosition::parent):
        (WebCore::Style::RenderTreePosition::RenderTreePosition):
        (WebCore::Style::RenderTreePosition::canInsert):
        (WebCore::Style::RenderTreePosition::insert):
        (WebCore::Style::RenderTreePosition::computeNextSibling):
        (WebCore::Style::RenderTreePosition::invalidateNextSibling):
        (WebCore::Style::styleForElement):
        (WebCore::Style::elementInsideRegionNeedsRenderer):
        (WebCore::Style::createRendererIfNeeded):
        (WebCore::Style::createTextRendererIfNeeded):
        (WebCore::Style::attachTextRenderer):
        (WebCore::Style::updateTextRendererAfterContentChange):
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::resolveLocal):
        (WebCore::Style::resolveTextNode):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::resolveTree):

2014-03-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166264.
        https://bugs.webkit.org/show_bug.cgi?id=130785

        Broke some window.opener tests for WK2 Mavericks (Requested by
        brrian__ on #webkit).

        Reverted changeset:

        "Web Replay: resource unique identifiers should be unique-per-
        frame, not globally"
        https://bugs.webkit.org/show_bug.cgi?id=130632
        http://trac.webkit.org/changeset/166264

2014-03-26  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove shape-inside support
        https://bugs.webkit.org/show_bug.cgi?id=130698

        Reviewed by David Hyatt.

        CSS Shapes Level 1 (CR) only contains shape-outside. We are focusing our efforts on finalizing
        the implementation of shape-outside, it's worth to remove shape-inside code at this point for now.

        A list of reasons for the removal:
          - Shape-inside is only part of Shapes Level 2, which needs to be improved on some topics.
          - Shape-inside is lack of new shapes support (e.g. inset).
          - Deprecated shapes (r165472) are removed from the code (e.g. rectangle), which affects shape-inside. 
          - The current shape-inside code spreads across the layout code.
          - The current shape-inside implementation is experimental in some areas,
            and the partially implemented code can have security implications.
          - Removal of shape-inside opens possibilities for code complexity and performance
            optimizations for shape-outside. (e.g. simpler geometry code)

        No new tests are needed.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (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):
        (WebCore::LayoutState::shapeInsideInfo): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::imageChanged):
        (WebCore::RenderBlock::preparePaginationBeforeBlockLayout):
        (WebCore::RenderBlock::relayoutShapeDescendantIfMoved): Deleted.
        (WebCore::RenderBlock::logicalOffsetFromShapeAncestorContainer): Deleted.
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange): Deleted.
        (WebCore::RenderBlock::ensureShapeInsideInfo): Deleted.
        (WebCore::RenderBlock::shapeInsideInfo): Deleted.
        (WebCore::RenderBlock::setShapeInsideInfo): Deleted.
        (WebCore::RenderBlock::markShapeInsideDescendantsForLayout): Deleted.
        (WebCore::RenderBlock::layoutShapeInsideInfo): Deleted.
        (WebCore::shapeInfoRequiresRelayout): Deleted.
        (WebCore::RenderBlock::computeShapeSize): Deleted.
        (WebCore::RenderBlock::updateShapesBeforeBlockLayout): Deleted.
        (WebCore::RenderBlock::updateShapesAfterBlockLayout): Deleted.
        (WebCore::RenderBlock::prepareShapesAndPaginationBeforeBlockLayout): Deleted.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::allowsShapeInsideInfoSharing): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::constructBidiRunsForLine): Deleted.
        (WebCore::pushShapeContentOverflowBelowTheContentBox): Deleted.
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLine): Deleted.
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread): Deleted.
        (WebCore::adjustLogicalLineTop): Deleted.
        (WebCore::RenderBlockFlow::adjustLogicalLineTopAndLogicalHeightIfNeeded): Deleted.
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::initializeStyle):
        (WebCore::RenderElement::setStyle):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * 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):
        (WebCore::updateSegmentsForShapes): Deleted.
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::LineWidth::wrapNextToShapeOutside):
        (WebCore::LineWidth::fitBelowFloats):
        (WebCore::LineWidth::updateLineSegment): Deleted.
        (WebCore::LineWidth::updateCurrentShapeSegment): Deleted.
        * rendering/line/LineWidth.h:
        * rendering/shapes/ShapeInsideInfo.cpp: Removed.
        * rendering/shapes/ShapeInsideInfo.h: Removed.
        * 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-03-25  Brent Fulgham  <bfulgham@apple.com>

        Avoid duplicate size checks when creating empty image
        https://bugs.webkit.org/show_bug.cgi?id=130730

        Reviewed by Dean Jackson.

        Merged from Blink (patch by ch.dumez@samsung.com):
        https://chromium.googlesource.com/chromium/blink/+/4861a71bc1f284fc97417f405ab7d08dc6947b88
        http://crbug.com/190633011

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::createEmptyImageData): Don't perform overflow calculation twice.

2014-03-26  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] getComputedStyle() must return the specified value for positioning properties
        https://bugs.webkit.org/show_bug.cgi?id=130010

        Reviewed by Darin Adler.

        According to the specs
        http://dev.w3.org/csswg/css-grid/#property-index and also to
        http://lists.w3.org/Archives/Public/www-style/2014Mar/0162.html
        the function getComputedStyle() must return the specified values
        for positioning properties, i.e, grid-{columns|rows}-{start|end}.

        We were in some cases, adjusting the style in the StyleResolver
        (for example with two opposing spans) something that is now done
        in the RenderGrid because we cannot alter the original style.

        The code moved to the renderer became more self explanatory and it
        now supports named grid areas with names ending in "-start" and
        "-end".

        Test: fast/css-grid-layout/named-grid-lines-with-named-grid-areas-get-set.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::gridLineDefinedBeforeGridArea): Deleted.
        (WebCore::StyleResolver::adjustNamedGridItemPosition): Deleted.
        (WebCore::StyleResolver::adjustGridItemPosition): Deleted.
        * css/StyleResolver.h:
        * rendering/RenderGrid.cpp:
        (WebCore::isColumnSide):
        (WebCore::RenderGrid::explicitGridSizeForSide):
        (WebCore::gridLineDefinedBeforeGridArea):
        (WebCore::setNamedLinePositionIfDefinedBeforeArea):
        (WebCore::RenderGrid::adjustNamedGridItemPosition):
        (WebCore::RenderGrid::adjustGridPositionsFromStyle):
        (WebCore::RenderGrid::resolveGridPositionsFromStyle):
        (WebCore::RenderGrid::resolveNamedGridLinePositionFromStyle):
        (WebCore::RenderGrid::resolveNamedGridLinePositionAgainstOppositePosition):
        * rendering/RenderGrid.h:
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::setAutoPosition): New helper function.

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * WebCore.exp.in:

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Flush all surfaces after painting into all of them, instead of after painting into each one
        https://bugs.webkit.org/show_bug.cgi?id=130768
        <rdar://problem/16421471>

        Reviewed by Simon Fraser.

        * platform/graphics/cocoa/IOSurface.h:
        Add a non-ensuring platformContext() getter.

2014-03-26  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: crash when inspecting "bar" text node in getAccessibilityPropertiesForNode layout test
        https://bugs.webkit.org/show_bug.cgi?id=130290

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        Fixing regression from r165590. http://webkit.org/b/129779
        Verify isElementNode to avoid calling toElement on document or text nodes.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2014-03-25  Sergio Villar Senin  <svillar@igalia.com>

        Replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed<T> in editing/
        https://bugs.webkit.org/show_bug.cgi?id=130722

        Reviewed by Antti Koivisto.

        * editing/AlternativeTextController.cpp:
        (WebCore::markerTypesForAutocorrection):
        (WebCore::markerTypesForReplacement):
        (WebCore::markerTypesForAppliedDictationAlternative):
        * editing/EditingStyle.cpp:
        (WebCore::htmlElementEquivalents):
        (WebCore::htmlAttributeEquivalents):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::isElementForRemoveFormatCommand):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isProhibitedParagraphChild):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::maybeEmitTextFocusChange):

2014-03-25  Simon Fraser  <simon.fraser@apple.com>

        Add a new type of scrolling tree node for overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=130763

        Reviewed by Tim Horton.

        Prepare for overflow scrolling via the scrolling tree by adding
        a new scrolling node type for overflow:scroll nodes. Mostly
        this is a new ScrollingNodeType that gets mapped to the same
        scrolling state nodes and scrolling nodes, but iOS creates
        state and scrolling nodes specific to overflow:scroll.
        
        Change the type checking on nodes to use virtual functions instead
        of just checking the node type, to allow the macros to work with
        the new scrolling node type.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isFixedNode):
        (WebCore::ScrollingStateNode::isStickyNode):
        (WebCore::ScrollingStateNode::isScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::create):
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::isFixedNode):
        (WebCore::ScrollingTreeNode::isStickyNode):
        (WebCore::ScrollingTreeNode::isScrollingNode):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::create):
        (WebCore::ScrollingTreeScrollingNodeIOS::ScrollingTreeScrollingNodeIOS):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::create):
        (WebCore::ScrollingTreeScrollingNodeMac::ScrollingTreeScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2014-03-26  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Utilize new AtkValue interface coming in ATK 2.11.92
        https://bugs.webkit.org/show_bug.cgi?id=130575

        Reviewed by Mario Sanchez Prada.

        ATK 2.11.92 introduces some new API and deprecates an old one.
        Adjust current implementation to meet requirements of the new API.

        No new tests. Covered by existing ones.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        (webkitAccessibleSetNewValue):
        (webkitAccessibleGetIncrementValue):
        (webkitAccessibleGetValueAndText):
        (webkitAccessibleGetIncrement):
        (webkitAccessibleSetValue):
        (webkitAccessibleGetRange):
        (webkitAccessibleValueSetCurrentValue):
        (webkitAccessibleValueGetMinimumIncrement):
        (webkitAccessibleValueInterfaceInit):

2014-03-26  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Removing the remaining Automake cruft.

        * GNUmakefile.list.am: Removed.

2014-03-25  Pratik Solanki  <psolanki@apple.com>

        iOS build fix. Add missing semicolon.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addAttachmentForElement):

2014-03-25  Sam Weinig  <sam@webkit.org>

        Speculative iOS build fix.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addAttachmentForElement):

2014-03-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Duplicate 'seeked' events.
        https://bugs.webkit.org/show_bug.cgi?id=130754

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-duplicate-seeked.html

        During certain seek operations, HTMLMediaElement::finishSeek() can be called re-entrantly due to
        the ready state changing as a result of MediaSource::monitorSourceBuffers(). Move this call to the
        end of finishSeek() after m_seeking has been cleared.

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

2014-03-25  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: add support for aria-activedescendant and reconcile UI/testing with parentNode
        https://bugs.webkit.org/show_bug.cgi?id=130712

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        Support for @aria-activedescendant; code reuse changes w/ parentNode and activeDescendantNode.

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

2014-03-25  Sanghyup Lee  <sh53.lee@samsung.com>

        When the mouse is upped after dragged out of shadowDOM, it should lose :active.
        https://bugs.webkit.org/show_bug.cgi?id=130660

        Reviewed by Darin Adler.

        This caused a regression after r165037.
        When we have to clear :active style of shadow DOM, we should clear host's style.
        This patch replaces parentElement() by parentOrShadowHostElement().

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

2014-03-25  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Always retry a failed MediaDocument as a PluginDocument
        https://bugs.webkit.org/show_bug.cgi?id=130742

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaLoadingFailedFatally): If the element is in a media document,
            tell it that loading failed so it can retry as a plug-in.

2014-03-25  Ryosuke Niwa  <rniwa@webkit.org>

        Replace HTMLConverter::_stringForNode by propertyValueForNode
        https://bugs.webkit.org/show_bug.cgi?id=130711

        Reviewed by Sam Weinig.

        Replaced all calls to HTMLConverter::_stringForNode by that to propertyValueForNode.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_computedAttributesForElement):
        (HTMLConverter::_addAttachmentForElement):
        (HTMLConverter::_enterElement):
        (HTMLConverter::_addTableForElement):
        (HTMLConverter::_addTableCellForElement):
        (HTMLConverter::_processElement):
        (HTMLConverter::_exitElement):
        (HTMLConverter::_processText):
        (HTMLConverter::_traverseNode):
        (HTMLConverter::_traverseFooterNode):
        (HTMLConverter::_stringForNode): Deleted.

2014-03-25  Pratik Solanki  <psolanki@apple.com>

        Attempt to fix iOS build after r166261.

        * WebCore.xcodeproj/project.pbxproj: Make SystemSleepListener.h a private header.

2014-03-21  Jer Noble  <jer.noble@apple.com>

        [iOS] Enable caption support in full screen.
        https://bugs.webkit.org/show_bug.cgi?id=130603

        Reviewed by Eric Carlson.

        Add TextTrackRepresentation support to MediaPlayerPrivateAVFoundationObjC.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Add the m_textTrackRepresenationLayer if present.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::requiresTextTrackRepresentation): True, if a m_videoFullscreenLayer is present.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setTextTrackRepresentation): Remove the old, and add the new m_textTrackRepresenationLayer.

        Make the text track container a stacking context for painting purposes.
        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-text-track-container):

2014-03-25  Brian Burg  <bburg@apple.com>

        Web Replay: resource unique identifiers should be unique-per-frame, not globally
        https://bugs.webkit.org/show_bug.cgi?id=130632

        Reviewed by Timothy Hatcher.

        For replay purposes, we want to deterministically assign resource load identifiers
        to resource loaders, provided that the resource loaders are created in the same
        order.

        To do this, we convert unique identifiers from being globally-unique to being
        frame-unique. When a new frame is being loaded, unique identifiers for
        subresources of that frame begin counting from 1.

        No new tests. Identifier invariants are exercised by existing assertions and tests.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::createUniqueIdentifier):
        * loader/ProgressTracker.h:

2014-03-25  Jer Noble  <jer.noble@apple.com>

        [Mac] Pause the media element during system sleep.
        https://bugs.webkit.org/show_bug.cgi?id=130718

        Reviewed by Eric Carlson.

        Test: media/video-system-sleep.html

        Relying on the platform media system to pause and restart playback during
        system sleep can cause problems on some platforms, especially where hardware
        decoders are concerned. Rather than implicitly pausing the media during
        system sleep, explicitly pause the media before sleeping and resume (if
        appropriate) upon waking.

        Add a new class to be used for system sleep notifications:
        * platform/SystemSleepListener.cpp: Added.
        (WebCore::SystemSleepListener::create):
        (WebCore::SystemSleepListener::SystemSleepListener):
        * platform/SystemSleepListener.h: Added.
        (WebCore::SystemSleepListener::Client::~Client):
        (WebCore::SystemSleepListener::~SystemSleepListener):
        (WebCore::SystemSleepListener::client):

        Add a Mac-specific implementation:
        * platform/mac/SystemSleepListenerMac.h: Added.
        * platform/mac/SystemSleepListenerMac.mm: Added.
        (WebCore::SystemSleepListener::create):
        (WebCore::SystemSleepListenerMac::SystemSleepListenerMac):
        (WebCore::SystemSleepListenerMac::~SystemSleepListenerMac):

        Listen for system sleep notifications in MediaSessionManager:
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::systemWillSleep):
        (WebCore::MediaSessionManager::systemDidWake):
        * platform/audio/MediaSessionManager.h:

        Drive-by fix; notify the MediaSession that playback will begin
        due to autoplay, but do not begin autoplaying if the session
        is already interrupted:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

        Add new files to project:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * GNUmakefile.list.am:

2014-03-25  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] The background of children of scrollable elements flowed into regions is not properly scrolled
        https://bugs.webkit.org/show_bug.cgi?id=130574

        Reviewed by David Hyatt.

        When computing the clip rect for painting the box decorations, the scrolled content offset
        must be computed by going up the containing block tree, up to the region.

        Tests: fast/regions/scrollable-region-scrollable-absolute-content-background.html
               fast/regions/scrollable-region-scrollable-content-background.html

        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::decorationsClipRectForBoxInNamedFlowFragment):

2014-03-25  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Inspector View Indication Support
        https://bugs.webkit.org/show_bug.cgi?id=130709

        Reviewed by Simon Fraser.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::showInspectorIndication):
        (WebCore::InspectorClient::hideInspectorIndication):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setIndicating):
        Rename indicate/hideIndication to show/hide names.

2014-03-25  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix. Typo on checkin.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Left an unmatched open bracket.

2014-03-25  Jer Noble  <jer.noble@apple.com>

        Even further unreviewed build fix after r166247. Unprotect the implementation of HTMLMediaElement::shouldDisableSleep().

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

2014-03-25  Jer Noble  <jer.noble@apple.com>

        Further unreviewed build fix after r166247. Add DisplaySleepDisabler to the windows project file and
        move the definition of DisplaySleepDisabler's constructor and destructor into the cpp file.

        * WebCore.vcxproj/WebCore.vcxproj:
        * platform/DisplaySleepDisabler.cpp:
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        (WebCore::DisplaySleepDisabler::~DisplaySleepDisabler):
        * platform/DisplaySleepDisabler.h:

2014-03-25  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r166247. Un-platform-protect the declaration of HTMLMediaElement::shouldDisableSleep()
        and make WebVideoFullscreenController's _displaySleepDisabler a std::unique_ptr.

        * html/HTMLMediaElement.h:
        * platform/mac/WebVideoFullscreenController.h:

2014-03-25  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Pass additional options to AVFoundation during playback.
        https://bugs.webkit.org/show_bug.cgi?id=130624

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::doesHaveAttribute): Return attribute value if the user
        passes a pointer to fill in.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::doesHaveAttribute):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::doesHaveAttribute):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Pass additional
        option if supplied by user.

2014-03-25  Michael Saboff  <msaboff@apple.com>

        Unreviewed, rolling out r166070.

        Rollout r166070 due to 2% performance loss in page load times

        Reverted changeset:

        "Change CodeGeneratorJS.pm special cases for "DOMWindow" to be
        general purpose"
        https://bugs.webkit.org/show_bug.cgi?id=130553
        http://trac.webkit.org/changeset/166070

2014-03-25  Michael Saboff  <msaboff@apple.com>

        Unreviewed, rolling out r166126.

        Rollout r166126 in prepartion to roll out prerequisite r166070

        Reverted changeset:

        "toThis() on a JSWorkerGlobalScope should return a JSProxy and
        not undefined"
        https://bugs.webkit.org/show_bug.cgi?id=130554
        http://trac.webkit.org/changeset/166126

2014-03-25  Jer Noble  <jer.noble@apple.com>

        [iOS] Playing video does not disable display sleep.
        https://bugs.webkit.org/show_bug.cgi?id=130729

        Reviewed by Eric Carlson.

        DisplaySleepDisabler was broken by r161589, which replaced the iOS implementation with
        an empty one. Make a platform independent version with a Cocoa-platform subclass. Update
        the APIs to non-deprecated ones.

        * platform/DisplaySleepDisabler.cpp: Added.
        (WebCore::DisplaySleepDisabler::create):
        * platform/DisplaySleepDisabler.h: Added.
        (WebCore::DisplaySleepDisabler::~DisplaySleepDisabler):
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        * platform/cocoa/DisplaySleepDisablerCocoa.cpp: Renamed from Source/WebCore/platform/mac/DisplaySleepDisabler.cpp.
        (WebCore::DisplaySleepDisabler::create):
        (WebCore::DisplaySleepDisablerCocoa::DisplaySleepDisablerCocoa):
        (WebCore::DisplaySleepDisablerCocoa::~DisplaySleepDisablerCocoa):
        * platform/cocoa/DisplaySleepDisablerCocoa.h: Renamed from Source/WebCore/platform/mac/DisplaySleepDisabler.h.

        Update m_sleepDisabler to be a std::unique_ptr, and unprotect the definition of methods which use it.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateSleepDisabling):
        (WebCore::HTMLMediaElement::shouldDisableSleep):
        * html/HTMLMediaElement.h:

        Add the new and renamed files to the project:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

2014-03-25  Dirk Schulze  <krit@webkit.org>

        Implement ImageData constructors and WebWorkers exposure
        https://bugs.webkit.org/show_bug.cgi?id=130668

        Reviewed by Dean Jackson.

        Add new constructors for ImageData.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#pixel-manipulation

        Test: fast/canvas/canvas-imageData.html

        * html/ImageData.cpp: 
        (WebCore::ImageData::create):
        * html/ImageData.h:
        * html/ImageData.idl:

2014-03-25  Myles C. Maxfield  <mmaxfield@apple.com>

        InlineIterator position (unsigned int) variable can wrap around
        https://bugs.webkit.org/show_bug.cgi?id=130540

        Reviewed by Simon Fraser.

        We trigger an ASSERT that occurs when we are ignoring spaces (to collapse them
        into a single whitespace mark) but then encounter a line break. Because we don't ignore
        the first space (but do ignore subsequent spaces), when we hit a newline in an RTL context
        we want to ignore that first space as well (so as not to push the text away from the right
        edge). We do this by decrementing the InlineIterator pointing to this first space, so all
        the spaces get ignored. However, if that space is the first character in a Text node, the
        decrement will try to go past the beginning of the node, and trigger an ASSERT.

        This design is not great. At some point we should rework it to more elegantly handle
        collapsing whitespace in both RTL and LTR writing modes.

        This patch adds an ASSERT earlier in this codepath to catch potential problems earlier.
        It also pulls our sentinel value out into a separate boolean to make it more clear what is
        going on.

        Test: fast/text/whitespace-only-text-in-rtl.html

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::moveTo): Use the set***() calls
        (WebCore::InlineIterator::setOffset): ASSERT early that our math hasn't wrapped
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject): Use new boolean value
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText): Guard against wraps
        (WebCore::checkMidpoints): Use new boolean value
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes): Use new boolean value

2014-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the autotools build
        https://bugs.webkit.org/show_bug.cgi?id=130717

        Reviewed by Anders Carlsson.

        * GNUmakefile.am: Removed.
        * bindings/gobject/GNUmakefile.am: Removed.
        * config.h: Removed references to autotools configure file.

2014-03-24  Brent Fulgham  <bfulgham@apple.com>

        Prevent 'removetrack' events from firing when all inband text tracks are removed.
        https://bugs.webkit.org/show_bug.cgi?id=130704

        Reviewed by Eric Carlson.

        Test: media/track/track-remove-track.html

        Based on the Blink change (patch by acolwell@chromium.org):
        https://codereview.chromium.org/177243018/

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Reorder steps to match W3C specification.
        (WebCore::HTMLMediaElement::noneSupported): Forget tracks as required by specification.
        (WebCore::HTMLMediaElement::mediaLoadingFailed): Forget tracks as required by specification.
        (WebCore::HTMLMediaElement::removeTextTrack): Only request the 'removetracks' event if
        requested by caller.
        (WebCore::HTMLMediaElement::removeAllInbandTracks): Renamed to 'forgetResourceSpecificTracks'
        (WebCore::HTMLMediaElement::noneSupported): Specify that we want the 'removetracks' event
        fired for this use case.
        (WebCore::HTMLMediaElement::prepareForLoad): Switch to new 'forgetResourceSpecificTracks' name.
        * html/HTMLMediaElement.h:
        * html/track/TextTrackList.cpp:
        (TextTrackList::remove): Only fire the 'removetrack' event if the caller requests it.
        * html/track/TextTrackList.h: Add default argument to fire the 'removetrack' event
        when removing a track.
        * html/track/TrackListBase.cpp:
        (TrackListBase::remove): Only fire the 'removetrack' event if the caller requests it.
        * html/track/TrackListBase.h: Add default argument to fire the 'removetrack' event.

2014-03-25  David Kilzer  <ddkilzer@apple.com>

        Hold a reference to firstSuccessfulSubmitButton in HTMLFormElement::submit
        <http://webkit.org/b/130713>
        <rdar://problem/15661876>

        Reviewed by Darin Adler.

        Merged from Blink (patch by Ian Beer):
        http://crbug.com/303657
        https://src.chromium.org/viewvc/blink?view=rev&revision=158938

        Test: fast/forms/form-submission-crash-successful-submit-button.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):

2014-03-25  Gabor Rapcsanyi  <rgabor@webkit.org>

        [ARM64] GNU assembler fails in TransformationMatrix::multiply
        https://bugs.webkit.org/show_bug.cgi?id=130454

        Reviewed by Zoltan Herczeg.

        Change the NEON intstructions to the proper style.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):

2014-03-20  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Vertical rectangles not considered as valid grid areas
        https://bugs.webkit.org/show_bug.cgi?id=130513

        Reviewed by Andreas Kling.

        Grid areas sized as vertical rectangles were incorrectly
        considered as invalid by the parser. That's because the condition
        checking that each new row was adjacent to the previous one was
        using the first row of the currently parsed grid area instead of
        the last one.

        Test: fast/css-grid-layout/grid-template-areas-get-set.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateAreas):

2014-03-25  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Volume slider shows below the panel with videos in certain cases
        https://bugs.webkit.org/show_bug.cgi?id=130608

        Reviewed by Jer Noble.

        We need to delay the moment we check if the volume slider shows up
        or down. If the video was not visible, the offsets were 0 and it
        was forced to be shown below the panel.

        Test: media/video-initially-hidden-volume-slider-up.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Moved volumebox pseudo from
        the subclass. The test checks for it and it would fail in Mac.
        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.createControls): Moved volumebox pseudo
        to the superclass.
        (ControllerGtk.prototype.handleMuteButtonMouseOver): Check if
        volume slider should show up or down.
        (ControllerGtk.prototype.updateReadyState): Removed check for
        volume slider direction.

2014-03-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Enable WebVTT Regions on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=130680

        Reviewed by Eric Carlson.

        * DerivedSources.cpp: Add new build components.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2014-03-24  Simon Fraser  <simon.fraser@apple.com>

        Remove some unnecessary includes from PlatformCALayerClient.h
        https://bugs.webkit.org/show_bug.cgi?id=130703

        Reviewed by Andreas Kling.
        
        No need for all these #includes.

        * platform/graphics/ca/PlatformCALayerClient.h:

2014-03-24  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [core] FEGaussianBlur: use IntSize to simplify member function interface
        https://bugs.webkit.org/show_bug.cgi?id=130695

        Reviewed by Dean Jackson.

        By returning an IntSize to store the calculated kernel size values
        it is possible to have less function parameters. This patch also
        streamlines a bit the code in calculateUnscaledKernelSize.

        No new tests, no change in behavior.

        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::determineAbsolutePaintRect):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):
        (WebCore::FEGaussianBlur::calculateKernelSize):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        (if): Deleted.
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::outsetSizeForBlur):

2014-03-24  Brian Burg  <bburg@apple.com>

        Web Replay: capture and replay keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=130314

        Reviewed by Joseph Pecoraro.

        Upstream support for capturing and replaying non-IME keyboard input.
        This works similarly to mouse events. It introduces optional fields and
        macros to encode/decode them.

        Test: ManualTests/inspector/replay-keyboard-events.html

        * replay/ReplayInputDispatchMethods.cpp:
        (WebCore::HandleKeyPress::dispatch):
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<NondeterministicInputBase>::encodeValue):
        (JSC::EncodingTraits<NondeterministicInputBase>::decodeValue): Switch existing
        encode/decode calls to use the shortening macros.
        (JSC::EncodingTraits<KeypressCommand>::encodeValue): Added.
        (JSC::EncodingTraits<KeypressCommand>::decodeValue): Added.
        (JSC::PlatformKeyboardEventAppKit::PlatformKeyboardEventAppKit): Subclass
        PlatformKeyboardEvent so that we can set AppKit-specific members not
        initialized through the main constructors.
        (JSC::EncodingTraits<PlatformKeyboardEvent>::encodeValue): Added.
        (JSC::EncodingTraits<PlatformKeyboardEvent>::decodeValue): Added.
        * replay/SerializationMethods.h:
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::UserInputBridge): initialize m_state inside a guard.
        (WebCore::UserInputBridge::handleKeyEvent): fill in the implementation.
        * replay/WebInputs.json:

2014-03-24  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Optimizing string construction for type error in JSNavigatorCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=130683

        Reviewed by Eric Carlson.

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):

2014-03-24  Beth Dakin  <bdakin@apple.com>

        Legacy-style scrollbars constantly redraw after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=130699

        Reviewed by Simon Fraser.

        The constant re-draw was happening because we were never calling [ScrollbarPainter 
        setUsePresentationValue:NO]. This is a silly bug where were should have been 
        looking at PlatformWheelEvent::momentumPhase() instead of 
        PlatformWheelEvent::phase()

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent):

2014-03-24  Daniel Bates  <dabates@apple.com>

        XSS Auditor doesn't block <script> injected before an existing <script>
        https://bugs.webkit.org/show_bug.cgi?id=130475

        Merged from Blink (patch by Tom Sepez):
        https://src.chromium.org/viewvc/blink?view=rev&revision=169697

        Tests: http/tests/security/xssAuditor/script-tag-expression-follows.html
               http/tests/security/xssAuditor/script-tag-near-start.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::startsHTMLCommentAt):
        (WebCore::startsSingleLineCommentAt):
        (WebCore::startsMultiLineCommentAt):
        (WebCore::startsOpeningScriptTagAt):
        (WebCore::XSSAuditor::decodedSnippetForJavaScript):

2014-03-24  Brent Fulgham  <bfulgham@apple.com>

        Activate WebVTT Tests Once Merging is Complete
        https://bugs.webkit.org/show_bug.cgi?id=130420

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Turn on ENABLE(WEBVTT_REGIONS)

2014-03-24  Anders Carlsson  <andersca@apple.com>

        Re-fix the build.

        * WebCore.exp.in:

2014-03-24  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCore.exp.in:
        Move a CFNetwork only symbol inside the USE(CFNETWORK) section.

2014-03-24  Chris Fleizach  <cfleizach@apple.com>

        Regression: AX: Don't expose role or notifications for invalid menus
        https://bugs.webkit.org/show_bug.cgi?id=129814

        Reviewed by Mario Sanchez Prada.

        If a role=menu has no menuitem children, it should not be a menu.
        This was a bit tricky to implement since we need to update the role after the children are created,
        but it means we have to be a bit more aggressive about when to updateChildren, so that the role
        is known to be valid.

        Test: platform/mac/accessibility/invalid-menu-role-does-not-send-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::updateRoleAfterChildrenCreation):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase updateObjectBackingStore]):

2014-03-24  Andy Estes  <aestes@apple.com>

        [iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=129322

        Reviewed by Anders Carlsson.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::releaseConnectionForDownload): Changed to
        return a RetainPtr that adopts the connection's retain count.

2014-03-24  Enrica Casucci  <enrica@apple.com>

        Update Hindi fallback font.
        https://bugs.webkit.org/show_bug.cgi?id=130690
        <rdar://problem/16391601>

        Reviewed by Sam Weinig.

        Using the new available font for Hindi in the fallback list.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::systemFallbackForCharacters):

2014-03-24  Brent Fulgham  <bfulgham@apple.com>

        Merge Minor WebVTT Cleanups from Blink
        https://bugs.webkit.org/show_bug.cgi?id=130681

        Reviewed by Eric Carlson.

        Merged from Blink (patch by philipj@opera.com):
        https://chromium.googlesource.com/chromium/blink/+/693eb5e2933dca0eab5bbd604e9f3406fe9fd1ab
        http://crbug.com/52593009
        https://chromium.googlesource.com/chromium/blink/+/40b3602feab34e9be829fd742b6ad6ded322a09f
        http://crbug.com/104243003

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setMode):
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::VTTCue):
        * html/track/VTTCue.h:

2014-03-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166169.
        https://bugs.webkit.org/show_bug.cgi?id=130682

        This patch broke tests on Apple Mavericks (Requested by fredw
        on #webkit).

        Reverted changeset:

        "Operator stretching: expose a math data API"
        https://bugs.webkit.org/show_bug.cgi?id=130572
        http://trac.webkit.org/changeset/166169

2014-03-24  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        ENABLE(CSS_GRID_LAYOUT) guard for CSSGridLineNamesValue
        https://bugs.webkit.org/show_bug.cgi?id=130669

        Reviewed by Sergio Villar Senin.

        No new tests. No new functionality.

        * css/CSSGridLineNamesValue.cpp:
        * css/CSSGridLineNamesValue.h:

2014-03-24  Chris Fleizach  <cfleizach@apple.com>

        <hr> should expose AXRole/AXSubrole, etc
        https://bugs.webkit.org/show_bug.cgi?id=109015

        Reviewed by Mario Sanchez Prada.

        Expose the <hr> element to Mac and iOS through the accessibility interface.

        Test: platform/mac/accessibility/hr-element.html

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isEnabled):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::computedRoleString):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXHorizontalRuleDescriptionText):
        * platform/LocalizedStrings.h:

2014-03-24  Antti Koivisto  <antti@apple.com>

        Invalidate sibling text node style when needed instead of attaching synchronously
        https://bugs.webkit.org/show_bug.cgi?id=130590

        Reviewed by Andreas Kling.
        
        Make things simpler.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        
            Just invalidate instead of calling attach directly.
            Rename to match.

        (WebCore::Style::textRendererIsNeeded):
        (WebCore::Style::createTextRendererIfNeeded):
        
            Move all testing to textRendererIsNeeded.

        (WebCore::Style::updateTextRendererAfterContentChange):
        
            Call resolveTextNode instead of re-implementing the same thing.

        (WebCore::Style::resolveLocal):
        (WebCore::Style::resolveTextNode):
        
            Avoid unnecessary reattaching.
            Rename for consistency.

        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::resolveTree):
        
2014-03-24  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Fix !ENABLE(VIDEO) build
        https://bugs.webkit.org/show_bug.cgi?id=130671

        Reviewed by Eric Carlson.

        Add missing ENABLE(VIDEO) guards because many functions use
        the newly guarded functions.

        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2014-03-24  Antti Koivisto  <antti@apple.com>

        Text autosizing does not determine line count correctly for simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=130673

        Reviewed by Daniel Bates.
        
        We don't count lines correctly in simple line layout case.

        * page/Frame.cpp:
        (WebCore::Frame::textAutosizingWidth):
        (WebCore::Frame::setTextAutosizingWidth):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::textAutosizingWidth): Deleted.
        (WebCore::Frame::setTextAutosizingWidth): Deleted.
        
            Move to Frame.cpp to make enabling on non-iOS build easier.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::lineCount):
        
            Handle simple line layout case.

        (WebCore::RenderBlockFlow::lineCountForTextAutosizing):
            
            Call lineCount() if children are inline.
            Rename for clarity.

        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        (WebCore::RenderBlockFlow::immediateLineCount): Deleted.
        * rendering/RenderBlockFlow.h:

2014-03-24  Frédéric Wang  <fred.wang@free.fr>

        [regression] background colors do not apply to <mo> elements.
        https://bugs.webkit.org/show_bug.cgi?id=130470.

        Test: mathml/presentation/tokenElements-background-color.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::paint): always call the parent painting to draw the background.
        (WebCore::RenderMathMLOperator::paintChildren): move the special case for invisible operator here.

2014-03-24  Frédéric Wang  <fred.wang@free.fr>

        Operator stretching: expose a math data API
        https://bugs.webkit.org/show_bug.cgi?id=130572

        Reviewed by Chris Fleizach.

        We expose a new SimpleFontData API to give access to the data from the
        OpenType MATH table using a font cache. The class OpenTypeMathData will
        be implemented in bug 130324. On Darwin platform, we also implement the
        missing FontPlatformData::openTypeTable function which will be necessary
        to load the OpenType MATH table. The changes are intended to be used
        for MathML operator stretching (bug 130322) so tests are not added yet.

        * CMakeLists.txt: add new OpenTypeMathData files.
        * GNUmakefile.list.am: ditto.
        * WebCore.vcxproj/WebCore.vcxproj: ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * platform/graphics/FontCache.cpp: We add a FontCache::getMathData function to implement a cache for the math data.
        We make the math and vertical data share the same key for the cache.
        (WebCore::fontMathDataCacheInstance):
        (WebCore::FontCache::getMathData):
        (WebCore::fontVerticalDataCacheInstance):
        * platform/graphics/FontCache.h: We declare FontCache::getMathData and FontFileKey on all platforms.
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::openTypeTable): We implement openTypeTable() on Darwin platform.
        * platform/graphics/FontPlatformData.h: We expose openTypeTable() on Darwin platform.
        * platform/graphics/SimpleFontData.cpp: We initialize m_mathData from the font cache.
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h: We expose a mathData() function to access the MATH data.
        * platform/graphics/opentype/OpenTypeMathData.cpp: Added. This is a new class that will be used to parse the data from the OpenType MATH table.
        (WebCore::OpenTypeMathData::OpenTypeMathData):
        * platform/graphics/opentype/OpenTypeMathData.h: Added.
        (WebCore::OpenTypeMathData::create):
        (WebCore::OpenTypeMathData::hasMathData):

2014-03-24  Jon Lee  <jonlee@apple.com>

        Build fixes.

        Unreviewed.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeSelectionToPasteboard): Convert to reference.

2014-03-24  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        ENABLE(VIDEO_TRACK) guard for CSSParserSelector::parsePseudoCueFunctionSelector
        https://bugs.webkit.org/show_bug.cgi?id=130666

        Reviewed by Andreas Kling.

        No new tests. No new functionality.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoCueFunctionSelector): Deleted.

2014-03-24  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Update named <grid-line> syntax to the last version of the specs
        https://bugs.webkit.org/show_bug.cgi?id=129041

        Reviewed by Sergio Villar Senin.

        From Blink r162555 by <svillar@igalia.com>

        Names for grid lines are now specified as a list of whitespace separated
        idents enclosed in parentheses instead of as a list of strings.

        Updated tests to match the new <grid-line> syntax.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj: Added info of the new file for the CSSGridLineNamesValue class.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::addValuesForNamedGridLinesAtIndex): The named <grid-line> value is now a list.
        * css/CSSGrammar.y.in: New syntax for named <grid-line>.
        * css/CSSGridLineNamesValue.cpp: Added.
        (WebCore::CSSGridLineNamesValue::customCSSText): String representation of the named <grid-line> as a list of Strings.
        (WebCore::CSSGridLineNamesValue::CSSGridLineNamesValue): Constructor.
        (WebCore::CSSGridLineNamesValue::cloneForCSSOM): Ref counted cloning function.
        * css/CSSGridLineNamesValue.h: Added.
        (WebCore::CSSGridLineNamesValue::create): Ref counted constructor.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridLineNames): It replaces the old parseGrdTrackNames.
        (WebCore::CSSParser::parseGridTrackList): Using the new named <grid-line> syntax.
        (WebCore::CSSParser::parseGridTrackRepeatFunction): Using the new named <grid-line> syntax.
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::destroy): Handling the case of CSSValue being CSSValueList intances.
        (WebCore::CSSParserValue::createCSSValue): Handling the case of CSSValue being CSSValueList intances.
        * css/CSSParserValues.h:
        (WebCore::CSSParserValue::setFromValueList): Adds the named <grid-line> list to the CSSParserValueList instance.
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals): Handling the case of the new CSSGridLineNamesValue class.
        (WebCore::CSSValue::cssText): Handling the case of the new CSSGridLineNamesValue class.
        (WebCore::CSSValue::destroy): Handling the case of the new CSSGridLineNamesValue class.
        * css/CSSValue.h:
        (WebCore::CSSValue::isGridLineNamesValue): Type cast check for the new CSSGridLineNamesValue class.
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackList): Using the new named <grid-line> syntax.

2014-03-23  Sam Weinig  <sam@webkit.org>

        Convert WebHTMLConverter to C++
        https://bugs.webkit.org/show_bug.cgi?id=130655

        Reviewed by Andreas Kling.

        - Mechanically converts the Objective-C class WebHTMLConverter, to the C++ HTMLConverter (lots of cleanup to follow).
        - Removes unused members
            - _standardFontFamily (never assigned to)
            - _textSizeMultiplier (always exactly 1)
            - _webViewTextSizeMultiplier (always exactly 0)
            - _defaultFontSize (always exactly 12, changed to be constant)
            - _minimumFontSize (always exactly 1, changed to be constant)
            - _colorsForNodes (never assigned to)
            - _indexingLimit (always exactly 0)
            - _thumbnailLimit (always exactly 0)
            - _flags.isIndexing (always false)
            - _flags.isTesting (always false)

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::convert):
        (HTMLConverter::HTMLConverter):
        (HTMLConverter::~HTMLConverter):
        (defaultParagraphStyle):
        (_childrenForNode):
        (HTMLConverter::_stringForNode):
        (HTMLConverter::_getFloat):
        (_webKitBundle):
        (HTMLConverter::_elementIsBlockLevel):
        (HTMLConverter::_elementHasOwnBackgroundColor):
        (HTMLConverter::_blockLevelElementForNode):
        (HTMLConverter::_colorForNode):
        (HTMLConverter::_computedAttributesForElement):
        (HTMLConverter::_attributesForElement):
        (HTMLConverter::_newParagraphForElement):
        (HTMLConverter::_newLineForElement):
        (HTMLConverter::_newTabForElement):
        (_WebMessageDocumentClass):
        (HTMLConverter::_addAttachmentForElement):
        (HTMLConverter::_addQuoteForElement):
        (HTMLConverter::_addValue):
        (HTMLConverter::_fillInBlock):
        (HTMLConverter::_processMetaElementWithName):
        (HTMLConverter::_processHeadElement):
        (HTMLConverter::_enterElement):
        (HTMLConverter::_addTableForElement):
        (HTMLConverter::_addTableCellForElement):
        (HTMLConverter::_processElement):
        (HTMLConverter::_addMarkersToList):
        (HTMLConverter::_exitElement):
        (HTMLConverter::_processText):
        (HTMLConverter::_traverseNode):
        (HTMLConverter::_traverseFooterNode):
        (HTMLConverter::_adjustTrailingNewline):
        (HTMLConverter::_loadFromDOMRange):
        (fileWrapperForURL):
        (fileWrapperForElement):
        (WebCore::attributedStringFromRange):
        (WebCore::editingAttributedStringFromRange):

2014-03-23  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove Dead Stores from editing directory
        https://bugs.webkit.org/show_bug.cgi?id=130634

        Reviewed by Darin Adler.

        Remove Dead Stores from editing directory which assigning a value to a variable
        and never reading that value.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        * editing/markup.cpp:
        (WebCore::createMarkupInternal):

2014-03-23  Hyowon Kim  <hw1008.kim@samsung.com>

        Move all EFL typedefs into EflTypedefs.h.
        https://bugs.webkit.org/show_bug.cgi?id=130511

        Reviewed by Gyuyoung Kim.

        * platform/FileSystem.h: Remove EFL typedefs.
        * platform/Widget.h: Ditto.
        * platform/efl/EflScreenUtilities.h: Ditto.
        * platform/graphics/Icon.h: Ditto.
        * platform/graphics/Image.h: Ditto.
        * platform/graphics/IntPoint.h: Ditto.
        * platform/graphics/IntRect.h: Ditto.
        * platform/network/NetworkStateNotifier.h: Ditto.

2014-03-23  Sam Weinig  <sam@webkit.org>

        Move HTMLConverter from platform/mac to editing/cocoa.

        Rubber-stamped by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa: Added.
        * editing/cocoa/HTMLConverter.h: Copied from platform/mac/HTMLConverter.h.
        * editing/cocoa/HTMLConverter.mm: Copied from platform/mac/HTMLConverter.mm.
        * platform/mac/HTMLConverter.h: Removed.
        * platform/mac/HTMLConverter.mm: Removed.

2014-03-23  Sam Weinig  <sam@webkit.org>

        Simplify the HTMLConverter interface (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=130654

        Reviewed by Darin Adler.

        Switch HTMLConverter from using an Objective-C interface to C functions.

        * WebCore.exp.in:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeSelectionToPasteboard):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::dataSelectionForPasteboard):
        (WebCore::Editor::writeSelectionToPasteboard):
        * platform/ios/PasteboardIOS.mm:
        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        (WebCore::attributedStringFromRange):
        (WebCore::editingAttributedStringFromRange):
        * platform/mac/PasteboardMac.mm:

2014-03-23  Darin Adler  <darin@apple.com>

        Remove code in HTMLObjectElement attribute parsing that forces style resolution and layout
        https://bugs.webkit.org/show_bug.cgi?id=130653

        Reviewed by Antti Koivisto.

        * dom/ContainerNode.cpp: Moved the post-attach callback code from here to
        StyleResolveTree.h/cpp.
        * dom/ContainerNode.h: Ditto.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Use Style::PostResolutionCallbackDisabler instead of
        PostAttachCallbackDisabler.

        * dom/Element.h: Moved the post-attach callback code from here to StyleResolveTree.h/cpp.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute): Simplified the code for typeAttr, turning
        it into a 1-liner. Added a FIXME in codeAttr about the fact that it does not have the
        code to trigger image loads. Changed srcAttr to call updateImageLoaderWithNewURLSoon to
        do the image loading logic.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didAttachRenderers): Updated to use
        Style::queuePostResolutionCallback and use a lambda instead of a function.
        (WebCore::HTMLFormControlElement::didRecalcStyle): Ditto. Also added RefPtr instead
        of just using wishful thinking to keep the object alive.
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc): Ditto.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):: Simplified the code for typeAttr, turning
        it into a 1-liner. Changed dataAttr to use updateImageLoaderWithNewURLSoon(). Also made
        it call setNeedsWidgetUpdate(true) unconditionally after checking carefully to see that's
        harmless if there is no renderer. Changed classidAttr to call setNeedsWidgetUpdate(true)
        unconditionally and not set m_classId.
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk): Use fastGetAttribute
        instead of classId and descendantsOfType instead of getElementsByTagName.
        (WebCore::HTMLObjectElement::hasValidClassId): Use fastGetAttribute instead of classId.
        (WebCore::HTMLObjectElement::renderFallbackContent): Use imageLoader instead of m_imageLoader.

        * html/HTMLObjectElement.h: Removed classId, since there is no reason to cache that
        attribute in a data member. Rearranged header, making more private, and fixing some typos,
        and doing a "using" instead of a function to disambiguate the inherited form functions.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Initialize m_needsImageReload.
        (WebCore::HTMLPlugInImageElement::createElementRenderer): Fixed some code that assumed the
        first child of the shadow root is guaranteed to be an element.
        (WebCore::HTMLPlugInImageElement::didRecalcStyle): Added. Calls the new
        scheduleUpdateForAfterStyleResolution function.
        (WebCore::HTMLPlugInImageElement::didAttachRenderers): Moved all the logic from this
        function into scheduleUpdateForAfterStyleResolution. Also added a call through to the base
        class; cleaner even though it's just an assertion.
        (WebCore::HTMLPlugInImageElement::scheduleUpdateForAfterStyleResolution): Added.
        Schedules a call to updateAfterStyleResolution when needed.
        (WebCore::HTMLPlugInImageElement::updateAfterStyleResolution): Added.
        Combines updateWidgetIfNecessary and startLoadingImage, and also deals with the new
        m_needsImageReload boolean in cases where no actual loading is done.
        (WebCore::HTMLPlugInImageElement::removedFrom): Added. Do not delay the load event of
        document once this element is removed, clears m_needsImageReload.
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument): Removed null check on oldDocument,
        since m_needsDocumentActivationCallbacks can't be true if the old document was null.
        (WebCore::is100Percent): Added helper to make function below more readable.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Restructured the code a
        bit. The part that attracted my attention was the local variable of type RenderBox, which
        was named renderEmbeddedObject. Turns out the caller guarantees to only call this if there
        is a renderer of type RenderEmbeddedObject, so depend on that.
        (WebCore::HTMLPlugInImageElement::setNeedsImageReload): Added. When called with true, sets
        the flag and triggers a style recalculation, and lets updateAfterStyleResolution do the rest.
        When called with false, reverses the effects and stops delaying the load event.

        * html/HTMLPlugInImageElement.h: Trimmed includes a bit. Made more members private.
        Marked more function members final. Made a protected imageLoader function so that
        m_imageLoader can be private. Added new protected function updateImageLoaderWithNewURLSoon,
        as well as other new private functions. Made m_imageLoader be std::unique_ptr instead of
        OwnPtr, and added m_needsImageReload.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::needsPseudoElement): Fixed spelling error in the name of this function.
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded): Updated for name change.
        (WebCore::Style::attachRenderTree): Update for new name of PostResolutionCallbackDisabler.
        (WebCore::Style::updateBeforeOrAfterPseudoElement): Updated for name change.
        (WebCore::Style::postResolutionCallbackQueue): Added.
        (WebCore::Style::queuePostResolutionCallback): Added.
        (WebCore::Style::suspendMemoryCacheClientCalls): Added. This is a side effect of the original
        PostAttachCallbackDisabler that is now done in a cleaner way, using the callback queue, instead
        of as a special case. It should not work for multiple documents across multiple pages instead of
        only the outermost one.
        (WebCore::Style::PostResolutionCallbackDisabler::PostResolutionCallbackDisabler): Added.
        Calls suspendMemoryCacheClientCalls, but a FIXME tries to point out why that isn't so great.
        (WebCore::Style::PostResolutionCallbackDisabler::~PostResolutionCallbackDisabler): Added.
        (WebCore::Style::postResolutionCallbacksAreSuspended): Added.

        * style/StyleResolveTree.h: Added queuePostResolutionCallback and
        postResolutionCallbacksAreSuspended. Also added PostResolutionCallbackDisabler, which should
        eventually become a private implementation detail.

2014-03-23  Sam Weinig  <sam@webkit.org>

        Simplify the HTMLConverter interface (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=130654

        Reviewed by Dan Bernstein.

        Convert WebHTMLConverter's interface to only use class methods as the first
        step of simplifying the interface. 

        * editing/ios/EditorIOS.mm:
        (WebCore::attributedStringForRange):
        * editing/mac/EditorMac.mm:
        (WebCore::attributedStringForRange):
        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter attributedStringFromRange:]):

2014-03-23  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: add other ARIA one-to-many relationships: owns, flowto, controls.
        https://bugs.webkit.org/show_bug.cgi?id=130635

        Reviewed by Timothy Hatcher.

        Support for @aria-owns, @aria-controls, and @aria-flowto.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

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

2014-03-23  Simon Fraser  <simon.fraser@apple.com>

        Clean up #includes by geometry classes
        https://bugs.webkit.org/show_bug.cgi?id=130645

        Reviewed by Andreas Kling.

        Pulling in <wtf/Vector.h> and <wtf/PrintStream.h> in the simple geometry
        classes brings in a lot of additional headers. Fix by adding a new
        GeometryUtilities file so that the basic files don't need Vector,
        and including GeometryUtilities.h where necessary.
        
        Also forward declare PrintStream.h and only bring in the header
        in implementation files.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSToStyleMap.h:
        * html/HTMLCanvasElement.cpp:
        * platform/cairo/WidgetBackingStoreCairo.h:
        * platform/graphics/FloatPoint.cpp:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.cpp:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.cpp:
        * platform/graphics/FloatSize.h:
        * platform/graphics/GeometryUtilities.cpp: Added.
        (WebCore::findSlope):
        (WebCore::findIntersection):
        (WebCore::unionRect):
        (WebCore::mapRect):
        * platform/graphics/GeometryUtilities.h: Copied from Source/WebCore/platform/graphics/TextTrackRepresentation.h.
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.cpp:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/TextTrackRepresentation.h:
        * platform/graphics/Tile.h:
        * platform/graphics/texmap/coordinated/UpdateAtlas.h:
        * platform/gtk/WidgetBackingStoreGtkX11.h:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderObject.cpp:

2014-03-23  Simon Fraser  <simon.fraser@apple.com>

        Clean up #includes by geometry classes
        https://bugs.webkit.org/show_bug.cgi?id=130645

        Reviewed by Andreas Kling.

        Pulling in <wtf/Vector.h> and <wtf/PrintStream.h> in the simple geometry
        classes brings in a lot of additional headers. Fix by adding a new
        GeometryUtilities file so that the basic files don't need Vector,
        and including GeometryUtilities.h where necessary.
        
        Also forward declare PrintStream.h and only bring in the header
        in implementation files.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSToStyleMap.h:
        * html/HTMLCanvasElement.cpp:
        * platform/cairo/WidgetBackingStoreCairo.h:
        * platform/graphics/FloatPoint.cpp:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.cpp:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.cpp:
        * platform/graphics/FloatSize.h:
        * platform/graphics/GeometryUtilities.cpp: Added.
        (WebCore::findSlope):
        (WebCore::findIntersection):
        (WebCore::unionRect):
        (WebCore::mapRect):
        * platform/graphics/GeometryUtilities.h: Copied from Source/WebCore/platform/graphics/TextTrackRepresentation.h.
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.cpp:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/TextTrackRepresentation.h:
        * platform/graphics/Tile.h:
        * platform/gtk/WidgetBackingStoreGtkX11.h:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderObject.cpp:

2014-03-22  Chang Shu  <cshu@webkit.org>

        Replace deprecatedIsCollapsibleWhitespace with RenderStyle::isCollapsibleWhiteSpace in TextIterator.
        https://bugs.webkit.org/show_bug.cgi?id=130612.

        Reviewed by Darin Adler.

        Some layout tests are affected by this change but the new behavior should be correct.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):

2014-03-22  Sam Weinig  <sam@webkit.org>

        Switch HTMLConverter to use CSSPropertyIDs to refer to CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=130639

        Reviewed by Darin Adler.

        This is a ~15% speedup on PerformanceTests/Interactive/CopyAll.html.

        - Removes gratuitous lookup of CSS properties that are known at compile time.
        - Removes attempted use of non-supported CSS properties (font-effect and horizontal-align) 
          that will alway yield the same results.
        - Fix some obvious typos where the author thought they were testing for fontKerning or fontLigatures
          but instead used the non-existent font-effect.

        * platform/mac/HTMLConverter.mm:
        (HTMLConverterCaches::computedStylePropertyForElement):
        (HTMLConverterCaches::inlineStylePropertyForElement):
        (HTMLConverterCaches::propertyValueForNode):
        (-[WebHTMLConverter _stringForNode:property:]):
        (HTMLConverterCaches::floatPropertyValueForNode):
        (-[WebHTMLConverter _getFloat:forNode:property:]):
        (HTMLConverterCaches::isBlockElement):
        (HTMLConverterCaches::elementHasOwnBackgroundColor):
        (HTMLConverterCaches::colorPropertyValueForNode):
        (-[WebHTMLConverter _colorForNode:property:]):
        (-[WebHTMLConverter _computedAttributesForElement:]):
        (-[WebHTMLConverter _addAttachmentForElement:URL:needsParagraph:usePlaceholder:]):
        (-[WebHTMLConverter _fillInBlock:forElement:backgroundColor:extraMargin:extraPadding:isTable:]):
        (-[WebHTMLConverter _addTableForElement:]):
        (-[WebHTMLConverter _addTableCellForElement:]):
        (-[WebHTMLConverter _processElement:tag:display:depth:]):
        (-[WebHTMLConverter _exitElement:tag:display:depth:startIndex:]):
        (-[WebHTMLConverter _processText:]):
        (-[WebHTMLConverter _traverseNode:depth:embedded:]):

2014-03-22  Andreas Kling  <akling@apple.com>

        Fix debug build.

        * bindings/js/JSDOMBinding.h:
        (WebCore::createWrapper):

2014-03-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add *final* keyword to NavigatorContentUtils class
        https://bugs.webkit.org/show_bug.cgi?id=130636

        Reviewed by Darin Adler.

        NavigatorContentUtils won't be used as a base class. So, added final keyword.

        No new tests, no behavior changes.

        * Modules/navigatorcontentutils/NavigatorContentUtils.h:

2014-03-22  Andreas Kling  <akling@apple.com>

        CREATE_DOM_WRAPPER doesn't need the ExecState.
        <https://webkit.org/b/130648>

        Remove the ExecState parameter from CREATE_DOM_WRAPPER and get all
        that we need from the global object instead.

        toJS() and toJSNewlyCreated() still take an ExecState, that needs
        to be dealt with separately since some of them have scary looking
        currentWorld() checks.

        Reviewed by Darin Adler.

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSBlobCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createWrapper):
        (WebCore::wrap):
        (WebCore::createNewWrapper):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        (WebCore::JSHTMLTemplateElement::content):
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSMediaStreamCapabilitiesCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSPerformanceEntryCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSRTCIceCandidateCustom.cpp:
        (WebCore::JSRTCIceCandidateConstructor::constructJSRTCIceCandidate):
        * bindings/js/JSRTCPeerConnectionCustom.cpp:
        (WebCore::JSRTCPeerConnectionConstructor::constructJSRTCPeerConnection):
        * bindings/js/JSRTCSessionDescriptionCustom.cpp:
        (WebCore::JSRTCSessionDescriptionConstructor::constructJSRTCSessionDescription):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSTouchCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTouchListCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTrackCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * dom/make_names.pl:
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):

2014-03-22  Michael Saboff  <msaboff@apple.com>

        toThis() on a JSWorkerGlobalScope should return a JSProxy and not undefined
        https://bugs.webkit.org/show_bug.cgi?id=130554

        Reviewed by Geoffrey Garen.

        Fixed toThis() on WorkerGlobalScope to return a JSProxy instead of the JSGlobalObject.
        Added cast from JSProxy->target() if the jsCast<>() to the native object fails
        in toJSDedicatedWorkerGlobalScope() and toJSSharedWorkerGlobalScope().
        The original cast is needed for access to the local side of the worker, while the JSProxy
        cast is used on the remote side of a worker.

        Test: fast/workers/worker-strict.html

        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::toJSDedicatedWorkerGlobalScope):
        (WebCore::toJSSharedWorkerGlobalScope):

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate): Changed to pass in the JSProxy and not
        the WorkerGlobalScope object as the this object to script evaluation.

        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/SharedWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.idl:
        Added the new CustomProxyToJSObject attribute so we'll call to<{nativeClass}>() for
        getting the object to use for global evaluation.

2014-03-22  Simon Fraser  <simon.fraser@apple.com>

        Some #include hygiene in Node/Element etc
        https://bugs.webkit.org/show_bug.cgi?id=130642

        Reviewed by Geoffrey Garen.

        Clean up various #includes.

        * accessibility/AccessibilityObject.h:
        * bindings/js/WebCoreTypedArrayController.h:
        * dom/Element.h:
        * dom/EventListenerMap.h:
        * dom/EventTarget.h:
        * dom/Node.h:
        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGRoot.h:

2014-03-22  Simon Fraser  <simon.fraser@apple.com>

        FloatRect.h on iOS should not suck in a system header
        https://bugs.webkit.org/show_bug.cgi?id=130641

        Reviewed by Geoff Garen.

        Don't pull in <CoreGraphics/CGGeometry.h> from FloatRect.h.

        * platform/graphics/FloatRect.h:

2014-03-22  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build.

        Reviewed by Darin Adler.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot):

2014-03-22  Darin Adler  <darin@apple.com>

        Remove String::deprecatedCharacters
        https://bugs.webkit.org/show_bug.cgi?id=126854

        Reviewed by Sam Weinig.

        * bindings/scripts/StaticString.pm:
        (GenerateStrings): Remove the code to generate the null m_copyData16 pointer.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::prependContext): Changed to use the new append function in
        StringView.h and removed the one defined locally here.

        * editing/VisibleUnits.cpp:
        (WebCore::wordBreakIteratorForMinOffsetBoundary): Use the new append function
        in StringView.h instead of using deprecatedCharacters.
        (WebCore::wordBreakIteratorForMaxOffsetBoundary): Ditto.
        Removed an append function defined locally here and use the one in StringView.h.

        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace): Use StringView::getCharactersWithUpconvert.

        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::appendToAttributeValue): Changed to take a StringView instead
        of a const String&.

        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest): Use StringView and StringView::upconvertedCharacters.

        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveData): Use the new append overload from StringView.h.
        Also added a comment about incorrect use of the decode function.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot): Use the new StringView append function.
        Also use simpler new-style for loops.

        * platform/LinkHash.cpp:
        (WebCore::visitedURLInline): Use the new append function and StringView::substring.
        (WebCore::visitedLinkHash): Use upconvertedCharacters for the non-8-bit case.

        * platform/URL.cpp:
        (WebCore::findFirstOf): Chagned to take a StringView.
        (WebCore::containsOnlyASCII): Added. Works on StringView. Could move to a WTF header in
        the future if it's needed elsewhere.
        (WebCore::protocolIs): Added. Works on StringView. Could put in URL.h if needed elsewhere,
        or consider replacing the one that takes const String& with just this one.
        (WebCore::appendEncodedHostname): Changed to take a StringView and use
        StringView::upconvertedCharacters.
        (WebCore::findHostnamesInMailToURL): Changed to take a StringView.
        (WebCore::findHostnameInHierarchicalURL): Ditto.
        (WebCore::encodeHostnames): Ditto.
        (WebCore::encodeRelativeString): Ditto.

        * platform/graphics/StringTruncator.cpp:
        (WebCore::StringTruncator::width): Use StringView::upconvertedCharacters.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setFontFeatures): Use indexing directly on the string instead
        of on a UChar*.
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns): Use StringView::upconvertedCharacters.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::encode): Use a Vector<UChar> rather than a String to copy and
        replace the backslashes with yen signs. Also optimize case where there are no backslashes.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint): Use TextRun::setText(StringView).

        * rendering/RenderText.cpp:
        (WebCore::maxWordFragmentWidth): Pass a String to RenderBlock::constructTextRun instead of
        calling StringBuilder::deprecatedCharacters.

        * rendering/RenderText.h: Removed deprecatedCharacters function.

        * rendering/line/BreakingContextInlineHeaders.h: Added now-needed header include.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun): Use StringView version of TextRun constructor.

        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::SVGTextMetrics): Take references instead of pointers.
        (WebCore::SVGTextMetrics::constructTextRun): Take references instead of pointers, and don't
        take a character pointer any more. Instead, extract the text and use the StringView version of
        the TextRun constructor.
        (WebCore::SVGTextMetrics::measureCharacterRange): Take references instead of pointers and
        update for above changes.
        * rendering/svg/SVGTextMetrics.h: Updated for changes above. Also tweaked style a bit.

        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText): Updated for SVGTextMetrics changes.
        (WebCore::SVGTextMetricsBuilder::advanceComplexText): Ditto.
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer): Ditto.
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer): Change code to store a character
        for lastCharacter rather than storing a pointer to a character. Stop using TextRun::data16.

        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::subStringLengthCallback): Updated for SVGTextMetrics changes.
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback): Ditto.
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback): Ditto.
        (WebCore::calculateGlyphBoundaries): Ditto.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::atomicSubstring): Added.
        (WebCore::XPath::FunId::evaluate): Tweaked a bit to use a new style for loop.
        Use the atomicSubstring function to avoid making a temporary String just to make an AtomicString.
        That function also uses characters8/16 rather than depreccatedCharacters.

        * xml/XPathNodeSet.h: Added begin and end so this collection can be iterated with new style for loop.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite): Use StringView::upconvertedCharacters.
        (WebCore::parseAttributes): Ditto.

2014-03-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166118.
        https://bugs.webkit.org/show_bug.cgi?id=130640

        Crashing things (Requested by weinig on #webkit).

        Reverted changeset:

        "Switch HTMLConverter to use CSSPropertyIDs to refer to CSS
        properties"
        https://bugs.webkit.org/show_bug.cgi?id=130639
        http://trac.webkit.org/changeset/166118

2014-03-22  Sam Weinig  <sam@webkit.org>

        Switch HTMLConverter to use CSSPropertyIDs to refer to CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=130639

        Reviewed by Simon Fraser.

        This is a ~15% speedup on PerformanceTests/Interactive/CopyAll.html.

        - Removes gratuitous lookup of CSS properties that are known at compile time.
        - Removes attempted use of non-supported CSS properties (font-effect and horizontal-align) 
          that will alway yield the same results.
        - Fix some obvious typos where the author thought they were testing for fontKerning or fontLigatures
          but instead used the non-existent font-effect.

        * platform/mac/HTMLConverter.mm:
        (HTMLConverterCaches::computedStylePropertyForElement):
        (HTMLConverterCaches::inlineStylePropertyForElement):
        (HTMLConverterCaches::propertyValueForNode):
        (-[WebHTMLConverter _stringForNode:property:]):
        (HTMLConverterCaches::floatPropertyValueForNode):
        (-[WebHTMLConverter _getFloat:forNode:property:]):
        (HTMLConverterCaches::isBlockElement):
        (HTMLConverterCaches::elementHasOwnBackgroundColor):
        (HTMLConverterCaches::colorPropertyValueForNode):
        (-[WebHTMLConverter _colorForNode:property:]):
        (-[WebHTMLConverter _computedAttributesForElement:]):
        (-[WebHTMLConverter _addAttachmentForElement:URL:needsParagraph:usePlaceholder:]):
        (-[WebHTMLConverter _fillInBlock:forElement:backgroundColor:extraMargin:extraPadding:isTable:]):
        (-[WebHTMLConverter _addTableForElement:]):
        (-[WebHTMLConverter _addTableCellForElement:]):
        (-[WebHTMLConverter _processElement:tag:display:depth:]):
        (-[WebHTMLConverter _exitElement:tag:display:depth:startIndex:]):
        (-[WebHTMLConverter _processText:]):
        (-[WebHTMLConverter _traverseNode:depth:embedded:]):

2014-03-21  Simon Fraser  <simon.fraser@apple.com>

        Don't flush compositing layers within FrameView::willPaintContents()
        https://bugs.webkit.org/show_bug.cgi?id=130627
        <rdar://problem/16368869>

        Reviewed by Sam Weinig.

        Remove the call to flushCompositingStateForThisFrame() here. We should
        have always flushed before painting via other mechanisms in WebKit2 and WebKit2.
        Flushing during painting is actually harmful, since we could be inside
        a CA commit already, and creating or destroying layers via flushing is bad.

        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):

2014-03-22  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        ASSERTION FAILED: std::isfinite(num) in WebCore::CSSPrimitiveValue::CSSPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=127361

        Huge numbers represented by the 'INF' value can not be used
        in CSS rules, so they make the assert fail. We have to make
        sure that the parsed property value is finite, otherwise
        the property will be dropped.

        Test: fast/css/infinite-floating-value.html

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createValue):

2014-03-21  Zalan Bujtas  <zalan@apple.com>

        Remove redundant friending from class Image.
        https://bugs.webkit.org/show_bug.cgi?id=130628

        Reviewed by Simon Fraser.

        Those friend classes are subclasses. No need to make them friend of their parent class.

        No change in functionality.

        * platform/graphics/Image.h:

2014-03-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Reduce the tiling coverage to the current rect and 1 tile size ahead
        https://bugs.webkit.org/show_bug.cgi?id=130555

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/ScrollView.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::computeTileCoverageRect):
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::setScrollVelocityInformation):
        (WebCore::ScrollView::computeCoverageRect):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2014-03-21  Eric Carlson  <eric.carlson@apple.com>

        [iOS] clean up fullscreen player controller when exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=130621

        Reviewed by Jer Noble.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer setBounds:]): Do nothing if _avPlayerController is nil.
        (-[WebAVVideoLayer setVideoLayerGravity:]): Ditto.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Set m_playerViewController delegate
            and player controller to nil.

2014-03-21  Eric Carlson  <eric.carlson@apple.com>

        [iOS] remote command callbacks must happen on the WebThread
        https://bugs.webkit.org/show_bug.cgi?id=130618

        Reviewed by Jer Noble.

        * platform/ios/RemoteCommandListenerIOS.h:
        (WebCore::RemoteCommandListenerIOS::createWeakPtr):
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListenerIOS::RemoteCommandListenerIOS): Dispatch commands to the
            main thread before making listener callbacks.

2014-03-21  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make <img> positioning subpixel aware.
        https://bugs.webkit.org/show_bug.cgi?id=130596

        Reviewed by Simon Fraser.

        Change <img> positioning from integral to device pixel. It enables us
        to paint hairline borders around <img> properly.
        This patch changes the behavior of broken image representation from constant 1 CSS px border
        to a dynamic 1 device px.

        Test: fast/images/hidpi-image-position-on-device-pixels.html

        * WebCore.exp.in:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawRect):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::drawPlatformResizerImage):

2014-03-21  Brent Fulgham  <bfulgham@apple.com>

        Merge VTTScanner Code from Blink
        https://bugs.webkit.org/show_bug.cgi?id=130616

        Reviewed by Eric Carlson.

        Merged from Blink (patch by fs@opera.com):
        https://chromium.googlesource.com/chromium/blink/+/f1ceb058d574a1174b524c57f67350510a942071
        http://crbug.com/75273002
        https://chromium.googlesource.com/chromium/blink/+/3e2c67969486e86347b328c72c67cacabfe6f4a1
        http://crbug.com/134173002
        https://chromium.googlesource.com/chromium/blink/+/5962b7bbb001838f3fc7f24817637528b86bfd9b
        http://crbug.com/134153002
        https://chromium.googlesource.com/chromium/blink/+/6c81f51438013edca920a19fc6a31026fc562af2
        http://crbug.com/137033002
        https://chromium.googlesource.com/chromium/blink/+/fa286dca17a291da3ae8be80111e2264de6d5cfd
        http://crbug.com/140503004
        https://chromium.googlesource.com/chromium/blink/+/8f33b63aabcce7dd21dd15288d45c4eb37c02001
        http://crbug.com/139343006
        https://chromium.googlesource.com/chromium/blink/+/1872b54b908fac525f1ad9d6f15174b11e27c8af
        http://crbug.com/143983002
        https://chromium.googlesource.com/chromium/blink/+/e6494b3359e2077bd8772d86ab1fb709acf4c398
        http://crbug.com/144893002
 
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/track/ParsingUtilities.h: Added.
        (skipExactly):
        (skipUntil):
        (skipWhile):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::markFutureAndPastNodes):
        (WebCore::VTTCue::settingName):
        (WebCore::scanPercentage):
        (WebCore::VTTCue::setCueSettings):
        * html/track/VTTCue.h:
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::setRegionSettings):
        (WebCore::VTTRegion::scanSettingName):
        (WebCore::parsedEntireRun):
        (WebCore::VTTRegion::parseSettingValue):
        * html/track/VTTRegion.h:
        * html/track/VTTScanner.cpp: Added.
        (WebCore::VTTScanner::VTTScanner):
        (WebCore::VTTScanner::scan):
        (WebCore::VTTScanner::scanRun):
        (WebCore::VTTScanner::skipRun):
        (WebCore::VTTScanner::extractString):
        (WebCore::VTTScanner::restOfInputAsString):
        (WebCore::VTTScanner::scanDigits):
        (WebCore::VTTScanner::scanFloat):
        * html/track/VTTScanner.h: Added.
        (WebCore::VTTScanner::Run::Run):
        (WebCore::VTTScanner::Run::start):
        (WebCore::VTTScanner::Run::end):
        (WebCore::VTTScanner::Run::isEmpty):
        (WebCore::VTTScanner::isAt):
        (WebCore::VTTScanner::isAtEnd):
        (WebCore::VTTScanner::match):
        (WebCore::VTTScanner::position):
        (WebCore::VTTScanner::end):
        (WebCore::VTTScanner::LCharPredicateAdapter):
        (WebCore::VTTScanner::Run::length):
        (WebCore::VTTScanner::scan):
        (WebCore::VTTScanner::skipWhile):
        (WebCore::VTTScanner::skipUntil):
        (WebCore::VTTScanner::collectWhile):
        (WebCore::VTTScanner::collectUntil):
        (WebCore::VTTScanner::seekTo):
        (WebCore::VTTScanner::currentChar):
        (WebCore::VTTScanner::advance):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseFloatPercentageValue):
        (WebCore::WebVTTParser::parseFloatPercentageValuePair):
        (WebCore::WebVTTParser::collectTimingsAndSettings):
        (WebCore::WebVTTParser::collectTimeStamp):
        (WebCore::WebVTTTreeBuilder::constructTreeFromToken):
        * html/track/WebVTTParser.h:

2014-03-21  Benjamin Poulain  <bpoulain@apple.com>

        Pseudo type cleanup part 2: split pseudo elements parsing
        https://bugs.webkit.org/show_bug.cgi?id=130370

        Reviewed by Andreas Kling.

        With this patch, pseudo elements are handled separately. The only thing left in
        the old path is compatibility pseudo elements and pseudo classes.

        The list of special pseudo elements is now separated and is stored in SelectorPseudoElementTypeMap.in.
        The script makeSelectorPseudoElementsMap.py takes that list to make the pseudo elements hash table.

        The other pseudo elements are the prefixed ones, they are filtered in CSSSelector::parsePseudoElementType().

        All the non-compatibility selectors are removed from SelectorPseudoTypeMap.in. CSSParserSelector::setPseudoTypeValue()
        is updated accordingly. The next step will be to clean that part.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::CSSComputedStyleDeclaration):
        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoElementSelector):
        (WebCore::CSSParserSelector::parsePseudoCueFunctionSelector):
        (WebCore::CSSParserSelector::setPseudoTypeValue):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::parsePseudoElementType):
        * css/CSSSelector.h:
        * css/SelectorPseudoElementTypeMap.in: Added.
        * css/SelectorPseudoTypeMap.h:
        * css/SelectorPseudoTypeMap.in:
        * css/html.css:
        (q::before):
        (q::after):
        * css/makeSelectorPseudoElementsMap.py: Added.
        (enumerablePseudoType):
        (expand_ifdef_condition):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):

2014-03-20  Andreas Kling  <akling@apple.com>

        Less inclusion of JSCInlines.h.
        <https://webkit.org/b/130545>

        Stop including JSCInlines.h from JSDOMGlobalObject.h!

        Reviewed by Simon Fraser.

        * ForwardingHeaders/runtime/IdentifierInlines.h: Added.
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMStringMapCustom.cpp:
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/ScriptGlobalObject.cpp:
        * dom/NodeIterator.cpp:
        * dom/TreeWalker.cpp:
        * testing/Internals.cpp:
        * testing/js/WebCoreTestSupport.cpp:

2014-03-21  Oliver Hunt  <oliver@apple.com>

        Fix a crash when assigning an object to document.location
        https://bugs.webkit.org/show_bug.cgi?id=130213

        Reviewed by Geoffrey Garen.

        Convert location to string before we make use the document.
        This prevents us from attempting to navigate a frame that
        has already been removed.

        Test: fast/dom/navigation-with-sideeffects-crash.html

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::JSDocument::setLocation):

2014-03-21  Brian Burg  <bburg@apple.com>

        Web Replay: replay controller is improperly setting user input bridge state
        https://bugs.webkit.org/show_bug.cgi?id=130606

        Reviewed by Timothy Hatcher.

        The user input bridge was being set based on the old session state,
        rather than the new session state.

        * replay/ReplayController.cpp:
        (WebCore::ReplayController::setSessionState):

2014-03-21  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Expose Accessibility Tree children of the selected node
        https://bugs.webkit.org/show_bug.cgi?id=130264

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        Expose the accessibility tree children (different from DOM children) of the
        current node in the accessibility node inspector.

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

2014-03-21  Alex Christensen  <achristensen@webkit.org>

        [Win] Compile fixes with video not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=130597

        Reviewed by Darin Adler.

        * DerivedSources.make:
        Only generate UserAgentScripts.h if needed.
        * platform/audio/MediaSession.cpp:
        * platform/audio/MediaSessionManager.cpp:
        Only compile if video is enabled.

2014-03-21  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Optimize FEGaussian blur
        https://bugs.webkit.org/show_bug.cgi?id=50881

        Reviewed by Dirk Schulze.

        Currently boxBlur() will calculate the filter for each channel in
        a loop and also uses Uint8ClampedArray::set() to write the
        resulting pixels into destination array.

        Using Uint8ClampedArray::set() requires lots of unnecessary type
        conversions, not to mention other function calls. This patch
        updates the original written by Simon Fraser to apply cleanly to current
        trunk.

        It also implements code to handle EdgeModes and finally avoids use
        of ::set() in the newly added boxBlurAlphaOnly()
        function. Assignment of calculated pixel values rely on pointers.

        No new tests, no change on behavior.

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlurAlphaOnly): Specialized version for alpha only cases.
        (WebCore::boxBlur):

2014-03-21  Simon Fraser  <simon.fraser@apple.com>

        unobscuredContentRect() should have the same signature on iOS and other platforms,
        and should not recurse on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=130604
        <rdar://problem/16392587>

        Reviewed by Tim Horton and Beth Dakin.

        Having different signatures on different platforms is a recipe for
        build breakage. Give the iOS unobscuredContentRect() an unused 
        VisibleContentRectIncludesScrollbars parameter.
        
        Also avoid recursion via unobscuredContentRect() calling visibleContentRectInternal().

        * WebCore.exp.in:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unobscuredContentRect):
        (WebCore::ScrollView::unobscuredContentRectInternal):
        (WebCore::ScrollView::visibleContentRectInternal):
        * platform/ScrollView.h:
        (WebCore::ScrollView::unobscuredContentRectIncludingScrollbars):
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::unobscuredContentRect):

2014-03-21  Brent Fulgham  <bfulgham@apple.com>

        Handle recovery on "timestamp-looking" lines in the WebVTT parser
        https://bugs.webkit.org/show_bug.cgi?id=130610

        Reviewed by Eric Carlson.

        Merged from Blink (patch by fs@opera.com):
        https://chromium.googlesource.com/chromium/blink/+/b669a380efbffe25f3b154b026b57b9822ce08e2
        http://crbug.com/75273002

        Tests: media/track/track-webvtt-tc031-cue-recovery.html
               media/track/track-webvtt-tc032-degenerate-cues.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parse):
        (WebCore::WebVTTParser::collectCueText):
        (WebCore::WebVTTParser::recoverCue):
        (WebCore::WebVTTParser::ignoreBadCue):
        * html/track/WebVTTParser.h:

2014-03-21  Andreas Kling  <akling@apple.com>

        Remove unused RenderView::repaintRectangleInViewAndCompositedLayers().
        <https://webkit.org/b/130605>

        Reviewed by Antti Koivisto.

        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

2014-03-21  David Hyatt  <hyatt@apple.com>

        Crash in RenderBlock::addChildIgnoringAnonymousColumnBlocks.
        https://bugs.webkit.org/show_bug.cgi?id=129948
        <rdar://problem/16074072>
        
        Reviewed by Simon Fraser.

        When the marker was placed for multi-column list items, it was being inserted
        into the list item itself. Even though the add code in RenderBlock did the right
        thing and put the marker inside the multi-column flow thread, the list item code
        passed in a beforeChild that was computed using the incorrect parent. This resulted
        in the flow thread being used both as the parent of the marker and the sibling of
        the marker.
        
        The fix is to add some code to RenderListItem to make sure it uses the multi-column
        flow thread if it exists both as the parent of the marker and as the basis for the
        computation of the sibling that the marker should be placed in front of.

        Added fast/multicol/multicol-li-crash.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded):

2014-03-20  Andreas Kling  <akling@apple.com>

        Stop pulling in JSCInlines.h all over the place.
        <https://webkit.org/b/130105>

        JSDOMBinding.h is included by everyone and their uncle, so try to
        cut down on the amount of JSC *Inlines.h it includes.

        Reviewed by Geoff Garen.

        * ForwardingHeaders/heap/SlotVisitorInlines.h: Added.
        * ForwardingHeaders/runtime/JSCJSValueInlines.h: Added.
        * ForwardingHeaders/runtime/JSCellInlines.h: Added.
        * ForwardingHeaders/runtime/StructureInlines.h: Added.
        * bindings/js/JSDOMBinding.h:

2014-03-21  David Kilzer  <ddkilzer@apple.com>

        WindowFeatures.{x|y|width|height} are not initialized
        <http://webkit.org/b/130547>
        <rdar://problem/16383151>

        Reviewed by Darin Adler.

        Based on a Blink patch in CRBug 342591 by zhaoqin.

        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::WindowFeatures):
        - Initialize x, y, width, height in String constructor.
        - Move 'resizeable' variable to short-hand initialization since
          it is true in both cases.
        - Use String::isEmpty() instead of checking its length.
        * page/WindowFeatures.h:
        (WebCore::WindowFeatures::WindowFeatures): Initialize x, y,
        width, height in no-argument constructor.

2014-03-21  Sergio Villar Senin  <svillar@igalia.com>

        Replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed<T> in bridge/
        https://bugs.webkit.org/show_bug.cgi?id=130601

        Reviewed by Darin Adler.

        * bridge/IdentifierRep.cpp:
        (WebCore::identifierSet):
        (WebCore::intIdentifierMap):
        (WebCore::stringIdentifierMap):
        * bridge/NP_jsobject.cpp:
        (objectMap):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::rootObjectSet): Return a reference instead of
        a pointer.
        (JSC::Bindings::findProtectingRootObject):
        (JSC::Bindings::findRootObject):
        (JSC::Bindings::RootObject::RootObject):
        (JSC::Bindings::RootObject::invalidate):

2014-03-21  Michael Saboff  <msaboff@apple.com>

        Change CodeGeneratorJS.pm special cases for "DOMWindow" to be general purpose
        https://bugs.webkit.org/show_bug.cgi?id=130553

        Reviewed by Geoffrey Garen.

        Eliminated 'if ($interfaceName eq "DOMWindow") {' sections in CodeGeneratorJS where
        it was used to do DOMWindow specific casting to a JSObject, either a JSDOMWindow* or
        a JSDOMWindowShell*.  Instead the code generator will use the existing 
        JSDOMWindow* toJSDOMWindow(JSValue value) function based on a newly added attribute
        "CustomProxyToJSObject".  That attribute will emit a call to the function
        ${className}* to${className}(JSValue).

        This is being done to clean up the code generator and for a subsequent patch that
        will use a similar custom to{className} function for workers,
        JSDedicatedWorkerGlobalScope* toJSDedicatedWorkerGlobalScope(JSValue).

        Changes covered by existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * page/DOMWindow.idl:

2014-03-21  Krzysztof Czech  <k.czech@samsung.com>

        AX: Replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=130594

        Reviewed by Chris Fleizach.

        Use static NeverDestroyed<T> in new code.

        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):
        (WebCore::AccessibilityMediaControl::title):
        (WebCore::AccessibilityMediaControlsContainer::elementTypeName):
        (WebCore::AccessibilityMediaTimeline::helpText):
        (WebCore::AccessibilityMediaTimeDisplay::accessibilityDescription):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::actionVerb):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionStatus):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionRelevant):
        (WebCore::AccessibilityRenderObject::actionVerb):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):

2014-03-20  Brent Fulgham  <bfulgham@apple.com>

        Merge WebVTT Tokenizer Updates
        https://bugs.webkit.org/show_bug.cgi?id=130565

        Reviewed by Eric Carlson.

        Merged from Blink (patch by fs@opera.com):
        https://chromium.googlesource.com/chromium/blink/+/923db263aa65d6efd71c5b55708ad7eea6b23f53
        http://crbug.com/73813002
        https://chromium.googlesource.com/chromium/blink/+/48375b1d56b2d8850ae93a6c6fb01c69fae82c75
        http://crbug.com/77553004
        https://chromium.googlesource.com/chromium/blink/+/98d4fc4f5cb716a31d11907120b10538d4ba0f09
        http://crbug.com/78833002
        https://chromium.googlesource.com/chromium/blink/+/0e53d4f9f140e979b7f32de495551684bc7f4cd2
        http://crbug.com/81113003
        https://chromium.googlesource.com/chromium/blink/+/730ef1e7f9a1919964f7e74e7ccb2f343e10a148
        http://crbug.com/97103002
        https://chromium.googlesource.com/chromium/blink/+/c373ee914ffabeaf833939129538251d8f2f4eca
        http://crbug.com/98763004
        https://chromium.googlesource.com/chromium/blink/+/4ddb4d57948228fa05e49e06bd58a1179c09f212
        http://crbug.com/118263002
 
        * html/track/VTTCue.cpp:
        (WebCore::scanPercentage):
        (WebCore::VTTCue::setCueSettings):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTTreeBuilder::buildFromString):
        (WebCore::WebVTTTreeBuilder::constructTreeFromToken):
        * html/track/WebVTTToken.h:
        (WebCore::WebVTTToken::WebVTTToken):
        (WebCore::WebVTTToken::StringToken):
        (WebCore::WebVTTToken::StartTag):
        (WebCore::WebVTTToken::EndTag):
        (WebCore::WebVTTToken::TimestampTag):
        (WebCore::WebVTTToken::type):
        (WebCore::WebVTTToken::name):
        (WebCore::WebVTTToken::characters):
        (WebCore::WebVTTToken::classes):
        (WebCore::WebVTTToken::annotation):
        * html/track/WebVTTTokenizer.cpp:
        (WebCore::addNewClass):
        (WebCore::emitToken):
        (WebCore::advanceAndEmitToken):
        (WebCore::WebVTTTokenizer::WebVTTTokenizer):
        (WebCore::WebVTTTokenizer::nextToken):
        * html/track/WebVTTTokenizer.h:
        (WebCore::WebVTTTokenizer::shouldSkipNullCharacters):

2014-03-21  Frédéric Wang  <fred.wang@free.fr>

        Bug 130345 - Refine childShouldCreateRenderer for MathML elements
        https://bugs.webkit.org/show_bug.cgi?id=130345

        Reviewed by Chris Fleizach.

        This is a follow-up of bug 124128. We add more restrictions on foreign
        content of MathML elements.

        Tests: mathml/presentation/annotation-children.html
               mathml/presentation/foreign-element-in-token.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationMathML): fix line wrapping
        (WebCore::MathMLElement::isPhrasingContent):
        - move the function from MathMLSelectElement.cpp
        - add the constraint "is descendant of a map element" for area.
        (WebCore::MathMLElement::isFlowContent): new function to test flow content.
        (WebCore::MathMLElement::childShouldCreateRenderer):
        - remove annotation since it is now tested in MathMLTextElement
        - refine testing of annotation-xml
        - do not create renderer for text content in MathML. Such content is only allowed inside token elements.
        * mathml/MathMLElement.h: Declare isPhrasingContent and isFlowContent.
        * mathml/MathMLSelectElement.cpp: Add new function to test MathML/SVG/HTML encodings.
        (WebCore::MathMLSelectElement::isMathMLEncoding):
        (WebCore::MathMLSelectElement::isSVGEncoding):
        (WebCore::MathMLSelectElement::isHTMLEncoding):
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild): use the new functions.
        * mathml/MathMLSelectElement.h: Declare the new public functions.
        * mathml/MathMLTextElement.cpp: remove the isPhrasingContent function.
        (WebCore::MathMLTextElement::childShouldCreateRenderer): Just in case, use the generic StyledElement::childShouldCreateRenderer.

2014-03-21  Darin Adler  <darin@apple.com>

        Stop using deprecatedCharacters in WebCore/platform/win
        https://bugs.webkit.org/show_bug.cgi?id=130515

        Reviewed by Brent Fulgham.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Add a constructor that takes a StringView.
        Later, we might want to exclusively use the StringView version and remove
        some of the others.
        (WebCore::TextRun::setText): Add a version of this function that takes a StringView.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): Use StringView::getCharactersWithUpconvert.
        (WebCore::createGDIFont): Ditto.
        (WebCore::FontCache::getTraitsInFamily): Ditto.
        * platform/win/BString.cpp:
        (WebCore::BString::BString): Use StringView::upconvertedCharacters.
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData): Use StringView::getCharactersWithUpconvert.
        * platform/win/FileSystemWin.cpp:
        (WebCore::pathByAppendingComponent): Use StringBuilder and StringView::getCharactersWithUpconvert.
        (WebCore::fileSystemRepresentation): Use StringView::upconvertedCharacters.
        * platform/win/PasteboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle): Use StringView::getCharactersWithUpconvert.
        (WebCore::Pasteboard::writeURLToDataObject): Ditto.
        (WebCore::createGlobalImageFileDescriptor): Ditto.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize): Use the new TextRun constructor.
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint): Ditto.

2014-03-21  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: RenderBox is positioned off by one when non-compositing transform is present.
        https://bugs.webkit.org/show_bug.cgi?id=130430

        Reviewed by Simon Fraser.

        div {
            position: absolute;
             top: 10.25px;
             left: 10.25px;
         }

         The <div> with (10.25px, 10.25px) is painted to (10.5px, 10.5px) after device pixel snapping on 2x display.
         Moving <div> to its own RenderLayer should not change the painting position.

         div {
             position: absolute;
             top: 10.25px;
             left: 10.25px;
             -webkit-transform: rotate(0deg);
         }

        When we paint the RenderLayer's content, the graphics context is translated by the rounded value of
        renderer's offset from parent.

            (10.25px,10.25px) -> rounded to (10.5px,10.5px).

        When the translate moves the graphics context's origin over the renderer's top-left position,
        the renderer's relative top-left coordinates end up being negative.

            Graphics context translated by (10.5px,10.5px) -> pushes renderer's relative top-left coords to (-0.25px,-0.25px)

        When we round (pixel snap) these negative coordinates, half-way values get translated to the wrong direction.

        (relative coords (-0.25px,-0.25px) -> pixel snapped to (-0.5px,-0.5px) -> final absolute(painting) coords (10px,10px))

        This patch changes the rounding to flooring to ensure that the relative top-left position never gets negative as the result
        of subpixel shifting.

        Tests: compositing/hidpi-box-positioned-off-by-one-when-non-compositing-transform-is-present.html
               fast/layers/hidpi-box-positioned-off-by-one-when-transform-is-present.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::currentTransform):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateTransform):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::animatedLocalTransform):

2014-03-21  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. iOS build fix after r166046.

        * WebCore.exp.in:

2014-03-21  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Fix the !ENABLE(FILTERS) build
        https://bugs.webkit.org/show_bug.cgi?id=130394

        Reviewed by Gyuyoung Kim.

        Add missing includes in rendering to fix compile errors, and include JSC headers to ImageBuffer.h to fix linker errors.

        * platform/graphics/ImageBuffer.h:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGRoot.cpp:

2014-03-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166052.
        https://bugs.webkit.org/show_bug.cgi?id=130571

        It broke EFL build (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Use GMainLoopSource for idle and timeout sources in
        WebCore"
        https://bugs.webkit.org/show_bug.cgi?id=130078
        http://trac.webkit.org/changeset/166052

2014-03-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add *explicit* keyword to avoid implicit type conversion
        https://bugs.webkit.org/show_bug.cgi?id=130568

        Reviewed by Antti Koivisto.

        Constructors of RemoteFontFaceSource, SVGDocumentExtensions, XMLDocumentParserScope,
        and WorkerScriptDebugServer need to use *explicit* keyword because they have an argument.
        Besides removed a meaningless argument name.

        * svg/SVGDocumentExtensions.h:
        * xml/parser/XMLDocumentParserScope.h:

2014-03-20  Sergio Villar Senin  <svillar@igalia.com>

        Modules: replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed<T>
        https://bugs.webkit.org/show_bug.cgi?id=130407

        Reviewed by Darin Adler.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::installedCDMFactories):
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::registry):
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registry):

2014-03-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use GMainLoopSource for idle and timeout sources in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=130078

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/gtk/GtkDragAndDropHelper.cpp:
        * platform/gtk/SharedTimerGtk.cpp:

2014-03-21  Andreas Kling  <akling@apple.com>

        HTMLFrameOwnerElement should obey the SubframeLoadingDisabler when creating subframes
        <rdar://problem/15675780>

        Merge Blink r156744 by Adam Klein.

        Test: fast/frames/set-iframe-src-in-pagehide-crash.html

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):

2014-03-21  Darin Adler  <darin@apple.com>

        Improve idiom used for string building in a few places
        https://bugs.webkit.org/show_bug.cgi?id=130561

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString): Use a StringBuilder, and get rid of
        an an unnecessary additional string allocation.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create): Use StringBuilder.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename): Do a more efficient
        string concatenation.
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::updateValidationMessage): Ditto.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        Use a StringBuilder.

        * inspector/InspectorStyleSheet.cpp: 
        (WebCore::InspectorStyle::shorthandValue): Use a StringBuilder.

        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty): Use a more efficient idiom
        for string concatenation.
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty): Ditto.
        * loader/FormSubmission.cpp:
        (WebCore::appendMailtoPostFormDataToURL): Ditto.

        * page/Frame.cpp:
        (WebCore::createRegExpForLabels): Use a StringBuilder.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Use a more efficient
        idiom for string concatenation.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Use a StringBuilder.

        * platform/network/MIMEHeader.cpp:
        (WebCore::MIMEHeader::parseHeader): Use a more efficient idiom for string
        concatenation.
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::addHTTPHeaderField): Ditto.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText): Ditto.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::secureText): Create a new string with the substring
        function rather than with the append function.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeaderInternal): Use a more efficient idiom
        for string concatenation.

2014-03-21  Darin Adler  <darin@apple.com>

        Add a combined decodeAndFlush to TextResourceDecoder
        https://bugs.webkit.org/show_bug.cgi?id=130560

        Reviewed by Andreas Kling.

        * WebCore.exp.in: Added new symbol for decodeAndFlush. Also re-did
        the geometry types #if so it would sort more logically.

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::convertToText): Use decodeAndFlush.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent): Ditto.
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent): Ditto.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::decodeAndFlush): Added.
        * loader/TextResourceDecoder.h: Ditto.

        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest): Use decodeAndFlush.
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText): Ditto.
        (WebCore::CachedCSSStyleSheet::finishLoading): Ditto.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData): Use decodeAndFlush. Also use nullptr.
        (WebCore::CachedFont::getSVGFontById): Use descendantsOfType<SVGFontElement>
        instead of using a NodeList. Much more efficient!

        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading): Use decodeAndFlush.
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script): Ditto.
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::finishLoading): Ditto.
        * page/Page.cpp:
        (WebCore::Page::userStyleSheet): Ditto.

2014-03-20  Darin Adler  <darin@apple.com>

        Remove a couple of unused functions from CSSOMUtils
        https://bugs.webkit.org/show_bug.cgi?id=130558

        Reviewed by Andreas Kling.

        * css/CSSOMUtils.cpp: Remove String overloads. Callers all use the StringBuilder
        ones, which is good since that is a more efficient idiom.
        * css/CSSOMUtils.h: Ditto.

2014-03-20  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. iOS build fix after r166017, r166032.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRectInternal):

2014-03-20  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for EFL objects.
        https://bugs.webkit.org/show_bug.cgi?id=129853

        Reviewed by Gyuyoung Kim.

        EflUniquePtr is a template alias of std::unique_ptr
        with a custom deleter for each Efl Objects, which is motivated by GUniquePtr.
        This patch replaces uses of OwnPtr and PassOwnPtr for Efl objects with EflUniquePtr.

        No new tests. No new functionality.

        * platform/efl/EflScreenUtilities.h:
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::ThemePartCacheEntry::create):
        (WebCore::RenderThemeEfl::loadTheme):
        * platform/efl/RenderThemeEfl.h:
        * platform/graphics/Icon.h:
        * platform/graphics/efl/EvasGLContext.h:
        (WebCore::EvasGLContext::create):
        * platform/graphics/efl/EvasGLSurface.h:
        (WebCore::EvasGLSurface::create):

2014-03-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get CMake to find Freetype2 properly
        https://bugs.webkit.org/show_bug.cgi?id=130150

        Reviewed by Martin Robinson.

        Newer versions of CMake are not able to find Freetype2 correctly.
        FindFreetype2.cmake checks for the version number in freetype.h header, since it seems that bug exists in
        freetype2 repo, because a completely different version number is found in freetype2.pc.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:

2014-03-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Suppress errors about using gdk_threads_enter gdk_threads_leave
        https://bugs.webkit.org/show_bug.cgi?id=130517

        Reviewed by Sergio Villar Senin.

        * plugins/gtk/gtk2xtbin.c: Use GCC suppression to suppress errors about deprecations.

2014-03-20  Simon Fraser  <simon.fraser@apple.com>

        Cleanup in aisle r166017.
        
        visibleContentRectInternal() was dropping the scrollbar
        inclusiveness on the floor, and we need to reset the top inset
        between tests.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRectInternal):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2014-03-20  Enrica Casucci  <enrica@apple.com>

        Build fix.

        Removing unused variable.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::didPaintContents):

2014-03-20  Brent Fulgham  <bfulgham@apple.com>

        Rename TextTrackRegion/TextTrackRegionList to VTTRegion/VTTRegionList
        https://bugs.webkit.org/show_bug.cgi?id=130543

        Reviewed by Dean Jackson.

        Merged from Blink (patch by philipj@opera.com):
        https://chromium.googlesource.com/chromium/blink/+/69ee6d3399d64163e4936ac1bde222036c54c4b8
        http://crbug.com/55653003

        Tests: media/track/regions-webvtt/vtt-region-constructor.html
               media/track/regions-webvtt/vtt-region-display.html
               media/track/regions-webvtt/vtt-region-dom-layout.html
               media/track/regions-webvtt/vtt-region-list.html
               media/track/regions-webvtt/vtt-region-parser.html

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::ensureVTTRegionList):
        (WebCore::TextTrack::regions):
        (WebCore::TextTrack::addRegion):
        (WebCore::TextTrack::removeRegion):
        * html/track/TextTrack.h:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.cpp:
        * html/track/TextTrackRegion.cpp: Removed.
        * html/track/TextTrackRegion.h: Removed.
        * html/track/TextTrackRegion.idl: Removed.
        * html/track/TextTrackRegionList.cpp: Removed.
        * html/track/TextTrackRegionList.h: Removed.
        * html/track/TextTrackRegionList.idl: Removed.
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::removeDisplayTree):
        * html/track/VTTRegion.cpp: Copied from Source/WebCore/html/track/TextTrackRegion.cpp.
        (WebCore::VTTRegion::VTTRegion):
        (WebCore::VTTRegion::~VTTRegion):
        (WebCore::VTTRegion::setTrack):
        (WebCore::VTTRegion::setId):
        (WebCore::VTTRegion::setWidth):
        (WebCore::VTTRegion::setHeight):
        (WebCore::VTTRegion::setRegionAnchorX):
        (WebCore::VTTRegion::setRegionAnchorY):
        (WebCore::VTTRegion::setViewportAnchorX):
        (WebCore::VTTRegion::setViewportAnchorY):
        (WebCore::VTTRegion::scroll):
        (WebCore::VTTRegion::setScroll):
        (WebCore::VTTRegion::updateParametersFromRegion):
        (WebCore::VTTRegion::setRegionSettings):
        (WebCore::VTTRegion::getSettingFromString):
        (WebCore::VTTRegion::parseSettingValue):
        (WebCore::VTTRegion::parseSetting):
        (WebCore::VTTRegion::textTrackCueContainerScrollingClass):
        (WebCore::VTTRegion::textTrackCueContainerShadowPseudoId):
        (WebCore::VTTRegion::textTrackRegionShadowPseudoId):
        (WebCore::VTTRegion::appendTextTrackCueBox):
        (WebCore::VTTRegion::displayLastTextTrackCueBox):
        (WebCore::VTTRegion::willRemoveTextTrackCueBox):
        (WebCore::VTTRegion::getDisplayTree):
        (WebCore::VTTRegion::prepareRegionDisplayTree):
        (WebCore::VTTRegion::startTimer):
        (WebCore::VTTRegion::stopTimer):
        (WebCore::VTTRegion::scrollTimerFired):
        * html/track/VTTRegion.h: Copied from Source/WebCore/html/track/TextTrackRegion.h.
        (WebCore::VTTRegion::create):
        * html/track/VTTRegion.idl: Copied from Source/WebCore/html/track/TextTrackRegion.idl.
        * html/track/VTTRegionList.cpp: Copied from Source/WebCore/html/track/TextTrackRegionList.cpp.
        (WebCore::VTTRegionList::VTTRegionList):
        (WebCore::VTTRegionList::length):
        (WebCore::VTTRegionList::item):
        (WebCore::VTTRegionList::getRegionById):
        (WebCore::VTTRegionList::add):
        (WebCore::VTTRegionList::remove):
        (WebCore::VTTRegionList::clear):
        * html/track/VTTRegionList.h: Copied from Source/WebCore/html/track/TextTrackRegionList.h.
        (WebCore::VTTRegionList::create):
        (WebCore::VTTRegionList::~VTTRegionList):
        * html/track/VTTRegionList.idl: Copied from Source/WebCore/html/track/TextTrackRegionList.idl.
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseFloatPercentageValue):
        (WebCore::WebVTTParser::getNewRegions):
        (WebCore::WebVTTParser::createNewRegion):
        * html/track/WebVTTParser.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewRegions):
        * loader/TextTrackLoader.h:

2014-03-20  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):

2014-03-20  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] clamp RasterShape shapeMargin to reference box size
        https://bugs.webkit.org/show_bug.cgi?id=130350

        Reviewed by Dean Jackson.

        Corrected the way the maximum shape-margin value was computed for image valued
        shapes. The limiting case is an image with just one above threshold pixel. The
        largest possible value for shapeMargin is the radius of a circle that encloses
        the size of the shape-outside element's margin-box, since the shape-outside's
        boundary is clipped to the margin-box. The radius is just sqrt(2) * the margin-box's
        largest dimension.

        Also cleaned up up a few poorly named parameters.

        Test: fast/shapes/shape-outside-floats/shape-outside-one-pixel.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShape::marginIntervals):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::RasterShape):
        * rendering/shapes/Shape.h:

2014-03-20  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2014-03-20  Beth Dakin  <bdakin@apple.com>

        Implement contentInset for Mac WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130273

        Reviewed by Simon Fraser.

        This patch adds support for topContentInset(). If a page has a topContentInset(), 
        the root layer’s position is adjusted to account for the inset. It is assumed that 
        the area accounted for by the inset is visible but obscured, so scrollbars need to 
        be moved so that they only cover the non-obscured area, and most parts of WebCore 
        that wonder about visibleContentSize only care about the unobscured area, so this 
        patch makes that visibleContentRect return the unobscuredRect. Finally since this 
        is achieved by moving a layer’s position, the topContentInset() also needs to be 
        factored into various functions that are used to convert between coordinate 
        spaces. 

        Return Page::topContentInset() if this is the main frame.
        * page/FrameView.cpp:
        (WebCore::FrameView::topContentInset):
        * page/FrameView.h:

        Cache the inset on Page.
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::topContentInset):
        (WebCore::Page::setTopContentInset):

        unobscuredContentRect() used to unconditionally return visibleContentRect() on 
        non-iOS platforms. Now that it is possible for some technically visible content to 
        be obscured, this code needed to be re-worked a bit to make some more sense. 
        visibleContentRect() now represents that visible content that is completely 
        unobscured, so it should call into unobscuredContentRect() rather than the other 
        way around.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unobscuredContentRect):

        unscaledTotalVisibleContentSize() includes the size of all content that might be 
        visible. Some of this content might be obscured.
        (WebCore::ScrollView::unscaledTotalVisibleContentSize):

        Most of the time, we only care about the content that is FULLY visible. That is 
        what you get from unscaledUnobscuredVisibleContentSize().
        (WebCore::ScrollView::unscaledUnobscuredVisibleContentSize):

        Use the unobscured size for these computations.
        (WebCore::ScrollView::visibleContentRectInternal):
        (WebCore::ScrollView::layoutSize):

        Factor in the topContentInset().
        (WebCore::ScrollView::scrollOffsetRelativeToDocument):
        (WebCore::ScrollView::scrollPositionRelativeToDocument):

        The scrollbars should be positioned to cover the non-obscured content only. 
        (WebCore::ScrollView::updateScrollbars):

        Again, factor the topContentInset() into these conversions since the root layer’s 
        position has been adjusted to account for it.
        (WebCore::ScrollView::contentsToRootView):
        (WebCore::ScrollView::contentsToWindow):

         Just like the scrollbars, the scroll corner must be moved the account for the 
        inset.
        (WebCore::ScrollView::scrollCornerRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::topContentInset):

        RenderLayerCompositor cares about unscaledTotalVisibleContentSize(). It does not 
        care if some of that content is obscured.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):

        Move the root layer’s position based on the contentInset.
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

        Allow setting contentInset via Internals for testing purposes.
        * testing/Internals.cpp:
        (WebCore::Internals::setTopContentInset):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-03-20  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Optimize RenderTable::colToEffCol() for tables without colspans
        https://bugs.webkit.org/show_bug.cgi?id=129298

        Reviewed by Simon Fraser.

        Create an alternative fast path to RenderTable colToEffCol() and effColToCol()
        when there is no colspan or colspan does not exceed the width of table.
        Blink merge https://codereview.chromium.org/154243002 by rhogan

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::appendColumn):
        (WebCore::RenderTable::recalcSections):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::colToEffCol):
        (WebCore::RenderTable::effColToCol):
        (WebCore::RenderTable::hasCellColspanThatDeterminesTableWidth):

2014-03-20  Simon Fraser  <simon.fraser@apple.com>

        FrameView::paintContents() is not called for composited content
        https://bugs.webkit.org/show_bug.cgi?id=130541

        Reviewed by Beth Dakin.

        FrameView::paintContents() is not called for frames that have
        composited contents, yet it contains code that is expected
        to run for all Frames.
        
        Fix by factoring into will/didPaintContents(), and calling
        the will/did functions from RenderLayerBacking::paintIntoLayer().
        
        Also add a SetLayoutNeededForbiddenScope check for composited-layer
        painting.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints):
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2014-03-20  Tim Horton  <timothy_horton@apple.com>

        Fix the Mountain Lion build.

        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::setIsPurgeable):

2014-03-20  Brian Burg  <bburg@apple.com>

        Web Replay: capture and replay mouse events
        https://bugs.webkit.org/show_bug.cgi?id=129395

        Reviewed by Joseph Pecoraro.

        Add support for capturing and replaying mouse inputs that come from WebKit2.
        Hook up the UserInputBridge to session state changes in the ReplayController so
        that the bridge knows when to capture or deny mouse inputs.

        Test: ManualTests/inspector/replay-mouse-events.html

        * platform/PlatformEvent.h: Give explicit storage types to Modifiers and Type enums
        so they can be forward-declared.
        * platform/PlatformMouseEvent.h: Give an explicit storage type to enum MouseButton.
        Add operator== and operator!= for MouseButton to work around an MSVC bug.

        * replay/ReplayController.cpp: Perform session state changes in a helper function, and
        at the same time change the state of the page's user input bridge.
        (WebCore::ReplayController::setSessionState):
        (WebCore::ReplayController::startCapturing):
        (WebCore::ReplayController::stopCapturing):
        (WebCore::ReplayController::startPlayback):
        (WebCore::ReplayController::cancelPlayback):

        * replay/ReplayInputDispatchMethods.cpp: Add dispatch methods for new inputs.
        (WebCore::HandleMouseMove::dispatch):
        (WebCore::HandleMousePress::dispatch):
        (WebCore::HandleMouseRelease::dispatch):

        * replay/SerializationMethods.cpp: Add helper macros so that encode/decode methods look
        symmetric with one data member per line. This helps reduce unintentional inconsistencies.
        (JSC::EncodingTraits<PlatformMouseEvent>::encodeValue): Added.
        (JSC::EncodingTraits<PlatformMouseEvent>::decodeValue): Added.
        * replay/SerializationMethods.h:

        * replay/UserInputBridge.cpp: Fill in the bridge method implementations for mouse
        events, adding helpers and macros as necessary to reduce boilerplate.
        (WebCore::UserInputBridge::activeCursor): Added.
        (WebCore::UserInputBridge::handleMousePressEvent):
        (WebCore::UserInputBridge::handleMouseReleaseEvent):
        (WebCore::UserInputBridge::handleMouseMoveEvent):
        (WebCore::UserInputBridge::handleMouseMoveOnScrollbarEvent):

        * replay/UserInputBridge.h: Add a bridge state enum along with getters and setters.
        The enum value controls whether the bridge should capture commands, deny non-synthetic
        commands (from the user), or allow anything to pass (the default).
        (WebCore::UserInputBridge::setState): Added.
        (WebCore::UserInputBridge::state): Added.

        * replay/WebInputs.json: Add inputs HandleMouseMove, HandleMousePress, HandleMouseRelease.
        Add enum definitions for PlatformEvent::Type, PlatformEvent::Modifiers, and PlatformMouseEvent::MouseButton.
        Alphabetize the existing data type definitions.

2014-03-20  Tim Horton  <timothy_horton@apple.com>

        Add WebCore::IOSurface wrapper
        https://bugs.webkit.org/show_bug.cgi?id=130529

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.h:
        (WebCore::cachedCGColorSpace):
        Move cachedCGColorSpace out so that other clients of GraphicsContextCG
        can use its mapping from WebCore::ColorSpace -> CGColorSpaceRef.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        Add FIXMEs for ImageBuffer to adopt WebCore::IOSurface.

        * platform/graphics/cocoa/IOSurface.h: Added.
        * platform/graphics/cocoa/IOSurface.mm: Added.
        (IOSurface::create):
        (IOSurface::createFromMachPort):
        (IOSurface::createFromSurface):
        (IOSurface::IOSurface):
        (IOSurface::maximumSize):
        (IOSurface::createMachPort):
        (IOSurface::createImage):
        (IOSurface::ensurePlatformContext):
        (IOSurface::ensureGraphicsContext):
        (IOSurface::state):
        (IOSurface::isPurgeable):
        (IOSurface::setIsPurgeable):
        (IOSurface::inUse):
        Add WebCore::IOSurface.

2014-03-20  Pratik Solanki  <psolanki@apple.com>

        iOS build fix after r165992.

        * generate-export-file:
        (preprocessorMacros):

2014-03-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Moving RTCConfiguration and RTCIceServer to Modules/mediastream
        https://bugs.webkit.org/show_bug.cgi?id=130434

        Reviewed by Eric Carlson.

        Those classes are defined in WebRTC spec, so they should not be in platform layer.
        Adding a platform implementation to be passed to handler classes.

        * Modules/mediastream/RTCConfiguration.h: Copied from Source/WebCore/platform/mediastream/RTCConfiguration.h.
        * Modules/mediastream/RTCIceServer.h: Copied from Source/WebCore/platform/mediastream/RTCIceServer.h.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::updateIce):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RTCConfigurationPrivate.h: Added.
        * platform/mediastream/RTCIceServerPrivate.h: Added.
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::initialize):
        (WebCore::RTCPeerConnectionHandlerMock::updateIce):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2014-03-20  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Unreviewed speculative build after my r165996.

        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        * platform/network/soup/CertificateInfo.cpp:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/ResourceRequestSoup.cpp:
        * platform/network/soup/ResourceResponseSoup.cpp:
        * platform/network/soup/SynchronousLoaderClientSoup.cpp:

2014-03-20  Brent Fulgham  <bfulgham@apple.com>

        Add a flushing mechanism for the WebVTTParser
        https://bugs.webkit.org/show_bug.cgi?id=130532

        Reviewed by Eric Carlson.

        Merged from Blink (patch by vcarbune@chromium.org):
        https://chromium.googlesource.com/chromium/blink/+/1ac2b3081492ab8661429230004013a9a3623f0f
        http://crbug.com/54203003
        https://chromium.googlesource.com/chromium/blink/+/24343d32bc36d20d59ef3e10040faddde65929e6
        http://crbug.com/59453002
        https://chromium.googlesource.com/chromium/blink/+/ef2793f1d9d207389589ecf9a136ea5c7170b4af
        http://crbug.com/75233002
        https://chromium.googlesource.com/chromium/blink/+/a29f2f8324abcd4826b41e7dc34373dee2ec57a9
        http://crbug.com/52713005
        https://chromium.googlesource.com/chromium/blink/+/7ce003c8d47b39f116f1f2a592a5dfb4a9e77228
        http://crbug.com/64303004
        https://chromium.googlesource.com/chromium/blink/+/18f896b3498478311e880f782813d5dfc8c0c7d1
        http://crbug.com/96933004
        https://chromium.googlesource.com/chromium/blink/+/8670e8ecb13254a651f5493ec83f4484d18c154e
        http://crbug.com/98783005
        https://chromium.googlesource.com/chromium/blink/+/4ac55780a6af3d76e0159c1d145330964ad56647
        http://crbug.com/104713002

        Tests: http/tests/media/track/track-webvtt-slow-loading-2.html
               http/tests/media/track/track-webvtt-slow-loading.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/track/BufferedLineReader.cpp: Added.
        * html/track/BufferedLineReader.h: Added.
        * html/track/TextTrackRegion.cpp:
        * html/track/VTTCue.cpp:
        * html/track/WebVTTParser.cpp:
        * html/track/WebVTTParser.h:
        * loader/TextTrackLoader.cpp:

2014-03-20  Alex Christensen  <achristensen@webkit.org>

        Preparation for using Soup on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=130472

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Added Soup source to build on WinCairo.
        * platform/network/curl/CookieJarCurl.cpp:
        * platform/network/curl/CredentialStorageCurl.cpp:
        * platform/network/curl/CurlCacheEntry.cpp:
        * platform/network/curl/CurlCacheManager.cpp:
        * platform/network/curl/CurlDownload.cpp:
        * platform/network/curl/DNSCurl.cpp:
        * platform/network/curl/FormDataStreamCurl.cpp:
        * platform/network/curl/MultipartHandle.cpp:
        * platform/network/curl/ProxyServerCurl.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        * platform/network/curl/SSLHandle.cpp:
        * platform/network/curl/SocketStreamHandleCurl.cpp:
        Protected with USE(CURL) to avoid duplicate symbols when linking.
        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        * platform/network/soup/CertificateInfo.cpp:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/CookieStorageSoup.cpp:
        * platform/network/soup/CredentialStorageSoup.cpp:
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        * platform/network/soup/ProxyResolverSoup.cpp:
        * platform/network/soup/ProxyServerSoup.cpp:
        * platform/network/soup/ResourceErrorSoup.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/ResourceRequestSoup.cpp:
        * platform/network/soup/ResourceResponseSoup.cpp:
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        * platform/network/soup/SoupNetworkSession.cpp:
        * platform/network/soup/SynchronousLoaderClientSoup.cpp:
        Protected with USE(CURL) to avoid duplicate symbols when linking.

2014-03-20  Pratik Solanki  <psolanki@apple.com>

        iOS build fix after r165979.

        * generate-export-file:
        (preprocessorMacros):

2014-03-20  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] getClientRects returns wrong rectangle
        https://bugs.webkit.org/show_bug.cgi?id=128614

        Reviewed by Sam Weinig.

        Added fast/multicol/newmulticol/client-rects.html and beefed up existing
        fast/multicol/client-rects.html to use more writing modes.

        * rendering/LayoutState.h:
        Removed unused function.

        * rendering/RenderFlowThread.h:
        Make mapFlowToRegion virtual so that RenderMultiColumnFlowThread can
        override it.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::mapFromFlowToRegion):
        * rendering/RenderMultiColumnFlowThread.h:
        Implement mapFlowToRegion to correctly translate a flow thread position
        into a column offset within a region.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset):
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        Refactored some code to make a columnTranslationForOffset helper that
        can be used by RenderMultiColumnFlowThread.

2014-03-20  Daniel Bates  <dabates@apple.com>

        Preserve original document URL for XSSAuditor reports

        Merged from Blink (patch by Tom Sepez):
        https://src.chromium.org/viewvc/blink?view=rev&revision=158406

        Test: http/tests/security/xssAuditor/report-script-tag-replace-state.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::buildConsoleError):
        (WebCore::XSSAuditorDelegate::generateViolationReport):
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::XSSInfo):

2014-03-20  Daniel Bates  <dabates@apple.com>

        XSSAuditor bypass with frameset tags

        Merged from Blink (patch by Tom Sepez):
        https://src.chromium.org/viewvc/blink?view=rev&revision=157794

        Test: http/tests/security/xssAuditor/frameset-injection.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterStartToken):
        (WebCore::XSSAuditor::filterFrameToken):
        * html/parser/XSSAuditor.h:

2014-03-20  Brian Burg  <bburg@apple.com>

        Web Replay: fix some oversights in the replay backend
        https://bugs.webkit.org/show_bug.cgi?id=130435

        Reviewed by Andreas Kling.

        This functionality will be covered by tests in https://webkit.org/b/130145.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::playbackFinishedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::playbackFinished):
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForSegment):
        (WebCore::InspectorReplayAgent::playbackFinished):
        * inspector/InspectorReplayAgent.h: Add a playbackFinished event to Inspector
        instrumentation. This is fired by ReplayController when playback is cancelled or 
        playback of the final segment has completed.

        * replay/EventLoopInputDispatcher.cpp:
        (WebCore::EventLoopInputDispatcher::dispatchInputSoon): Fix wrong cast.
        (WebCore::EventLoopInputDispatcher::dispatchInput): Ensure that m_dispatching is
        false when m_running is false.
        * replay/EventLoopInputDispatcher.h: Distinguish 'dispaching' and 'running' in comments.
        (WebCore::EventLoopInputDispatcher::isRunning): Added.

        * replay/FunctorInputCursor.h: Since the base class InputCursor is RefCounted, the
        Functor subclass cannot be put into a unique_ptr. Add create() method instead.

        * replay/ReplayController.cpp:
        (WebCore::ReplayController::loadSegmentAtIndex): Renamed from loadSegment(). Callers
        now pass in the desired segment index rather than the segment itself. The index is
        necessary to properly reset m_position after the segment is loaded.

        (WebCore::ReplayController::startPlayback): Set the dispatcher's speed before run().
        (WebCore::ReplayController::pausePlayback): Only pause the dispatcher if it's running.
        (WebCore::ReplayController::cancelPlayback): Add playbackFinished instrumentation.
        (WebCore::ReplayController::replayToPosition):
        (WebCore::ReplayController::didDispatchFinalInput): If there are no more segments to load,
        manually adjust the final m_position and defer to cancelPlayback to unload the segment.
        * replay/ReplayController.h:
        * replay/ReplaySessionSegment.cpp:
        (WebCore::ReplaySessionSegment::createFunctorCursor):
        * replay/ReplaySessionSegment.h:

2014-03-20  Pratik Solanki  <psolanki@apple.com>

        [iOS] Get code to compile on older iOS versions
        https://bugs.webkit.org/show_bug.cgi?id=130142
        <rdar://problem/16302908>

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController WebCore::]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        * platform/mac/HTMLConverter.mm:
        (_dateForString):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        * platform/text/ios/LocalizedDateCache.mm:
        (WebCore::LocalizedDateCache::calculateMaximumWidth):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::LocaleMac):

2014-03-20  Simon Fraser  <simon.fraser@apple.com>

        Followup build fix: AnimationBase.h needs to be private because
        it's included by AnimationController.h.

        * WebCore.xcodeproj/project.pbxproj:

2014-03-20  Simon Fraser  <simon.fraser@apple.com>

        A completed fill-forwards animation should not disable overlap testing
        https://bugs.webkit.org/show_bug.cgi?id=130522
        <rdar://problem/15862395>

        Reviewed by Dean Jackson.
        
        Previously, if -webkit-transform was being keyframe-animated, and the
        animation had fill-forwards, then we would continue to think that the
        animation is running and turn off compositing overlap testing. This
        caused some sites to keep too much backing store around.
        
        Fix by having isRunning{Accelerated}AnimationOnRenderer take some flags
        so that more specific questions about the running state can be asked.
        For layer creation, keep using the same criteria as before (for now)
        which includes paused and fill-forwards animations. For overlap testing,
        don't include the fill-forwards test.

        Tests: compositing/animation/filling-animation-overlap-at-end.html
               compositing/animation/filling-animation-overlap.html
               compositing/animation/layer-for-filling-animation.html

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::fillingForwards):
        (WebCore::AnimationBase::inPausedState):
        (WebCore::AnimationBase::isAnimatingProperty):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::isRunningAnimationOnRenderer):
        (WebCore::AnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer):
        (WebCore::AnimationController::isRunningAnimationOnRenderer):
        (WebCore::AnimationController::isRunningAcceleratedAnimationOnRenderer):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::isAnimatingProperty):
        * page/animation/CompositeAnimation.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        (WebCore::RenderLayerCompositor::isRunningAcceleratedTransformAnimation):

2014-03-20  Dirk Schulze  <krit@webkit.org>

        Canvas methods clip/fill/stroke should not except 0 argument
        https://bugs.webkit.org/show_bug.cgi?id=130497

        Reviewed by Dean Jackson.

        Do not allow nullable argument for fill/stroke/clip.

        No new tests. Updated existing tests.

        * html/canvas/CanvasRenderingContext2D.idl:

2014-03-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Support MediaDocument when building with PLUGIN_PROXY_FOR_VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=130520

        Reviewed by Jer Noble.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Check the isVideoPluginProxyEnabled setting 
            when building with ENABLE_PLUGIN_PROXY_FOR_VIDEO.

2014-03-20  Mihai Tica  <mitica@adobe.com>

        [CSS Blending] Blending operation is not isolated when setting z-index on parent from javascript
        https://bugs.webkit.org/show_bug.cgi?id=129307

        Reviewed by Dean Jackson.

        Reimplement the logic behind isolating blend modes. The blending operation should be limited to the
        contents of the parent stacking context. The proposed solution implies adding logic in updateDescendantDependentFlags,
        to track child elements that have blending and create a transparency layer that triggers isolation.

        Tests: css3/compositing/blend-mode-background.html
               fast/repaint/blend-mode-isolate-stacking-context.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Remove old members, add new members to constructor.
        (WebCore::RenderLayer::updateBlendMode): Update parent stacking context isolation on blend mode change.
        (WebCore::RenderLayer::updateNonCompositedParentStackingContextHasBlendedChild):
        - Set m_hasBlendedElementInChildStackingContext for the non composited parent stacking context.
        (WebCore::RenderLayer::dirtyAncestorParentStackingContextHasBlendedElement):
        - Set flag so isolation should be considered in updateDescendantDependentFlags.
        (WebCore::RenderLayer::nonCompositedParentStackingContextHasBlendedChild):
        - Return whether the non composited parent stacking context isolates blending.
        (WebCore::RenderLayer::updateDescendantDependentFlags): Add logic for isolating blending.
        (WebCore::RenderLayer::addChild): Call to updateNonCompositedParentStackingContextHasBlendedChild if needed.
        (WebCore::RenderLayer::removeChild): Call to dirtyAncestorParentStackingContextHasBlendedElement if needed.
        (WebCore::RenderLayer::updateStackingContextsAfterStyleChange): Update isolation when a stacking context was set or unset.
        (WebCore::RenderLayer::styleChanged): Removed oldStyle parameter from updateBlendMode call.
         Update parent stacking context isolation on blend mode change.
        * rendering/RenderLayer.h:
        - Add members, getters and setters for tracking whether the element has a blended child:
            - m_hasBlendedElementInChildStackingContext
            - m_hasBlendedElementInChildStackingContextStatusDirty
        - Removed m_updateParentStackingContextShouldIsolateBlendingDirty (replaced with m_hasBlendedElementInChildStackingContextStatusDirty)
        - Removed m_isolatesBlending (replaced with m_hasBlendedElementInChildStackingContext)
        - Updated the isolatesBlending method to return true only when the element is a stacking context and has a blended child.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Removed layer.updateParentStackingContextShouldIsolateBlending call.

2014-03-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Do not compile ProxyResolverSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=130516

        Reviewed by Sergio Villar Senin.

        * PlatformGTK.cmake: Remove the file from the source list.

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

        Unreviewed, rolling out r165962.
        https://bugs.webkit.org/show_bug.cgi?id=130512

        It broke the build (Requested by Ossy on #webkit).

        Reverted changeset:

        "[EFL][GTK] Get CMake to find Freetype2 properly"
        https://bugs.webkit.org/show_bug.cgi?id=130150
        http://trac.webkit.org/changeset/165962

2014-03-20  Lorenzo Tilve  <ltilve@igalia.com>

        "input" event is not fired when changing a select element's value
        https://bugs.webkit.org/show_bug.cgi?id=117526

        Reviewed by Antti Koivisto.

        Add a call to dispatch input event when listbox or menulist
        values are modified.

        According to the spec: "When the user agent is to send select update
        notifications, queue a task to first fire a simple even that bubbles
        named input at the select element, and then fire a simple event that
        bubbles named change at the select element, using the user interaction
        task source as the task source."

        Tests: fast/forms/select/listbox-oninput-fired.html
               fast/forms/select/menulist-oninput-fired.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::dispatchChangeEventForMenuList):

2014-03-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] The height of a scrollable element flowed inside a scrollable region is not computed correctly
        https://bugs.webkit.org/show_bug.cgi?id=129487

        Reviewed by Andrei Bucur.

        When propagating the layout overflow from the flowed element up to the flow thread itself,
        the region's logical bottom padding and the element's logical bottom margin must be taken into consideration.
        However, if the flowed element has overflow, the overflow will be painted over the region's padding
        and the element's margin, in order to be compatible with the non-regions case.
        More info can be found here: http://lists.w3.org/Archives/Public/www-style/2014Jan/0089.html

        Tests: fast/regions/scrollable-region-content-size-horiz-bt.html
               fast/regions/scrollable-region-content-size-no-overflow-horiz-bt.html
               fast/regions/scrollable-region-content-size-no-overflow-vert-rl.html
               fast/regions/scrollable-region-content-size-no-overflow.html
               fast/regions/scrollable-region-content-size-relative.html
               fast/regions/scrollable-region-content-size-vert-rl.html
               fast/regions/scrollable-region-content-size-vertical-lr.html
               fast/regions/scrollable-region-content-size.html
               fast/regions/scrollable-region-scrollable-content.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::rectFlowPortionForBox):

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

        Subpixel rendering: Nested layers with subpixel accumulation paint to wrong position.
        https://bugs.webkit.org/show_bug.cgi?id=130153

        Reviewed by Simon Fraser.

        Subpixels (fractional device pixels here) can accumulate through nested layers. Subpixels
        need to be propagated through the layer tree so that painting coordinates match layout coordinates.

        Subpixel accumulation through nesting (absolute positioning, 2x display):
        non-compositing case:
        (nested boxes)  (layout pos) (norm.paint pos) (translate accumulation, subpixel accumulation, final paint pos)
        div -> top: 1.3px   1.3px     1.5px      1.5px 0.2px -> snapped 0.0px -> 1.5px
         div -> top: 1.3px   2.6px     2.5px      3.0px 0.4px -> snapped 0.5px -> 2.5px
          div -> top: 1.3px   3.9px     4.0px      4.5px 0.6px -> snapped 0.5px -> 4.0px
           div -> top: 1.3px   5.2px     5.0px      6.0px 0.8px -> snapped 1.0px -> 5.0px

        compositing case:
        (nested boxes)  (layout pos) (norm.paint pos) (device pixel offset + fractional offset, final pos)
        div -> top: 1.3px   1.3px      1.5px      1.0px + 0.3px -> snapped -> 1.5px
         div -> top: 1.3px   2.6px      2.5px      2.5px + 0.1px -> snapped -> 2.5px
          div -> top: 1.3px   3.9px      4.0px      3.5px + 0.4px -> snapped -> 4.0px
           div -> top: 1.3px   5.2px      5.0px      5.0px + 0.2px -> snapped -> 5.0px

        Tests: compositing/hidpi-nested-compositing-layers-with-subpixel-accumulation.html
               fast/layers/hidpi-nested-layers-with-subpixel-accumulation.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::devicePixelFractionFromRenderer):

2014-03-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get CMake to find Freetype2 properly
        https://bugs.webkit.org/show_bug.cgi?id=130150

        Reviewed by Csaba Osztrogonác.

        Newer versions of CMake are not able to find Freetype2 correctly.
        FindFreetype2.cmake checks for the version number in freetype.h header, since it seems that bug exists in
        freetype2 repo, because a completely different version number is found in freetype2.pc.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:

2014-03-20  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Refactor checking log channel state in MediaPlayerPrivateGStreamerBase.
        https://bugs.webkit.org/show_bug.cgi?id=130241

        Reviewed by Philippe Normand.

        The channel was passed around only to check its state. Cleaned this up
        by adding a method to check whether a log channel is enabled.

        * platform/Logging.cpp:
        (WebCore::isLogChannelEnabled):
        * platform/Logging.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):

2014-03-20  Lorenzo Tilve  <ltilve@igalia.com>

        Dispatch input event for Range element keyboard event
        https://bugs.webkit.org/show_bug.cgi?id=129929

        Reviewed by Kent Tamura.

        For any value update, dispatch both input and change event.
        Also removes extra dispatch change event, as event is dispatched
        from TextFieldInputType:setValue.

        Merged from Blink (patch by Habib Virji):
        https://src.chromium.org/viewvc/blink?revision=168558&view=revision

        Test: fast/forms/range/range-keyboard-oninput-event.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):

2014-03-20  Jinwoo Song  <jinwoo7.song@samsung.com>

        Refine BatteryStatus module
        https://bugs.webkit.org/show_bug.cgi?id=130495

        Reviewed by Andreas Kling.

        Small refinements:
         - Return PassRef instead of PassRefPtr in create method
         - Switched to nullptr instead of 0 where appropriate.
         - Removed unused function and header file.
         - Removed unnecessary empty lines.

        * Modules/battery/BatteryController.h:
        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::create): Make return passRef.
        * Modules/battery/BatteryManager.h:
        (WebCore::BatteryManager::batteryControllerDestroyed): Use nullptr.
        * Modules/battery/BatteryStatus.cpp:
        (WebCore::BatteryStatus::create): Make return passRef.
        * Modules/battery/BatteryStatus.h:
        * Modules/battery/NavigatorBattery.cpp:
        (WebCore::NavigatorBattery::webkitBattery): Remove batteryManager().
        * Modules/battery/NavigatorBattery.h:

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

        [iOS] Get code to compile on older iOS versions
        https://bugs.webkit.org/show_bug.cgi?id=130142
        <rdar://problem/16302908>

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController WebCore::]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        * platform/mac/HTMLConverter.mm:
        (_dateForString):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        * platform/text/ios/LocalizedDateCache.mm:
        (WebCore::LocalizedDateCache::calculateMaximumWidth):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::LocaleMac):

2014-03-19  Byungseon Shin  <sun.shin@lge.com>

        Fix "WEBKIT_WEBGL_compressed_texture_pvrtc" extension support
        https://bugs.webkit.org/show_bug.cgi?id=130292

        Reviewed by Dean Jackson.

        WebGLRenderingContext::getExtension was not returning WEBGL_compressed_texture_pvrtc extension.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):

2014-03-19  Brent Fulgham  <bfulgham@apple.com>

        Merge Misc. WebVTT Updates from Blink.
        https://bugs.webkit.org/show_bug.cgi?id=130491

        Reviewed by Eric Carlson.

        Test: media/track/track-webvtt-tc030-interspersed-non-cue.html

        Merged from Blink (patch by vcarbune@chromium.org):
        https://chromium.googlesource.com/chromium/blink/+/fb62b2b54944bd19026192c049a1db250756fc12
        http://crbug.com/40323003
        https://chromium.googlesource.com/chromium/blink/+/29176fb0b394a97e85f4dabc07e18329f3ceae41
        http://crbug.com/54463002
        https://chromium.googlesource.com/chromium/blink/+/29476f839a08cb17c5a3fc713f7e454e7cea9c60
        http://crbug.com/55853002
        https://chromium.googlesource.com/chromium/blink/+/ba2378ef873e786cf2937034e012669cdd37dfe8
        http://crbug.com/65343003
        https://chromium.googlesource.com/chromium/blink/+/1915b9aa1bba45aebf28531b40ae627ecf9a3d59
        http://crbug.com/62833005
        https://chromium.googlesource.com/chromium/blink/+/ea46dbd0f1f29779a1cd4f59b19361b803f09a9b
        http://crbug.com/64273013
        https://chromium.googlesource.com/chromium/blink/+/9eb4bb6b627357bb94d66386a4123ec004cccfc4
        http://crbug.com/101513002
        https://chromium.googlesource.com/chromium/blink/+/192a843b32eafb77bf92c50ec50d334ba935028a
        http://crbug.com/102403002
        https://chromium.googlesource.com/chromium/blink/+/15f9efcc952fcf73184e28fb9db79633c1fa6653
        http://crbug.com/104443002
        https://chromium.googlesource.com/chromium/blink/+/74fd66b451a464683f7cb748855b1740a54b2c16
        http://crbug.com/75243004

        * html/track/TextTrackRegion.cpp:
        (WebCore::TextTrackRegion::parseSettingValue):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::markFutureAndPastNodes):
        (WebCore::VTTCue::setCueSettings):
        * html/track/WebVTTParser.cpp:
        (WebCore::scanDigits):
        (WebCore::WebVTTParser::collectDigitsToInt):
        (WebCore::WebVTTParser::parseFloatPercentageValue):
        (WebCore::WebVTTParser::parseBytes):
        (WebCore::WebVTTParser::collectMetadataHeader):
        (WebCore::WebVTTParser::collectTimingsAndSettings):
        (WebCore::WebVTTParser::createDocumentFragmentFromCueText):
        (WebCore::WebVTTParser::createNewCue):
        (WebCore::WebVTTParser::createNewRegion):
        (WebCore::WebVTTParser::collectTimeStamp):
        (WebCore::tokenToNodeType):
        (WebCore::WebVTTParser::constructTreeFromToken):
        * html/track/WebVTTParser.h:
        * html/track/WebVTTToken.h:
        (WebCore::WebVTTToken::name):
        (WebCore::WebVTTToken::characters):
        (WebCore::WebVTTToken::appendToCharacter):
        (WebCore::WebVTTToken::addNewClass):
        (WebCore::WebVTTToken::classes):
        (WebCore::WebVTTToken::addNewAnnotation):
        (WebCore::WebVTTToken::annotation):
        * html/track/WebVTTTokenizer.cpp:
        (WebCore::equalLiteral):
        (WebCore::WebVTTTokenizer::WebVTTTokenizer):
        (WebCore::WebVTTTokenizer::nextToken):
        * html/track/WebVTTTokenizer.h:

2014-03-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        GC timer should intelligently choose between EdenCollections and FullCollections
        https://bugs.webkit.org/show_bug.cgi?id=128261

        Reviewed by Geoffrey Garen.

        No new tests.

        Updated WebSafeGCActivityCallbacks for both Eden and Full timers.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):
        * platform/ios/WebSafeGCActivityCallbackIOS.h:

2014-03-19  Andy Estes  <aestes@apple.com>

        Fix the iOS build after r165917.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-03-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165926.
        https://bugs.webkit.org/show_bug.cgi?id=130488

        broke the iOS build (Requested by estes on #webkit).

        Reverted changeset:

        "GC timer should intelligently choose between EdenCollections
        and FullCollections"
        https://bugs.webkit.org/show_bug.cgi?id=128261
        http://trac.webkit.org/changeset/165926

2014-03-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165929.
        https://bugs.webkit.org/show_bug.cgi?id=130487

        in order to roll out r165926 (Requested by estes on #webkit).

        Reverted changeset:

        http://trac.webkit.org/changeset/165929

2014-03-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Build fix for iOS after r165926

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):
        * platform/ios/WebSafeGCActivityCallbackIOS.h:

2014-03-19  Eric Carlson  <eric.carlson@apple.com>

        Allow media engine to update HTMLMediaElement state when playing to external device
        https://bugs.webkit.org/show_bug.cgi?id=130480

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.h: Add mediaPlayerHandlePlaybackCommand.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::handlePlaybackCommand): New.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerHandlePlaybackCommand):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged): Send Play and Pause commands when
            playing to an external device.

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

        Implement isPointInPath and isPointInStroke with Path2D argument
        https://bugs.webkit.org/show_bug.cgi?id=130473

        Reviewed by Dean Jackson.

        Implement isPointInPath and isPointInStroke for 2D Canvas contxts
        with Path2D argument.


        Tests: fast/canvas/canvas-path-isPointInPath.html
               fast/canvas/canvas-path-isPointInStroke.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::isPointInStroke):
        (WebCore::CanvasRenderingContext2D::isPointInPathInternal):
        (WebCore::CanvasRenderingContext2D::isPointInStrokeInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2014-03-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        GC timer should intelligently choose between EdenCollections and FullCollections
        https://bugs.webkit.org/show_bug.cgi?id=128261

        Reviewed by Geoffrey Garen.

        No new tests.

        * platform/ios/WebSafeGCActivityCallbackIOS.h: Update WebSafeGCActivityCallback
        appropriately for the introduction of another type of GCActivityCallback.

2014-03-18  Mark Hahnenberg  <mhahnenberg@apple.com>

        GC timer should intelligently choose between EdenCollections and FullCollections
        https://bugs.webkit.org/show_bug.cgi?id=128261

        Reviewed by Geoffrey Garen.

        No new tests.

        Updated WebSafeGCActivityCallbacks for both Eden and Full timers.

        * platform/ios/WebSafeGCActivityCallbackIOS.h:

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

        Crash with long selector list
        https://bugs.webkit.org/show_bug.cgi?id=123006

        Reviewed by Andreas Kling.

        Test: fast/css/long-selector-list-crash.html

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore::CSSSelectorList::adoptSelectorVector):
        (WebCore::CSSSelectorList::operator=):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::create):

            Add a bunch of asserts.

        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount):
        
            This could produce a zero-length selector list.

2014-03-19  Andreas Kling  <akling@apple.com>

        Rebaseline bindings tests.

        * bindings/scripts/test/JS/*:

2014-03-04  Jer Noble  <jer.noble@apple.com>

        [iOS][MediaControls] Reverse-pinching using the built-in controls should enter full screen
        https://bugs.webkit.org/show_bug.cgi?id=129707

        Reviewed by Eric Carlson.

        The default controls on iOS should respond to a pinch gesture by entering fullscreen. Add a gesture
        event listener, and enter full screen if the user does a quick (>2 velocity) reverse (>1.25 scale) pinch.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createBase):
        (ControllerIOS.prototype.handlePlayButtonTouchEnd):
        (ControllerIOS.prototype.handleBaseGestureStart):
        (ControllerIOS.prototype.handleBaseGestureChange):
        (ControllerIOS.prototype.handleBaseGestureEnd):

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

        REGRESSION(r156316): Scrollbar on a large document is broken
        https://bugs.webkit.org/show_bug.cgi?id=130474
        <rdar://problem/16371523>

        Reviewed by Anders Carlsson.

        The bug was caused by updateArrowPlacement() doing the work even though Scrollbar Overlay API is available.
        Prior to r156316, this function exited early:
        http://trac.webkit.org/browser/trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm?rev=156315#L147

        Fixed the bug by deleting updateArrowPlacement() entirely.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::preferencesChanged):

2014-03-19  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Query whether decoder support exists before creating a new MediaKeys object.
        https://bugs.webkit.org/show_bug.cgi?id=130459

        Reviewed by Eric Carlson.

        * WebCore.exp.in: Export the new WCSI method.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsKeySystem): Bail early if we have no decoder support.
        * platform/mac/WebCoreSystemInterface.h: Provide a WCSI wrapper for WKSI.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2014-03-19  Eric Carlson  <eric.carlson@apple.com>

        Make Remote Control commands testable
        https://bugs.webkit.org/show_bug.cgi?id=130358

        Reviewed by Jer Noble.

        Test: media/video-remote-control-playpause.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Call session->clientWillPausePlayback.
        (WebCore::HTMLMediaElement::didReceiveRemoteControlCommand): Log the command.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSessionClient::mediaSessionTitle): Move from header file.
        (WebCore::MediaSessionClient::mediaSessionDuration): Ditto.
        (WebCore::MediaSessionClient::mediaSessionCurrentTime): Ditto.
        * platform/audio/MediaSession.h:

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Get rid of m_activeSession.
        (WebCore::MediaSessionManager::removeSession): No need to clear m_activeSession because 
            we use the m_sessions vector.
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): setCurrentSession takes a 
            MediaSession&.
        (WebCore::MediaSessionManager::sessionWillEndPlayback): Keep m_sessions sorted so playing
            sessions are before paused sessions.
        (WebCore::MediaSessionManager::setCurrentSession): Move the session that is beginning to
            play to the head of m_sessions.
        (WebCore::MediaSessionManager::currentSession): Return m_sessions[0] or nullptr.
        (WebCore::MediaSessionManager::didReceiveRemoteControlCommand):
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.mm: Include MediaPlayer.h.

        * testing/Internals.cpp:
        (WebCore::Internals::postRemoteControlCommand): New.
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Improving webkitGetUserMedia error handling and error messages
        https://bugs.webkit.org/show_bug.cgi?id=130452

        Reviewed by Eric Carlson.

        Checking if first argument of webkitGetUserMedia is a valid Dictionary. If not, throw an exception with a
        clearer message of the error.

        Test updated.

        * Modules/mediastream/NavigatorMediaStream.idl:
        * UseJSC.cmake:
        * bindings/js/JSNavigatorCustom.cpp: Added.

2014-03-19  Andreas Kling  <akling@apple.com>

        JSC bindings should use the passed-in global object for wrapper caching.
        <https://webkit.org/b/130458>

        Take a shorter path to the DOMWrapperWorld by using the passed-in
        global object instead of getting the lexical global from ExecState.
        Removed an old FIXME that no longer applies since JSObjects can
        always find the right global object these days.

        Reviewed by Geoff Garen.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createWrapper):
        (WebCore::wrap):
        (WebCore::getExistingWrapper):
        (WebCore::createNewWrapper):
        (WebCore::toJS):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        (WebCore::JSHTMLTemplateElement::content):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSNodeCustom.h:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSTrackCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::setTimeout):
        (WebCore::JSWorkerGlobalScope::setInterval):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2014-03-19  Benjamin Poulain  <bpoulain@apple.com>

        Page::setPageScaleFactor should not force the scroll view position when using delegatesScrolling()
        https://bugs.webkit.org/show_bug.cgi?id=130429

        Reviewed by Simon Fraser.

        When setting the same scale mutliple time (for example on load), Page was asking the top scrollview
        to scroll to the origin. This is bogus since the scroll view is driving Page::setDeviceScaleFactor,
        not the other way around.

        Simon fixed the general case in http://trac.webkit.org/changeset/165652/trunk/Source/WebCore/page/Page.cpp
        but this branch was still scrolling content.

        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):

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

        Filter out editable services from image menu for non-contenteditable images
        <rdar://problem/16319645> and https://bugs.webkit.org/show_bug.cgi?id=130437

        Reviewed by Tim Horton.

        * WebCore.exp.in:

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

        Implement method addPath for Path2D
        https://bugs.webkit.org/show_bug.cgi?id=130461

        Reviewed by Dean Jackson.

        Add support for the Path2D method addPath. The method allows
        to append and existing Path2D object to another one. It can be
        combined with a transformation matrix SVGMatrix.

        Test: fast/canvas/canvas-path-addPath.html

        * html/canvas/DOMPath.h: Add new method addPath().
        (WebCore::DOMPath::addPath):
        * html/canvas/DOMPath.idl:
        * platform/graphics/Path.h: Add support for appending paths.
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addPath):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addPath):
        * platform/graphics/wince/PathWinCE.cpp:
        (WebCore::Path::addPath):

2014-03-19  Yongjun Zhang  <yongjun_zhang@apple.com>

        [iOS] WebKit2 Quicklook.
        https://bugs.webkit.org/show_bug.cgi?id=130360

        Reviewed by Tim Horton.

        Since ResourceLoaders using WebKit2 network process don't have ResourceHandle any more, we
        need to make it possible to create QuickLookHandle from ResourceLoader.

        * WebCore.exp.in: Make some QuickLookHandle methods visible from WebKit2.
        * loader/ResourceLoader.h: Add m_quickLookHandle data member to ResourceLoader.
        (WebCore::ResourceLoader::quickLookHandle):
        (WebCore::ResourceLoader::setQuickLookHandle):
        * platform/network/ios/QuickLook.h: Add a new method to create QuickLookHandle from ResourceLoader.
        * platform/network/ios/QuickLook.mm:
        (WebCore::QuickLookHandle::create):

2014-03-19  Brent Fulgham  <bfulgham@apple.com>

        Fix cue rendering test and include support for left/right alignment
        https://bugs.webkit.org/show_bug.cgi?id=130406

        Reviewed by Eric Carlson.

        Merged from Blink (patch by vcarbune@chromium.org):
        https://chromium.googlesource.com/chromium/blink/+/e695703cb603421c741e59a557a7989113c13b94
        http://crbug.com/25155003

        No new tests. Covered by media/track/track-cue-rendering-snap-to-lines-not-set.html.

        * html/track/VTTCue.cpp:
        (WebCore::leftKeyword): Added.
        (WebCore::rightKeyword): Added.
        (WebCore::VTTCueBox::applyCSSProperties): Added.
        (WebCore::VTTCue::VTTCue):
        (WebCore::VTTCue::align): Handle left/right alignment.
        (WebCore::VTTCue::setAlign): Ditto.
        (WebCore::VTTCue::calculateDisplayParameters): Refactored and revised for left/right tokens.
        (WebCore::VTTCue::setCueSettings): Ditto.
        (WebCore::VTTCue::getCSSAlignment): Added.
        (WebCore::VTTCue::getCSSWritingMode): Added.
        * html/track/VTTCue.h:

2014-03-18  Anders Carlsson  <andersca@apple.com>

        Add new functionality that will be required by the history item decoding
        https://bugs.webkit.org/show_bug.cgi?id=130433

        Reviewed by Sam Weinig.

        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeConditionalObject):

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::parseToDateComponents):
        Missing a StringView().

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

        Tighten ElementRuleCollector::m_matchedRuleList typing
        https://bugs.webkit.org/show_bug.cgi?id=130446

        Reviewed by Anders Carlsson.

        StyleRuleBase -> StyleRule.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchedRuleList):
        * css/ElementRuleCollector.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleRulesForElement):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        * css/StyleResolver.h:
        * editing/EditingStyle.cpp:
        (WebCore::styleFromMatchedRulesForElement):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/InspectorCSSAgent.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):

2014-03-19  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] An unsplittable box is always displayed in a single region
        https://bugs.webkit.org/show_bug.cgi?id=130451

        Reviewed by Andrei Bucur.

        Add an ASSERT stating that an unsplittable box region range always contains 1 region.
        No new functionality, no new tests.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::getRegionRangeForBox):

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

        Subpixel rendering: Transform origin is miscalculated when RenderLayer's
        offsetfromRenderer has device pixel fraction value.
        https://bugs.webkit.org/show_bug.cgi?id=129859

        Reviewed by Simon Fraser.

        We need to calculate the transformed origin using the painting coordinates to produce
        pixel precise result.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::computeTransformOriginForPainting):
        * rendering/RenderLayerBacking.h:

2014-03-19  Claudio Saavedra  <csaavedra@igalia.com>

        [GStreamer] Clean timeout source ids
        https://bugs.webkit.org/show_bug.cgi?id=130450

        Reviewed by Philippe Normand.

        Sources IDs need to be cleaned up if the callback removes the
        source, otherwise we'll be attempting to remove an empty source at
        some point.

        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaVideoSrcStart): Clean the source id.
        (webKitMediaAudioSrcStart): Ditto.
        (webKitMediaVideoSrcSeekMainCb): Ditto.
        (webKitMediaAudioSrcSeekMainCb): Ditto.

2014-03-19  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Compute region ranges for children of inline blocks
        https://bugs.webkit.org/show_bug.cgi?id=130392

        Reviewed by Andrei Bucur.

        Extend the region ranges computation for children of inline blocks.
        When we cannot retrieve the region range for a box using cached information,
        either from region range map or from the region cached on the RootInlineBox,
        try to find the top most unsplittable box up to the flow thread boundary.
        If we find such unsplittable box and the box has a region range, then return
        this range.

        Before this patch, method getRegionRangeForBox did not return true/false
        if it was able to retrieve the range and the caller checked the returned
        region values. I modified the method to return true if we were able to compute
        the range.

        Tests: fast/regions/inline-block-inline-children-flowed-in-regions.html
               fast/regions/inline-blocks-dyn-enlarged-regions.html
               fast/regions/inline-blocks-dyn-shrunk-regions.html
               fast/regions/inline-blocks-in-two-regions.html

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRendererFragments):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clampToStartAndEndRegions):
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::getRegionRangeForBoxFromCachedInfo):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        (WebCore::RenderFlowThread::addRegionsVisualEffectOverflow):
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsLayoutOverflow):
        (WebCore::RenderFlowThread::addRegionsVisualOverflow):
        (WebCore::RenderFlowThread::clearRegionsOverflow):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::fragmentFromAbsolutePointAndBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::locateFlowThreadContainingBlock):
        Make sure we return the right render flow thread in the case of
        region-based multicolumn inside named flows.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::rectFlowPortionForBox):

2014-03-19  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL] vibration/cancelVibration-during-pattern-vibrating.html is failing after r165598
        https://bugs.webkit.org/show_bug.cgi?id=130333

        Reviewed by Gyuyoung Kim.

        Added setting m_state when calling Vibration::vibrate. It was missing after
        refactoring Vibration (r165598).

        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::vibrate):

2014-03-19  Sam Weinig  <sam@webkit.org>

        Rewrite WebHTMLConverter::_colorForNode in C++
        https://bugs.webkit.org/show_bug.cgi?id=130443

        Reviewed by Andreas Kling.

        * platform/mac/HTMLConverter.mm:
        (_platformColor):
        Rename from _colorForRGBColor and simplify to just do the platform conversion.

        (normalizedColor):
        Extract normalization out of _colorForRGBColor and remove cases that are impossible to hit
        due to us only ever using the device color space.

        (HTMLConverterCaches::colorPropertyValueForNode):
        (-[WebHTMLConverter _colorForNode:property:]):
        Convert to C++.

        (-[WebHTMLConverter dealloc]):
        (-[WebHTMLConverter init]):
        Remove caches, we already cache in ColorMac.

2014-03-18  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Strange layout for content with region breaks
        https://bugs.webkit.org/show_bug.cgi?id=121318

        Reviewed by Mihnea Ovidenie.

        When break-inside: avoid is used on an element, the implementation tries to
        force it inside a single fragmentation container even though the descendants
        of the element specify forced breaks. This leads to unexpected results and
        unstable layout.

        The change extends the definition of unsplittable elements for flow threads
        using the same conditions found inside RenderBlockFlow::adjustForUnsplittableChild.
        This change forces elements that require break avoidance to have a single region
        in the region range. As a result, forced breaks have no effect inside them.

        It should be noted this may not the behavior defined by the CSS3 Fragmentation spec.
        From my understanding of the text, forced breaks override any avoidance specified
        by ancestor elements. However, implementing this is a larger change that will require
        a fundamental new approach in handling break avoidance. This patch just brings
        consistency to the API.

        Test: fast/regions/forced-break-inside-avoid-break.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation):
        (WebCore::RenderBlock::computeRegionRangeForBoxChild):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild): Move the avoidance conditions inside
        a helper method RenderBlock::childBoxIsUnsplittableForFragmentation.

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

        AX: Not able to use arrow keys to read text with VoiceOver before selection is set someplace (anyplace).
        https://bugs.webkit.org/show_bug.cgi?id=130250

        Reviewed by Chris Fleizach.

        If initial selection isn't set when we handle selection movement for accessibility, we need to set it. If we don't, using arrow
        keys to read text with VoiceOver doesn't work as expected. Things will only start working after the user holds shift and arrows
        around to select any arbitrary thing to force selection to get set. This logic handles that special case more gracefully.

        Test: platform/mac/accessibility/selection-initial.html

        * page/EventHandler.cpp:
        (WebCore::handleKeyboardSelectionMovement):
        (WebCore::EventHandler::handleKeyboardSelectionMovementForAccessibility):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2014-03-18  Brent Fulgham  <bfulgham@apple.com>

        TextTrackRegion Not Implemented
        https://bugs.webkit.org/show_bug.cgi?id=116546

        Reviewed by Eric Carlson.

        Merged from Blink (patch by vcarbune@chromium.org):
        https://chromium.googlesource.com/chromium/blink/+/4940f89a087fea5b5ea628e98d0b355d398a9eea
        http://crbug.com/25798003

        Tests: media/track/regions-webvtt/text-track-region-display.html
               media/track/regions-webvtt/text-track-region-dom-layout.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/TextTrack.cpp:
        * html/track/TextTrack.h:
        * html/track/TextTrackRegion.cpp:
        (WebCore::TextTrackRegion::TextTrackRegion):
        (WebCore::TextTrackRegion::appendTextTrackCueBox):
        * html/track/TextTrackRegion.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::VTTCue):
        (WebCore::VTTCue::notifyRegionWhenRemovingDisplayTree):
        (WebCore::VTTCue::removeDisplayTree):
        * html/track/VTTCue.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseBytes):
        (WebCore::WebVTTParser::collectMetadataHeader):
        * html/track/WebVTTParser.h:

2014-03-18  Andreas Kling  <akling@apple.com>

        Share MemoryPressureHandler::releaseMemory() between platforms.
        <https://webkit.org/b/130416>

        Move the code that scours WebKit for things we can free up right now
        to the common part of MemoryPressureHandler. This will enable other
        platforms to do the same thing under pressure.

        There's now also a platformReleaseMemory() where platform-specific
        pressure relief stuff can go.

        Reviewed by Antti Koivisto.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        * platform/MemoryPressureHandler.h:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        (WebCore::MemoryPressureHandler::platformReleaseMemory):

2014-03-18  Dean Jackson  <dino@apple.com>

        [WebGL] Destroy EAGLContext's backing store
        https://bugs.webkit.org/show_bug.cgi?id=130439
        <rdar://problem/16295217>

        Reviewed by Tim Horton.

        When a GraphicsContext3D is being destroyed, we should
        also remove any EAGLContext backing store.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):

2014-03-18  Tim Horton  <timothy_horton@apple.com>

        [iOS][WebKit2] Mark layer contents as being opaque if they are
        https://bugs.webkit.org/show_bug.cgi?id=130427
        <rdar://problem/15540434>

        Reviewed by Simon Fraser.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::paintsOpaquelyAtNonIntegralScales):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsOpaquelyAtNonIntegralScales):
        * rendering/RenderLayerBacking.h:
        r159463 stopped us from setting layers opaque if they were being painted
        at non-integral scale. This makes sense for compositing layers, which
        are painted by arbitrary elements, but the main frame's RenderView
        will always paint its entire contents. To restore the opaque contents
        optimization to the main frame's tiles, don't de-opaquify layers
        belonging to the main frame's RenderView.

2014-03-18  Jeffrey Pfau  <jpfau@apple.com>

        Unify <media> element callback registration and unregistration
        https://bugs.webkit.org/show_bug.cgi?id=130417

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::didMoveToNewDocument):
        * html/HTMLMediaElement.h:

2014-03-18  Jer Noble  <jer.noble@apple.com>

        MediaDocument should set a max-width on its <video> element.
        https://bugs.webkit.org/show_bug.cgi?id=114691

        Reviewed by Eric Carlson.

        Set a style attribute containing max-width:100% and max-height:100% so that large videos
        are entirely visible within the browser window bounds.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2014-03-18  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Fix layering violation in RTCStatsRequest
        https://bugs.webkit.org/show_bug.cgi?id=130426

        Reviewed by Eric Carlson.

        RTCStatsRequest::track() should return a MediaStreamTrackPrivate*.

        No new tests needed.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats):
        * Modules/mediastream/RTCStatsRequestImpl.cpp:
        (WebCore::RTCStatsRequestImpl::create):
        (WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl):
        (WebCore::RTCStatsRequestImpl::track):
        * Modules/mediastream/RTCStatsRequestImpl.h:
        * platform/mediastream/RTCStatsRequest.h:

2014-03-18  Anders Carlsson  <andersca@apple.com>

        Fix a trivial FIXME
        https://bugs.webkit.org/show_bug.cgi?id=130432

        Reviewed by Tim Horton.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):

2014-03-18  Anders Carlsson  <andersca@apple.com>

        Begin cleaning up KeyedDecoder and KeyedEncoder
        https://bugs.webkit.org/show_bug.cgi?id=130431

        Reviewed by Tim Horton.

        Rename KeyedDecoder::decodeVerifiedEnum to decodeEnum to match the encode function,
        and sort the decode functions to be in the same logical order as the encode functions.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::decode):
        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeEnum):

2014-03-18  Darin Adler  <darin@apple.com>

        Reduce use of deprecatedCharacters in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=130318

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPathLexer::IDBKeyPathLexer): Use StringView for parsing.
        (WebCore::IDBKeyPathLexer::lex): Ditto.
        (WebCore::IDBKeyPathLexer::lexIdentifier): Ditto.

        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeString): Index directly into string instead of
        using deprecatedCharacters.

        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSubprotocol): Use
        StringView::getCharactersWithUpconvert.
        (WebCore::ThreadableWebSocketChannelClientWrapper::setExtensions): Ditto.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        Use operator NSString * instead of explicitly creating an NSString.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndianUInt16): Added.
        (WebCore::CloneSerializer::serialize): Added a separate code path for 8-bit strings.
        (WebCore::CloneSerializer::write): Ditto.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        Use operator NSString * instead of explicitly creating an NSString.

        * dom/Document.cpp:
        (WebCore::Document::parseQualifiedName): Index directly into string instead of
        using deprecatedCharacters.
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace): Ditto.
        * editing/SmartReplace.cpp:
        (WebCore::addAllCodePoints): Ditto.
        (WebCore::getSmartSet): Use StringView::upconvertedCharacters.

        * editing/TextIterator.cpp:
        (WebCore::foldQuoteMarksAndSoftHyphens): Changed to return a value so it can be
        used in initialization rather than assignment.
        (WebCore::SearchBuffer::SearchBuffer): Use StringView::upconvertedCharacters.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Index directly into string instead of using
        deprecatedCharacters.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter): Ditto.
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph): Ditto.
        (WebCore::endOfParagraph): Ditto.

        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append): Pass a StringView to TextEncoding::encode.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::parseToDateComponents): Use
        StringView::upconvertedCharacters.

        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString): Pass a StringView to TextEncoding::encode.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeSpaces): Use StringView::getCharactersWithUpconvert.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces): Use characters16 for a code path
        that already handled 8-bit characters separately.
        (WebCore::parseHTMLNonNegativeInteger): Ditto.
        (WebCore::parseDescriptors): Added an 8-bit code path.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters): Index directly into
        string instead of using deprecatedCharacters.
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty): Ditto.
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty): Ditto.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::isSourceListNone): Use StringView::upconvertedCharacters.
        (WebCore::CSPSourceList::parse): Ditto.
        (WebCore::NonceDirective::parse): Ditto.
        (WebCore::MediaListDirective::parse): Ditto.
        (WebCore::CSPDirectiveList::parse): Ditto.
        (WebCore::CSPDirectiveList::parseReportURI): Ditto.
        (WebCore::CSPDirectiveList::parseReflectedXSS): Ditto.
        (WebCore::ContentSecurityPolicy::didReceiveHeader): Ditto.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame): Pass a StringView into
        TextEncoding::encode.
        (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto.

        * platform/Length.cpp:
        (WebCore::countCharacter): Index directly into string instead of using
        deprecatedCharacters. Also changed to take a StringImpl&.
        (WebCore::newCoordsArray): Ditto. Call countCharacter the new way, and
        use StringView::upconvertedCharacters.
        (WebCore::newLengthArray): Ditto.

        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash): Use characters16 for the 16-bit path.
        Also removed unused visitedURL function.
        * platform/LinkHash.h: Removed unused visitedURL function.

        * platform/SharedBuffer.cpp:
        (WebCore::utf8Buffer): Added an 8-bit code path.
        * platform/URL.cpp:
        (WebCore::URL::port): Ditto.
        (WebCore::encodeRelativeString): Use StringView to call TextEncoding::encode.

        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor): Use characters16 in the 16-bit path.
        (WebCore::Color::Color): Ditto.

        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::harfBuzzGetGlyph): Use StringView to call TextEncoding::encode.

        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer): Use StringView::getCharactersWithUpconvert.
        (WebCore::rightTruncateToBuffer): Ditto.
        (WebCore::rightClipToCharacterBuffer): Ditto.
        (WebCore::rightClipToWordBuffer): Ditto.
        (WebCore::leftTruncateToBuffer): Ditto.
        (WebCore::truncateString): Ditto.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Use characters16 in the 16-bit code path.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        Use StringView::upconvertedCharacters.

        * platform/network/DataURL.cpp:
        (WebCore::handleDataURL): Use StringView to call TextEncoding::encode.
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader): Ditto.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindBlob): Use StringView::upconvertedCharacters.
        (WebCore::SQLiteStatement::bindText): Ditto.

        * platform/text/DecodeEscapeSequences.h:
        (WebCore::Unicode16BitEscapeSequence::decodeRun): Changed to take a StringView.
        (WebCore::URLEscapeSequence::decodeRun): Ditto.
        (WebCore::decodeEscapeSequences): Pass StringView to decodeRun.

        * platform/text/Hyphenation.cpp:
        (WebCore::lastHyphenLocation): Take a StringView.
        * platform/text/Hyphenation.h: Make lastHyphenLocation take a StringView.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::initializeIteratorWithRules): Use StringView::upconvertedCharacters.

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode): Use StringView::upconvertedCharacters.
        Change argument type to StringView.
        * platform/text/TextEncoding.h: Ditto.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName): Use characters16 for the 16-bit path.

        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::lastHyphenLocation): Use StringView::text.createCFStringWithoutCopying.
        Change argument type to StringView.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun): Use characters16 for the 16-bit path.

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width): Removed check for null characters pointer,
        since the pointer will never be null, and even if it was there would be no need
        for an early exit.

        * rendering/RenderText.cpp:
        (WebCore::maxWordFragmentWidth): Take a StringView.
        (WebCore::RenderText::computePreferredLogicalWidths): Pass in a StringView.
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::tryHyphenating): Ditto.

        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath): Use
        StringView::upconvertedCharacters.

        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::SVGTextMetrics): Use String::substring.

        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::setValueAsString): Use StringView::upconvertedCharacters.
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::parsePoint): Ditto.
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines): Ditto.
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox): Ditto.

        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection): Pass StringView to
        createStringWIthMirroredCharacters.
        (WebCore::createStringWithMirroredCharacters): Changed to use StringView and
        use indexing into that instead of a characters pointer.

        * svg/SVGFontData.h: Removed createStringWithMirroredCharacters member function,
        since it has nothing to do with the SVGFontData object. Now it's just a private
        helper function in the SVGFontData.cpp source file.

        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache): Index into the string
        instead of using deprecatedCharacters.

        * svg/SVGGlyphMap.h:
        (WebCore::SVGGlyphMap::addGlyph): Use StringView::upconvertedCharacters.
        (WebCore::SVGGlyphMap::collectGlyphsForString): Ditto.
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::parseAttribute): Ditto.
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString): Ditto.
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse): Ditto.
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse): Ditto.
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseNumberFromString): Ditto.
        (WebCore::parseNumberOptionalNumber): Ditto.
        (WebCore::parseRect): Ditto.
        (WebCore::pointsListFromSVGData): Ditto.
        (WebCore::parseGlyphName): Ditto.
        (WebCore::parseKerningUnicodeString): Ditto.
        (WebCore::parseDelimitedString): Ditto.
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parse): Ditto.
        * svg/SVGStringList.cpp:
        (WebCore::SVGStringList::parse): Ditto.
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::parse): Ditto.
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformType): Ditto.
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec): Ditto.
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::parseAttribute): Ditto.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): Pass a StringView to TextEncoding::encode.

        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString): Use StringView::upconvertedCharacters.

2014-03-18  Bem Jones-Bey  <bjonesbe@adobe.com>

        LayoutBox is a terrible name
        https://bugs.webkit.org/show_bug.cgi?id=130351

        Reviewed by Simon Fraser.

        Rename LayoutBox to CSSBoxType. Also rename the functions and methods
        that mention "LayoutBox" to something that makes sense for each
        specific situation.

        No new tests, no behavior change.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::CSSBasicShapeInset::cssText):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::referenceBox):
        (WebCore::CSSBasicShape::setReferenceBox):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator CSSBoxType):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * rendering/ClipPathOperation.h:
        (WebCore::ShapeClipPathOperation::setReferenceBox):
        (WebCore::ShapeClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::create):
        (WebCore::BoxClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::BoxClipPathOperation):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::referenceBox):
        (WebCore::BasicShape::setReferenceBox):
        (WebCore::BasicShape::BasicShape):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createShapeValue):
        (WebCore::ShapeValue::createBoxShapeValue):
        (WebCore::ShapeValue::cssBox):
        (WebCore::ShapeValue::ShapeValue):

2014-03-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r162334): RenderTableCol::styleDidChange uses out-of-date table information
        https://bugs.webkit.org/show_bug.cgi?id=129561

        Reviewed by Antti Koivisto.

        Test: fast/table/update-col-width-and-remove-table-cell-crash.html

        Fixes an issue where a table column or table column group may query an out-
        of-date model of its associated table as part of its process to propagate
        style changes to affected table cells.

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange): Ensure that all sections in the table
        are up-to-date before querying for a table cell.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::recalcCells): Update comment to read well. In
        particular, remove the reference to RenderTableSection::fillRowsWithDefaultStartingAtPosition()
        as this function was removed in <http://trac.webkit.org/changeset/99919>.
        (WebCore::RenderTableSection::setNeedsCellRecalc): Clear the grid preemptively to
        to ensure that accessors cannot access stale data. We'll build the grid again
        in RenderTableSection::recalcCells().
        (WebCore::RenderTableSection::numColumns): Add ASSERT(!m_needsCellRecalc) to assert
        that the grid cells are up-to-date. That is, we don't need to calculate them again.
        * rendering/RenderTableSection.h: Add ASSERT(!m_needsCellRecalc) or call recalcCellsIfNeeded()
        before accessing the grid to ensure that it's up-to-date.

2014-03-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r163560): ASSERTION FAILED: childrenInline() in WebCore::RenderSVGText::layout
        https://bugs.webkit.org/show_bug.cgi?id=130346

        Reviewed by Andreas Kling.

        Following <http://trac.webkit.org/changeset/163560>, SVG inline elements 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.

        Partially revert <http://trac.webkit.org/changeset/164368> as it addressed a similar issue for
        <tspan> and <tref>. Instead we should implement RenderSVGInline::updateFromStyle() to ensure that
        RenderSVGInline and any derived classes (e.g. RenderSVGTSpan) are always treated as inline elements
        regardless of their CSS style because the SVG text layout code depends on this assumption as part
        of a performance optimization. We may want to revaluate the benefits of this optimization with respect
        to code clarity and ensuring the code is less error prone.

        Test: svg/text/a-display-block.html
              svg/text/tref-display-inherit.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Revert changes from <http://trac.webkit.org/changeset/164368>.
        * rendering/RenderInline.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::updateFromStyle): Added; ensure that RenderSVGInline and any derived
        classes are treated as inline elements because the SVG text layout code depends on this assumption.
        * rendering/svg/RenderSVGInline.h:

2014-03-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-outside: ellipse(50% 50% at) causes crash
        https://bugs.webkit.org/show_bug.cgi?id=130366

        Reviewed by Andreas Kling.

        The BasicShape ellipse and circle functions now report a syntax error
        if the "at" keyword is not followed by a position.

        The existing parsing tests have been updated to include this case.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeCircle):
        (WebCore::CSSParser::parseBasicShapeEllipse):

2014-03-18  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing MediaStreamVector typedef
        https://bugs.webkit.org/show_bug.cgi?id=130402

        Reviewed by Eric Carlson.

        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getLocalStreams):
        (WebCore::RTCPeerConnection::getRemoteStreams):
        (WebCore::RTCPeerConnection::getStreamById):
        (WebCore::RTCPeerConnection::hasLocalStreamWithTrackId):
        * Modules/mediastream/RTCPeerConnection.h:

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

        Unreviewed, rolling out r165815.
        https://bugs.webkit.org/show_bug.cgi?id=130410

        Broke many VTT tests (Requested by bfulgham on #webkit).

        Reverted changeset:

        "TextTrackRegion Not Implemented"
        https://bugs.webkit.org/show_bug.cgi?id=116546
        http://trac.webkit.org/changeset/165815

2014-03-18  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        Bad cast with toRenderBox in WebCore::RenderView::repaintViewRectangle
        https://bugs.webkit.org/show_bug.cgi?id=129104

        Reviewed by Simon Fraser.

        We should not cast the renderer of a RenderView's owner to RenderBox
        unless we are sure it is one.

        Test: plugins/crash-invalid-data-reference.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2014-03-18  Andreas Kling  <akling@apple.com>

        Micro-optimize element descendant iterator.
        <https://webkit.org/b/130384>

        Add a slightly more efficient ElementDescendantIterator that keeps a stack
        of relevant ancestor siblings instead of walking up the parent chain every
        time we run out of children.

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ElementDescendantIterator.h: Added.
        (WebCore::ElementDescendantIterator::ElementDescendantIterator):
        (WebCore::ElementDescendantIterator::operator++):
        (WebCore::ElementDescendantConstIterator::ElementDescendantConstIterator):
        (WebCore::ElementDescendantConstIterator::operator++):
        (WebCore::ElementDescendantIteratorAdapter::ElementDescendantIteratorAdapter):
        (WebCore::ElementDescendantIteratorAdapter::begin):
        (WebCore::ElementDescendantIteratorAdapter::end):
        (WebCore::ElementDescendantConstIteratorAdapter::ElementDescendantConstIteratorAdapter):
        (WebCore::ElementDescendantConstIteratorAdapter::begin):
        (WebCore::ElementDescendantConstIteratorAdapter::end):
        (WebCore::elementDescendants):
        * dom/ElementIterator.h:
        * dom/SelectorQuery.cpp:
        (WebCore::elementsForLocalName):
        (WebCore::anyElement):
        (WebCore::SelectorDataList::executeSingleTagNameSelectorData):
        (WebCore::SelectorDataList::executeSingleClassNameSelectorData):
        (WebCore::SelectorDataList::executeSingleSelectorData):
        (WebCore::SelectorDataList::executeSingleMultiSelectorData):
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):

2014-03-18  Antti Koivisto  <antti@apple.com>

        Mutating rules returned by getMatchedCSSRules can result in crash
        https://bugs.webkit.org/show_bug.cgi?id=130209

        Reviewed by Andreas Kling.
        
        The non-standard getMatchedCSSRules API returns CSSStyleRule objects that don't
        have parent stylesheet pointer (as we don't know which sheet the rule originated from).
        Mutating the rule via such wrapper can lead to crashes later as we fail to invalidate
        the underlying stylesheet.
        
        Fix by disallowing mutation of style rules that don't have parent sheet pointer. CSSStyleRule
        has two mutable properties selectorText and style. The latter gives back CSSStyleDeclaration.
        This patch disallows mutations in both cases for CSSStyleRules that don't have parent stylesheet
        pointer.
        
        While it is technically possible to have CSSRules that are legitimately disconnected
        from stylesheet (by removing rule from sheet while holding a reference to it) it never
        makes sense to mutate such rule as there is no way to do anything with it afterwards.

        Tests: fast/css/getMatchedCSSProperties-rule-mutation.html
               fast/css/getMatchedCSSRules-crash.html

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):

            Bail out if parent stylesheet is null.

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        
            Allow StyleRuleCSSStyleDeclaration subclass cancel the mutation via
            boolean return value from willMutate.

        (WebCore::StyleRuleCSSStyleDeclaration::willMutate):
        
            Disallow mutation if the owning CSSStyleRule is null or has null stylesheet.

        (WebCore::StyleRuleCSSStyleDeclaration::didMutate):
        
            We never get here with null rule or stylesheet anymore.

        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::willMutate):

2014-03-17  Jeffrey Pfau  <jpfau@apple.com>

        <media> elements are not properly moved to new documents' visibility callback lists
        https://bugs.webkit.org/show_bug.cgi?id=127711

        Reviewed by David Kilzer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didMoveToNewDocument):

2014-03-18  Filip Pizlo  <fpizlo@apple.com>

        More FTL enabling.

        Rubber stamped by Dan Bernstein and Mark Hahnenberg.

        No new tests.

        * Configurations/FeatureDefines.xcconfig:

2014-03-18  Brent Fulgham  <bfulgham@apple.com>

        TextTrackRegion Not Implemented
        https://bugs.webkit.org/show_bug.cgi?id=116546

        Reviewed by Eric Carlson.

        Merged from Blink (patch by vcarbune@chromium.org):
        https://chromium.googlesource.com/chromium/blink/+/4940f89a087fea5b5ea628e98d0b355d398a9eea
        http://crbug.com/25798003

        Tests: media/track/regions-webvtt/text-track-region-display.html
               media/track/regions-webvtt/text-track-region-dom-layout.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/TextTrack.cpp:
        * html/track/TextTrack.h:
        * html/track/TextTrackRegion.cpp:
        (WebCore::TextTrackRegion::TextTrackRegion):
        (WebCore::TextTrackRegion::appendTextTrackCueBox):
        * html/track/TextTrackRegion.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::VTTCue):
        (WebCore::VTTCue::notifyRegionWhenRemovingDisplayTree):
        (WebCore::VTTCue::removeDisplayTree):
        * html/track/VTTCue.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseBytes):
        (WebCore::WebVTTParser::collectMetadataHeader):
        * html/track/WebVTTParser.h:

2014-03-18  Philippe Normand  <pnormand@igalia.com>

        [GTK] ResourceLoaderSoup.cpp was added by mistake
        https://bugs.webkit.org/show_bug.cgi?id=130396

        Reviewed by Carlos Garcia Campos.

        This file was committed by mistake in r152778 and is not built by
        any port.

        * loader/soup/ResourceLoaderSoup.cpp: Removed.

2014-03-18  Andreas Kling  <akling@apple.com>

        Rename ElementDescendantIterator to TypedElementDescendantIterator.
        Romper-stubbed by Antti "Latte Lung" Koivisto.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ElementDescendantIterator.h: Removed.
        * dom/ElementIterator.h:
        * dom/TypedElementDescendantIterator.h: Added.
        (WebCore::TypedElementDescendantIterator<ElementType>::TypedElementDescendantIterator):
        (WebCore::TypedElementDescendantIterator<ElementType>::operator):
        (WebCore::TypedElementDescendantConstIterator<ElementType>::TypedElementDescendantConstIterator):
        (WebCore::TypedElementDescendantConstIterator<ElementType>::operator):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::TypedElementDescendantIteratorAdapter):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::begin):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::end):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::beginAt):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::from):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::first):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::last):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::TypedElementDescendantConstIteratorAdapter):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::begin):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::end):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::beginAt):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::from):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::first):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::last):
        (WebCore::descendantsOfType):

2014-03-18  Ion Rosca  <rosca@adobe.com>

        Add blend mode property to dumped information in GraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=130331

        Reviewed by Simon Fraser.

        Functionality is not changed, therefore no new tests added.
        I adjusted the affected test results generated with layerTreeAsText.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):

2014-03-17  Sergio Villar Senin  <svillar@igalia.com>

        webdatabase: Replace DEPRECATED_DEFINE_STATIC_LOCAL by static NeverDestroyed<T>
        https://bugs.webkit.org/show_bug.cgi?id=130347

        Reviewed by Darin Adler.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::notificationMutex):
        (WebCore::notificationQueue):

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

        Add RemoteCommandListener support to MediaSessionManager.
        https://bugs.webkit.org/show_bug.cgi?id=130354

        Reviewed by Eric Carlson.

        Listen for remote commands in MediaSessionManager.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::addSession):
        (WebCore::MediaSessionManager::removeSession):
        * platform/audio/MediaSessionManager.h:

        Add RemoteCommandListener to the project files:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2014-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rewrite WebHTMLConverter::_elementHasOwnBackgroundColor in C++
        https://bugs.webkit.org/show_bug.cgi?id=130291

        Reviewed by Andreas Kling.

        Extracted HTMLConverterCaches::elementHasOwnBackgroundColor.

        * platform/mac/HTMLConverter.mm:
        (HTMLConverterCaches::elementHasOwnBackgroundColor):
        (-[WebHTMLConverter _elementHasOwnBackgroundColor:]):

2014-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rewrite WebHTMLConverter::_elementIsBlockLevel in C++
        https://bugs.webkit.org/show_bug.cgi?id=130287

        Reviewed by Andreas Kling.

        Rewrote _elementIsBlockLevel as HTMLConverterCaches::isBlockElement. Also removed the code to update
        _elementIsBlockLevel in _traverseNode as computing the value of _elementIsBlockLevel is now fast.

        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        (HTMLConverterCaches::isBlockElement):
        (-[WebHTMLConverter _elementIsBlockLevel:]):
        (-[WebHTMLConverter _traverseNode:depth:embedded:]):
        (-[WebHTMLConverter dealloc]):
        (-[WebHTMLConverter init]):

2014-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rewrite WebHTMLConverter::_getComputedFloat in C++
        https://bugs.webkit.org/show_bug.cgi?id=130284

        Reviewed by Andreas Kling.

        Rewrote _getComputedFloat as HTMLConverterCaches::floatPropertyValueForNode.

        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        (HTMLConverterCaches::floatPropertyValueForNode):
        (-[WebHTMLConverter _getFloat:forNode:property:]): Now that computing the float value is fast, we don't need to
        store it in the cache.
        (-[WebHTMLConverter dealloc]):
        (-[WebHTMLConverter init]):

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

        HTMLInputElement::defaultEventHandler() shouldn't force style updates.
        <https://webkit.org/b/130303>

        Move the updateStyleIfNeeded() call down to TextFieldInputType instead
        of doing it for every HTMLInputEvent.

        There might be a better way to do this; we only want to know about this
        specific element's renderer, and don't need the rest of the tree.
        This is still an easy hack to avoid a lot of unnecessary work.

        Reviewed by Anders Carlsson.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):

2014-03-17  Brent Fulgham  <bfulgham@apple.com>

        [WebVTT] Extending WebVTT Rendering with Regions
        https://bugs.webkit.org/show_bug.cgi?id=109822

        Reviewed by Eric Carlson.

        Merged from Blink (patch by Victor Carbune vcarbune@chromium.org):
        https://chromium.googlesource.com/chromium/blink/+/0cdebc1d76d41bfcb9c4b022e54a4fbff132225d

        No new tests, as this feature is not active in default builds. New tests will be added
        in an upcoming bug.

        * css/mediaControls.css:
        (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):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::~TextTrack):
        * html/track/TextTrackCue.cpp:
        * html/track/TextTrackRegion.cpp:
        (WebCore::TextTrackRegion::TextTrackRegion):
        (WebCore::TextTrackRegion::textTrackCueContainerScrollingClass):
        (WebCore::TextTrackRegion::textTrackCueContainerShadowPseudoId):
        (WebCore::TextTrackRegion::textTrackRegionShadowPseudoId):
        (WebCore::TextTrackRegion::appendTextTrackCueBox):
        (WebCore::TextTrackRegion::displayLastTextTrackCueBox):
        (WebCore::TextTrackRegion::willRemoveTextTrackCueBox):
        (WebCore::TextTrackRegion::getDisplayTree):
        (WebCore::TextTrackRegion::prepareRegionDisplayTree):
        (WebCore::TextTrackRegion::startTimer):
        (WebCore::TextTrackRegion::stopTimer):
        (WebCore::TextTrackRegion::scrollTimerFired):
        * html/track/TextTrackRegion.h:
        (WebCore::TextTrackRegion::create):
        (WebCore::TextTrackRegion::isScrollingRegion):
        (WebCore::TextTrackRegion::ownerDocument):
        * html/track/TextTrackRegion.idl:
        * html/track/TextTrackRegionList.cpp:
        (WebCore::TextTrackRegionList::getRegionById):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        (WebCore::VTTCue::~VTTCue):
        (WebCore::VTTCue::setIsActive):
        (WebCore::VTTCue::removeDisplayTree):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::createNewRegion):
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::layout):

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

        [GStreamer] human readable language code for tracks
        https://bugs.webkit.org/show_bug.cgi?id=124514

        Reviewed by Martin Robinson.

        * PlatformEfl.cmake: Add GSTREAMER_TAG_INCLUDE_DIRS and GSTREAMER_TAG_LIBRARIES.
        * PlatformGTK.cmake: Same.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::getLanguageCode): Run language codes though gst_tag_get_language_code_iso_639_1() to make sure they're valid.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Use getLanguageCode() for languages instead of just getTag().

2014-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] Rewrite WebHTMLConverter::_computedStringForNode in C++
        https://bugs.webkit.org/show_bug.cgi?id=130274

        Reviewed by Andreas Kling.

        Rewrote WebHTMLConverter::_computedStringForNode as HTMLConverterCaches::propertyValueForNode.

        * platform/mac/HTMLConverter.h: Removed unused caches.
        * platform/mac/HTMLConverter.mm:
        (HTMLConverterCaches::computedStylePropertyForElement): Added use const String& instead of String& on property name.
        (HTMLConverterCaches::inlineStylePropertyForElement): Ditto.
        (HTMLConverterCaches::propertyValueForNode): Renamed and rewritten from _computedStringForNode.
        (-[WebHTMLConverter _stringForNode:property:]): Simply return the computed value instead of storing it in the cache
        now that the computing the value is fast.
        (-[WebHTMLConverter dealloc]):
        (-[WebHTMLConverter init]):

2014-03-17  Andreas Kling  <akling@apple.com>

        Remove unnecessary JSC::Handle null checks in bindings code.
        <https://webkit.org/b/130356>

        Use Handle::slot() directly instead of going through Handle::get().
        This avoids null checking the HandleSlot, which isn't necessary here
        anyway, and the code already assumes it'll never be null.

        Reviewed by Gavin Barraclough.

        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::JSTextTrackCueOwner::isReachableFromOpaqueRoots):
        * bindings/js/WebCoreTypedArrayController.cpp:
        (WebCore::WebCoreTypedArrayController::JSArrayBufferOwner::isReachableFromOpaqueRoots):
        (WebCore::WebCoreTypedArrayController::JSArrayBufferOwner::finalize):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::finalize):

2014-03-17  Krzysztof Czech  <k.czech@samsung.com>

        AX: Reducing some code by using helper function ariaElementsFromAttribute
        https://bugs.webkit.org/show_bug.cgi?id=130344

        Reviewed by Chris Fleizach.

        Change visibility of ariaElementsFromAttribute function from private to protected
        so that other classes that derives from AccessibilityRenderObject can use it.

        No new tests. No behaviour change.

        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::columnHeaders):

2014-03-16  Brent Fulgham  <bfulgham@apple.com>

        Provide preference to enable additional AVFoundation options
        https://bugs.webkit.org/show_bug.cgi?id=130275

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::doesHaveAttribute): Added.
        * html/HTMLMediaElement.h:
        * page/Settings.in: Add new attribute.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::doesHaveAttribute): Added stub to call private player object's
        implementation of doesHaveAttribute.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::doesHaveAttribute):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::AVFWrapper::createAssetForURL): Check the <media> object,
        and notify AVFoundationCF to use URI option if relevant.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Check the <media> object,
        and notify AVFoundation to use URI option if relevant.

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

        [EME] Add NULL protections in SourceBuffer and MediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=130266

        Reviewed by Eric Carlson.

        Add NULL checks in places which may be called after a SourceBuffer has been removed:

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::monitorSourceBuffers): Protect against a SourceBuffer being removed
            (and thus activeSourceBuffers being empty) when monitoring source buffer state.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired): Protect against SourceBuffer being removed.
        (WebCore::SourceBuffer::videoTracks): Ditto.
        (WebCore::SourceBuffer::audioTracks): Ditto.
        (WebCore::SourceBuffer::textTracks): Ditto.
        (WebCore::SourceBuffer::setActive): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidEndStream): Ditto.
        (WebCore::SourceBuffer::hasCurrentTime): Ditto.
        (WebCore::SourceBuffer::canPlayThrough): Ditto.
        (WebCore::SourceBuffer::hasFutureTime): Ditto, and check for an empty buffered ranges.

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        WKThumbnailView should support snapshots
        https://bugs.webkit.org/show_bug.cgi?id=130335
        <rdar://problem/16255139>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:

2014-01-29  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] getComputedStyle() not using author's order when showing named grid lines
        https://bugs.webkit.org/show_bug.cgi?id=127837

        Reviewed by David Hyatt.

        Added a couple of new Vectors to store the names of the grid lines
        respecting their order. They will be used to get the right outcome
        for getComputedStyle().

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::addValuesForNamedGridLinesAtIndex):
        (WebCore::valueForGridTrackList):
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackList):
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData):
        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::operator==):

2014-03-17  Zsolt Borbely  <borbezs@inf.u-szeged.hu>

        Fix the !ENABLE(PROMISES) build
        https://bugs.webkit.org/show_bug.cgi?id=130328

        Reviewed by Darin Adler.

        Add missing ENABLE(PROMISES) guards.

        * bindings/js/JSDOMPromise.cpp:
        * bindings/js/JSDOMPromise.h:

2014-03-17  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Safari should not render a cell if the <td> is empty
        https://bugs.webkit.org/show_bug.cgi?id=15273

        Reviewed by Darin Adler.

        When table cell has no children and the doctype is not present or not
        correct the border for that cell should not be drawn. Firefox also
        follows the same behaviour hence making the changes to make it similiar
        to Firefox behaviour.

        Tests: fast/table/table-cell-border-doctype.html
               fast/table/table-cell-border-no-doctype.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):
        Added condition for not drawing the border when table cell has no child
        and doctype.


2014-03-17  Frédéric Wang  <fred.wang@free.fr>

        Fix handling of <annotation> in MathMLTextElement.
        https://bugs.webkit.org/show_bug.cgi?id=124128.

        Reviewed by Darin Adler.

        No new tests.

        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createElementRenderer): do not create the special RenderMathMLToken for the <annotation> tag.
        (WebCore::MathMLTextElement::childShouldCreateRenderer): only allow text inside <annotation>.

2014-03-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Credential storage is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=130149

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Add the libsecret include directories and link line to the build.

2014-03-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed.

        Addressing reviewing comments by Darin in bug #130310 that I forgot
        to address before landing the changes in r165732.
        https://bugs.webkit.org/show_bug.cgi?id=130310

        * rendering/InlineTextBox.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderObject.cpp:

2014-03-17  Jessie Berlin  <jberlin@apple.com>

        Speculative build fix for ENABLE(TELEPHONE_NUMBER_DETECTION) after r165724.

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

2014-03-17  Zan Dobersek  <zdobersek@igalia.com>

        Only supplement Page with UserMediaController once
        https://bugs.webkit.org/show_bug.cgi?id=130311

        Reviewed by Darin Adler.

        Don't supplement the Page with an UserMediaController object if that Page was
        already supplemented with one. This avoids triggering an assertion in
        Supplementable::provideSupplement() that ensures no supplement with the same key
        exists yet. The cause of this is calling provideUserMediaTo() in the Internals
        constructor that's using the same Page for two subsequent tests.

        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::provideUserMediaTo):

2014-03-17  Zan Dobersek  <zdobersek@igalia.com>

        Explicitly include cstdio header for debug builds in InlineTextBox, RenderLayer, RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=130310

        Reviewed by Darin Adler.

        Building the GTK port with Clang through CMake falls into a configuration where
        the cstdio header is not indirectly included in InlineTextBox, RenderLayer and
        RenderObject source files. fprintf() is required for helper functions that print
        out helpful debugging information in debug builds, so the cstdio header should
        be included explicitly in that case.

        * rendering/InlineTextBox.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderObject.cpp:

2014-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cleanup WebKitDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=130246

        Reviewed by Martin Robinson.

        Remove unneeded getter and fix coding style.

        * bindings/gobject/WebKitDOMObject.cpp:
        (webkitDOMObjectSetProperty):
        (webkit_dom_object_class_init):

2014-03-17  Darin Adler  <darin@apple.com>

        Stop using deprecatedCharacters in HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=130323

        Reviewed by Andreas Kling.

        Keeping this separate from other patches because of concern that this could affect
        page load performance.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        Use a StringView instead of a character pointer.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::isEmpty): Ditto.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipAtMostOneLeadingNewline):
        Ditto.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemaining): Ditto.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::giveRemainingTo): Ditto.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemainingWhitespace): Ditto.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipLeading): Ditto.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeading): Ditto.
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers): Use StringView::upconvertedCharacters.

2014-03-17  Jinwoo Song  <jinwoo7.song@samsung.com>

        Make some Module class constructors return PassRef.
        https://bugs.webkit.org/show_bug.cgi?id=130282

        Reviewed by Andreas Kling.

        Make the constructor helpers for the following classes return PassRef
        instead of PassRefPtr since they will never return null.
         - GamepadList
         - Geolocation
         - NavigatorContentUtils
         - NetworkInfoConnection
         - Notification
         - NotificationCenter
         - DeviceProximityEvent

        * Modules/gamepad/GamepadList.h:
        (WebCore::GamepadList::create):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::create):
        * Modules/geolocation/Geolocation.h:
        (WebCore::Geolocation::GeoNotifier::create):
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::NavigatorContentUtils::create):
        * Modules/navigatorcontentutils/NavigatorContentUtils.h:
        * Modules/networkinfo/NetworkInfoConnection.cpp:
        (WebCore::NetworkInfoConnection::create):
        * Modules/networkinfo/NetworkInfoConnection.h:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::create):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::create):
        * Modules/notifications/NotificationCenter.h:
        * Modules/proximity/DeviceProximityEvent.h:
        (WebCore::DeviceProximityEvent::create):

2014-03-16  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Do not compute region range for a box unless the parent has one
        https://bugs.webkit.org/show_bug.cgi?id=130249

        Reviewed by Andrei Bucur.

        If the containing block does not have a region range computed, do not attempt to compute
        a region range for a child. In such cases, the range computation for a child can lead to
        a result that is wrong, possibly leading to an incorrect clipping.

        Test: fast/regions/inline-block-flowed-in-regions.html

        * rendering/RenderBlock.cpp:
        (WebCore::canComputeRegionRangeForBox):
        (WebCore::RenderBlock::computeRegionRangeForBoxChild):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderFlowThread.h:

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

        CSSValueList should assert that no null values are added to it.
        <https://webkit.org/b/130315>

        Add assertions in CSSValueList's append() and prepend() that we are
        not adding a null value. This caught a single place in CSSParser
        that was appending an alread-released RefPtr to a CSSValueList.
        That list was eventually discarded anyway (due to "foundClip" now
        being true), so the fix is simply to remove the adding.

        Eventually we should use Ref and PassRef all over for CSSValueList,
        this is just a first step on the way.

        Reviewed by Darin Adler.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillShorthand):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::append):
        (WebCore::CSSValueList::prepend):

2014-03-16  Praveen R Jadhav  <praveen.j@samsung.com>

        AudioBufferSourceNode stop attribute shouldn't throw exception in finished state.
        https://bugs.webkit.org/show_bug.cgi?id=130000.

        Reviewed by Jer Noble.

        AudioBufferSourceNode may go to FINISHED_STATE even before "stop" method is called 
        as silence rendered after audio data is played out when its not looping.
        A call to "stop" method after this shouldn't throw exception.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::stop):

2014-03-16  Brian Burg  <bburg@apple.com>

        Web Inspector: generated backend commands should reflect build system ENABLE settings
        https://bugs.webkit.org/show_bug.cgi?id=130111

        Reviewed by Timothy Hatcher.

        Add guards for conditional inspector domains.

        For Makefile-based build systems, force regeneration of the
        combined file if the list of domains has changed.

        Combine only the Inspector domains listed in INSPECTOR_DOMAINS,
        instead of globbing any .json file.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:

2014-03-16  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Double values passed to fabsf() in maxScaleFromTransform()
        <http://webkit.org/b/130297>

        Reviewed by Darin Adler.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::maxScaleFromTransform): Use narrowPrecisionToFloat()
        instead of static_cast<float>().

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

        ScriptExecutionContext::vm() should return a reference.
        <https://webkit.org/b/129611>

        Every ScriptExecutionContext has a VM, so this can never return null.
        Made WorkerScriptController::vm() return a reference as well, since
        that was needed for this change.

        Reviewed by Geoffrey Garen.

        * bindings/js/WorkerScriptController.h:
        (WebCore::WorkerScriptController::vm):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::vm):
        * dom/ScriptExecutionContext.h:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::execute):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):

2014-03-16  Zan Dobersek  <zdobersek@igalia.com>

        Remove OwnPtr.h, PassOwnPtr.h header inclusions in Source/WebCore/html/parser/ code
        https://bugs.webkit.org/show_bug.cgi?id=129667

        Reviewed by Anders Carlsson.

        Remove unnecessary inclusions of the OwnPtr.h and PassOwnPtr.h headers
        in the code under Source/WebCore/html/parser/.

        * html/parser/HTMLParserScheduler.h:
        * html/parser/HTMLToken.h:
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/XSSAuditor.h:
        * html/parser/XSSAuditorDelegate.h:

2014-03-16  Darin Adler  <darin@apple.com>

        Remove uses of "cat" in DerivedSources.make outside platform-specific rules
        https://bugs.webkit.org/show_bug.cgi?id=130307

        Reviewed by Anders Carlsson.

        * DerivedSources.make: Use "perl -pe ''" instead of "cat".

2014-03-16  Brian Burg  <bburg@apple.com>

        Web Inspector: vended backend commands file should be generated as part of the build
        https://bugs.webkit.org/show_bug.cgi?id=130110

        Reviewed by Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj: Copy InspectorWebBackendCommands.js to the
        private headers directory.

2014-03-16  Frédéric Wang  <fred.wang@free.fr>

        [regression] foreign content not displayed in MathML
        <https://webkit.org/b/124128>

        Reviewed by Chris Fleizach.

        This restores foreign content in <mtext>, <mn> and <mi> elements, but only when it is "phrasing content" as defined per the HTML5 specification. Other token elements are not handled here. This change makes mspace-units.html work again on Linux.

        Tests: mathml/presentation/foreign-mi-dynamic.html
               mathml/presentation/foreign-mi.html
               mathml/presentation/foreign-mn.html
               mathml/presentation/foreign-mtext-rejected.html
               mathml/presentation/foreign-mtext.html

        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createElementRenderer): create a RenderMathMLToken for mn, ms and mtext.
        (WebCore::isPhrasingContent): helper function to check phrasing content, as defined by the HTML spec.
        (WebCore::MathMLTextElement::childShouldCreateRenderer): <mi>, <mn>, <mtext> and, <ms> now accepts phrasing content.
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::RenderMathMLToken):
        (WebCore::RenderMathMLToken::updateTokenContent): initialize the m_containsElement boolean when updating the token content.
        (WebCore::RenderMathMLToken::updateStyle): move <mi> specific handling in its own section and only apply the single-char rule when it does not contain elements.
        * rendering/mathml/RenderMathMLToken.h: add an m_containsElement boolean to handle token element specifically.

2014-03-16  David Kilzer  <ddkilzer@apple.com>

        PlatformTimeRanges::nearest() truncates closestDelta values from double to float
        <http://webkit.org/b/130298>

        Reviewed by Darin Adler.

        Fixes the following build failures using trunk clang:

            WebCore/platform/graphics/PlatformTimeRanges.cpp:210:28: error: absolute value function 'fabsf' given an argument of type 'double' but has parameter of type 'float' which may cause truncation of value [-Werror,-Wabsolute-value]
                        closestDelta = fabsf(startTime - time);
                                       ^
            WebCore/platform/graphics/PlatformTimeRanges.cpp:210:28: note: use function 'fabs' instead
                        closestDelta = fabsf(startTime - time);
                                       ^~~~~
                                       fabs
            WebCore/platform/graphics/PlatformTimeRanges.cpp:214:28: error: absolute value function 'fabsf' given an argument of type 'double' but has parameter of type 'float' which may cause truncation of value [-Werror,-Wabsolute-value]
                        closestDelta = fabsf(endTime - time);
                                       ^
            WebCore/platform/graphics/PlatformTimeRanges.cpp:214:28: note: use function 'fabs' instead
                        closestDelta = fabsf(endTime - time);
                                       ^~~~~
                                       fabs

        * platform/graphics/PlatformTimeRanges.cpp:
        (WebCore::PlatformTimeRanges::nearest): Extract start and end
        time deltas into local variables so they don't have to be
        computed twice, using fabs() instead of fabsf().

2014-03-16  Darin Adler  <darin@apple.com>

        Optimize hasTagName when called on an HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=130090

        Reviewed by Antti Koivisto.

        Added new hasTagName functions that have the efficiency of hasLocalName.
        but are safe.

        Now we can always use hasTagName, and we'll get a compile time error if
        we try to use an SVG tag name with an HTML element. All call sites that
        use the more specific tag name types are more efficient, and call sites
        that have a specific pointer type will get even more efficient checking
        that is exactly what we used to get by calling hasLocalName.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasTagName): Cast explicitly to Element
        since Node::hasTagName no longer works on a general QualifiedName.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isDescendantOfElementType): Use
        more specific type, RenderElement, so we can call hasTagName on Element
        instead of Node; eliminates an unnecessary branch.

        * accessibility/AccessibilityTableColumn.cpp: Added now-needed include.
        * accessibility/atk/AccessibilityObjectAtk.cpp: Ditto.

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets): Use
        new for loop and full words for variable names. Also use nullptr instead
        of 0. Call toHTMLElement and toSVGElement in code that checks hasTagName
        since it's already checking isHTMLElement and isSVGElement.

        * dom/Element.cpp:
        (WebCore::attrNodeListMap): Use NeverDestroyed and put the vectors into
        the map rather than putting pointers to a vector into the map.
        (WebCore::attrNodeListForElement): Take a reference rather than a pointer,
        and update for the change above.
        (WebCore::ensureAttrNodeListForElement): Ditto.
        (WebCore::removeAttrNodeListForElement): Ditto.
        (WebCore::findAttrNodeInList): Ditto.
        (WebCore::Element::isFocusable): Use lineageOfType<HTMLCanvasElement>
        to fine the canvas rather than a hand-written loop.
        (WebCore::Element::attrNodeList): Update for above changes.
        (WebCore::Element::setAttributeNode): Ditto.
        (WebCore::Element::attrIfExists): Ditto.
        (WebCore::Element::ensureAttr): Ditto.
        (WebCore::Element::detachAttrNodeFromElementWithValue): Ditto.
        (WebCore::Element::detachAllAttrNodesFromElement): Ditto.

        * dom/Element.h: Removed the overload of hasLocalName that takes a
        QualifiedName and ignores the non-local-name parts of it. Callers should
        use hasTagName instead, now that it's optimized appropriately. Added
        overloads of hasTagName for all the specific qualified name types. It's
        more efficient to use the Node versions of these functions rather than
        using QualifiedName::matches to do the check. Removed the hasTagName and
        hasLocalName functions from the Node class; the only convenience functions
        needed in Node are the specific checks for tags from HTML, MathML, and SVG,
        not the general purpose ones.

        * dom/Node.h: Removed hasLocalName and replaced the single hasTagName
        that takes a QualifiedName with three faster ones that take HTML, MathML,
        and SVG qualified names instead. Also updated to use nullptr instead of 0.

        * dom/PositionIterator.cpp: Added now-needed include.
        * dom/Text.cpp: Ditto.

        * dom/make_names.pl:
        (printHeaderHead): Renamed an argument for clarity and added a definitions
        argument, which is where we insert the classes derived from QualifiedName.
        (printCppHead): Renamed an argument for clarity.
        (printTypeHelpers): Use hasTagName rather than hasLocalName, since the
        former is now optimized to be the same as what the latter was.
        (printNamesHeaderFile): Define a class derived from QualifiedName that can
        be used at compile time to avoid having to check the namespace.
        (printNamesCppFile): Use the new more-specific type as needed.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::isLegacyAppleStyleSpan): Use hasTagName instead of hasLocalName,
        and references instead of pointers.
        (WebCore::ApplyStyleCommand::ApplyStyleCommand): Removed uneeded explicit
        construction of a smart pointer.
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun): Updated to use
        the enclosingElementWithTag function by its new name.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionUnorderedListState): Updated to use the
        enclosingElementWithTag function by its new name.
        (WebCore::Editor::selectionOrderedListState): Ditto.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Use a more-specific type for the list tag.
        (WebCore::InsertListCommand::doApplyForSingleParagraph): Ditto.
        * editing/InsertListCommand.h: Ditto.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces): Added an explicit
        cast to Element in the loop that is already guarded by an isElementNode check.
        Also use a modern C++ for loop.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        Updated to use the enclosingElementWithTag function by its new name.
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds): Ditto.
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent): Ditto.

        * editing/TypingCommand.cpp: Added now-needed includes.
        * editing/VisibleUnits.cpp: Ditto.

        * editing/htmlediting.cpp:
        (WebCore::enclosingElementWithTag): Changed to return an Element instead of a Node,
        since nodes other than elements do not have tags.
        * editing/htmlediting.h: Ditto.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::adjustedSelectionRange): Updated to use the enclosingElementWithTag
        function by its new name.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendText): Ditto.
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization): Ditto.
        (WebCore::highestAncestorToWrapMarkup): Ditto.
        (WebCore::createMarkupInternal): Ditto.
        (WebCore::createContextualFragment): Ditto. Use hasTagName instead of hasLocalName,
        since the former is now optimized to be the same as the latter was before.

        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement): Use hasTagName instead of hasLocalName,
        since the former is now optimized to be the same as the latter was before.
        (WebCore::nameShouldBeVisibleInDocumentAll): Ditto.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::ieForbidsInsertHTML): Ditto.
        (WebCore::unicodeBidiAttributeForDirAuto): Ditto.
        (WebCore::HTMLElement::parseBorderWidthAttribute): Ditto.
        (WebCore::HTMLElement::setInnerHTML): Ditto.
        (WebCore::shouldProhibitSetInnerOuterText): Ditto. Added this to share code between
        setInnerText and setOuterText.
        (WebCore::HTMLElement::setInnerText): Ditto.
        (WebCore::HTMLElement::setOuterText): Ditto.
        (WebCore::HTMLElement::rendererIsNeeded): Ditto.
        (WebCore::HTMLElement::createElementRenderer): Ditto.

        * html/HTMLElement.h: Added hasTagName, which hides the one inherited from Element
        and takes the more-specific HTMLQualifiedName type. This means we don't need to check
        the namespace at runtime because it's known at compile time. Also put the
        implementation of Node::hasTagName for HTMLQualifiedName into this header.

        * html/HTMLObjectElement.cpp:
        (WebCore::isRecognizedTagName): Updated for change in return type of
        HTMLNames::getHTMLTags.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add): Use hasTagName inastead of hasLocalName.
        (WebCore::HTMLSelectElement::value): Use isHTMLOptionElement instead of hasTagName.
        Also use a new style for loop and emptyString() instead of "".
        (WebCore::HTMLSelectElement::setValue): Ditto.
        (WebCore::HTMLSelectElement::setLength): Ditto.
        (WebCore::HTMLSelectElement::searchOptionsForValue): Ditto.
        (WebCore::HTMLSelectElement::restoreFormControlState): Ditto.

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalPresentationAttributeStyle): Use hasTagName
        instead of hasLocalName.

        * html/HTMLTableRowsCollection.cpp:
        (WebCore::isInSection): Updated to use hasTagName and take a reference.
        (WebCore::HTMLTableRowsCollection::rowAfter): Pass a reference.

        * html/parser/HTMLConstructionSite.cpp: Added now-needed include.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::createCaseMap): Updated to return a map rather than filling one in, and to
        be flxible about the type of the table being used.
        (WebCore::adjustSVGTagNameCase): Updated to use NeverDestroyed.
        (WebCore::adjustAttributes): Added new helper so we can share more code. Updated
        template argument names for clarity.
        (WebCore::adjustSVGAttributes): Marked this inline, since it just turns around and
        calls a single non-inline function.
        (WebCore::adjustMathMLAttributes): Ditto.
        (WebCore::addNamesWithPrefix): Changed to take argument by reference instead of pointer.
        (WebCore::createForeignAttributesMap): Added. Factors out the map creation from the
        function below.
        (WebCore::adjustForeignAttributes): Updated for above changes.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Updated to pass reference.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): Ditto.

        * inspector/InspectorStyleSheet.cpp: Added now-needed include.

        * mathml/MathMLElement.h: Added hasTagName, which hides the one inherited from Element
        and takes the more-specific MathMLQualifiedName type. This means we don't need to check
        the namespace at runtime because it's known at compile time. Also put the
        implementation of Node::hasTagName for MathMLQualifiedName into this header.

        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createElementRenderer): Use hasTagName.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::attributeChanged): Use hasTagName.
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex): Ditto.
        (WebCore::MathMLSelectElement::getSelectedActionChild): Ditto.
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild): Ditto.
        (WebCore::MathMLSelectElement::updateSelectedChild): Ditto.
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createElementRenderer): Ditto.
        (WebCore::MathMLTextElement::childShouldCreateRenderer): Ditto.

        * platform/gtk/PasteboardGtk.cpp: Added now-needed include.
        * platform/mac/HTMLConverter.mm: Ditto.
        * rendering/RenderBlockFlow.cpp: Ditto.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Use hasTagName.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::rendererForRootBackground): Ditto.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Ditto.

        * rendering/RenderReplaced.cpp: Added now-needed include.

        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::RenderMathMLScripts): Use hasTagName.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::RenderMathMLUnderOver): Ditto.

        * svg/SVGElement.h: Added hasTagName, which hides the one inherited from Element
        and takes the more-specific SVGQualifiedName type. This means we don't need to check
        the namespace at runtime because it's known at compile time. Also put the
        implementation of Node::hasTagName for SVGQualifiedName into this header.

        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::childrenChanged): Use isSVGFontFaceElement instead
        of calling hasTagName.

        * svg/SVGUseElement.cpp:
        (WebCore::isDirectReference): Changed to take a reference and a more specific type.
        (WebCore::SVGUseElement::toClipPath): Added a type cast.
        (WebCore::SVGUseElement::rendererClipChild): Use more specific types so we don't
        need a type cast.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::parseDocumentFragment): Added explicit calls to this
        unusual call site that has a good reason to use hasLocalName instead of hasTagName.

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

        Stop pulling in JSDOMBinding.h via JSEventListener.h
        <https://webkit.org/b/130299>

        Just chippin' away at the compile time monster.

        Reviewed by Darin Adler.

        * bindings/js/IDBBindingUtilities.cpp:
        * bindings/js/JSEventListener.h:

2014-03-16  David Kilzer  <ddkilzer@apple.com>

        Double values passed to fabsf() in maxScaleFromTransform()
        <http://webkit.org/b/130297>

        Reviewed by Darin Adler.

        Fixes the following build failures using trunk clang:

            WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:287:21: error: absolute value function 'fabsf' given an argument of type 'double' but has parameter of type 'float' which may cause truncation of value [-Werror,-Wabsolute-value]
                return std::max(fabsf(decomposeData.scaleX), fabsf(decomposeData.scaleY));
                                ^
            WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:287:21: note: use function 'fabs' instead
                return std::max(fabsf(decomposeData.scaleX), fabsf(decomposeData.scaleY));
                                ^~~~~
                                fabs
            WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:287:50: error: absolute value function 'fabsf' given an argument of type 'double' but has parameter of type 'float' which may cause truncation of value [-Werror,-Wabsolute-value]
                return std::max(fabsf(decomposeData.scaleX), fabsf(decomposeData.scaleY));
                                                             ^
            WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:287:50: note: use function 'fabs' instead
                return std::max(fabsf(decomposeData.scaleX), fabsf(decomposeData.scaleY));
                                                             ^~~~~
                                                             fabs

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::maxScaleFromTransform): Use static_cast<float>() to
        convert float values to double values.

2014-03-15  Zalan Bujtas  <zalan@apple.com>

        Move BorderEdge class to its own file.
        https://bugs.webkit.org/show_bug.cgi?id=130294

        Reviewed by Sam Weinig.

        This is in preparation to have better encapsulation for border box decoration painting.

        No change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/BorderEdge.cpp: Added.
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::getBorderEdgeInfo):
        (WebCore::BorderEdge::includesAdjacentEdges):
        (WebCore::BorderEdge::obscuresBackgroundEdge):
        (WebCore::BorderEdge::obscuresBackground):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        * rendering/BorderEdge.h: Added.
        (WebCore::BorderEdge::edgeFlagForSide):
        (WebCore::BorderEdge::includesEdge):
        (WebCore::BorderEdge::edgesShareColor):
        (WebCore::BorderEdge::hasVisibleColorAndStyle):
        (WebCore::BorderEdge::shouldRender):
        (WebCore::BorderEdge::presentButInvisible):
        (WebCore::BorderEdge::widthForPainting):
        (WebCore::BorderEdge::borderWidthInDevicePixel):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::borderStyleHasUnmatchedColorsAtCorner):
        (WebCore::colorsMatchAtCorner):
        (WebCore::colorNeedsAntiAliasAtCorner):
        (WebCore::willBeOverdrawn):
        (WebCore::joinRequiresMitre):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::borderObscuresBackgroundEdge):
        (WebCore::RenderBoxModelObject::borderObscuresBackground):
        * rendering/RenderBoxModelObject.h:

2014-03-15  Martin Robinson  <mrobinson@igalia.com>

        Fix WebCore unused parameter warnings for WebKitGTK+ CMake build
        https://bugs.webkit.org/show_bug.cgi?id=130252

        Reviewed by Carlos Garcia Campos.

        * Modules/mediastream/HTMLMediaElementMediaStream.cpp: Fix unused parameters.
        * html/RangeInputType.cpp: Ditto.
        * page/gtk/EventHandlerGtk.cpp: Ditto.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Ditto.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp: Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: Ditto.
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp: Ditto.
        * platform/gtk/GamepadsGtk.cpp: Ditto.
        * platform/gtk/GtkClickCounter.cpp: Ditto.
        * platform/gtk/GtkPopupMenu.cpp: Ditto.
        * platform/gtk/GtkTouchContextHelper.cpp: Ditto.
        * platform/gtk/GtkVersioning.c: Ditto.
        * platform/gtk/MainFrameScrollbarGtk.cpp: Ditto.
        * platform/gtk/PasteboardGtk.cpp: Ditto.
        * platform/gtk/PasteboardHelper.cpp: Ditto.
        * platform/gtk/RedirectedXCompositeWindow.cpp: Ditto.
        * platform/gtk/RenderThemeGtk.cpp: Ditto.
        * platform/gtk/RenderThemeGtk.h: Ditto.
        * platform/gtk/RenderThemeGtk2.cpp: Ditto.
        * platform/gtk/ScrollbarThemeGtk.cpp: Ditto.
        * platform/gtk/ScrollbarThemeGtk2.cpp: Ditto.
        * platform/gtk/WidgetGtk.cpp: Ditto.
        * platform/network/gtk/CredentialBackingStore.cpp: Ditto.
        * platform/soup/SharedBufferSoup.cpp: Ditto.
        * plugins/gtk/PluginViewGtk.cpp: Ditto.
        * plugins/gtk/gtk2xtbin.c: Ditto.
        * rendering/InlineTextBox.cpp: Ditto.

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

        RenderTextControl::hasValidAvgCharWidth doesn't detect System Font
        https://bugs.webkit.org/show_bug.cgi?id=130168

        Reviewed by Dean Jackson.

        No new tests.

        * platform/graphics/Font.cpp: Moved functions from RenderTextControl
        (WebCore::Font::hasValidAverageCharWidth):
        (WebCore::Font::fastAverageCharWidthIfAvailable):
        * platform/graphics/Font.h:
        * rendering/RenderTextControl.cpp: Moved functions to Font.cpp
        (WebCore::RenderTextControl::getAverageCharWidth): Removed redundant function argument
        (WebCore::RenderTextControl::computeIntrinsicLogicalWidths):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAverageCharWidth): Removed redundant function argument
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::getAverageCharWidth): Removed redundant function argument
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth):
        * rendering/RenderTextControlSingleLine.h:

2014-03-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Define SYSTEM_VERSION_PREFIX consistently
        <http://webkit.org/b/130293>
        <rdar://problem/15926359>

        Reviewed by Dan Bernstein.

        * Configurations/Version.xcconfig:
        (SYSTEM_VERSION_PREFIX_iphoneos): Sync with
        Source/WebKit/mac/Version.xcconfig.

2014-03-14  Mark Rowe  <mrowe@apple.com>

        Fix the production build.

        Don't rely on USE_INTERNAL_SDK being set for the Production configuration since UseInternalSDK.xcconfig won't
        be at the expected relative path when working from installed source.

        * Configurations/Base.xcconfig:

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>

        Reviewed by Simon Fraser.

        No new tests because no behavior changes.

        * DerivedSources.make:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl:
        * Modules/encryptedmedia/MediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeyNeededEvent.cpp:
        * Modules/encryptedmedia/MediaKeyNeededEvent.h:
        * Modules/encryptedmedia/MediaKeyNeededEvent.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabaseException.cpp:
        * Modules/indexeddb/IDBDatabaseMetadata.h:
        * Modules/indexeddb/IDBEventDispatcher.cpp:
        * Modules/indexeddb/IDBEventDispatcher.h:
        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBHistograms.h:
        * Modules/indexeddb/IDBIndexMetadata.h:
        * Modules/indexeddb/IDBObjectStoreMetadata.h:
        * Modules/indexeddb/IDBRecordIdentifier.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediacontrols/mediaControlsApple.css:
        * Modules/mediacontrols/mediaControlsiOS.css:
        * Modules/mediasource/AudioTrackMediaSource.h:
        * Modules/mediasource/AudioTrackMediaSource.idl:
        * Modules/mediasource/TextTrackMediaSource.h:
        * Modules/mediasource/TextTrackMediaSource.idl:
        * Modules/mediasource/VideoTrackMediaSource.h:
        * Modules/mediasource/VideoTrackMediaSource.idl:
        * Modules/mediastream/AllAudioCapabilities.h:
        * Modules/mediastream/AllAudioCapabilities.idl:
        * Modules/mediastream/AllVideoCapabilities.h:
        * Modules/mediastream/AllVideoCapabilities.idl:
        * Modules/mediastream/AudioStreamTrack.cpp:
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/AudioStreamTrack.idl:
        * Modules/mediastream/CapabilityRange.cpp:
        * Modules/mediastream/CapabilityRange.h:
        * Modules/mediastream/CapabilityRange.idl:
        * Modules/mediastream/MediaSourceStates.cpp:
        * Modules/mediastream/MediaSourceStates.h:
        * Modules/mediastream/MediaSourceStates.idl:
        * Modules/mediastream/MediaStreamCapabilities.cpp:
        * Modules/mediastream/MediaStreamCapabilities.h:
        * Modules/mediastream/MediaStreamCapabilities.idl:
        * Modules/mediastream/MediaTrackConstraint.cpp:
        * Modules/mediastream/MediaTrackConstraint.h:
        * Modules/mediastream/MediaTrackConstraint.idl:
        * Modules/mediastream/MediaTrackConstraintSet.cpp:
        * Modules/mediastream/MediaTrackConstraintSet.h:
        * Modules/mediastream/MediaTrackConstraints.cpp:
        * Modules/mediastream/MediaTrackConstraints.h:
        * Modules/mediastream/MediaTrackConstraints.idl:
        * Modules/mediastream/NavigatorMediaStream.cpp:
        * Modules/mediastream/NavigatorUserMediaError.cpp:
        * Modules/mediastream/RTCConfiguration.idl:
        * Modules/mediastream/RTCIceServer.idl:
        * Modules/mediastream/RTCOfferAnswerOptions.cpp:
        * Modules/mediastream/RTCOfferAnswerOptions.h:
        * Modules/mediastream/VideoStreamTrack.cpp:
        * Modules/mediastream/VideoStreamTrack.h:
        * Modules/mediastream/VideoStreamTrack.idl:
        * Modules/networkinfo/NetworkInfo.cpp:
        * Modules/networkinfo/NetworkInfo.h:
        * Modules/networkinfo/NetworkInfoConnection.cpp:
        * Modules/networkinfo/NetworkInfoConnection.h:
        * Modules/networkinfo/NetworkInfoController.cpp:
        * Modules/notifications/DOMWindowNotifications.cpp:
        * Modules/notifications/DOMWindowNotifications.h:
        * Modules/notifications/DOMWindowNotifications.idl:
        * Modules/notifications/NotificationController.cpp:
        * Modules/notifications/NotificationController.h:
        * Modules/notifications/NotificationPermissionCallback.h:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/notifications/WorkerGlobalScopeNotifications.cpp:
        * Modules/notifications/WorkerGlobalScopeNotifications.h:
        * Modules/notifications/WorkerGlobalScopeNotifications.idl:
        * Modules/plugins/PluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * Modules/plugins/QuickTimePluginReplacement.css:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.idl:
        * Modules/quota/DOMWindowQuota.idl:
        * Modules/speech/DOMWindowSpeechSynthesis.h:
        * Modules/speech/DOMWindowSpeechSynthesis.idl:
        * Modules/speech/SpeechSynthesis.cpp:
        * Modules/speech/SpeechSynthesis.h:
        * Modules/speech/SpeechSynthesis.idl:
        * Modules/speech/SpeechSynthesisEvent.cpp:
        * Modules/speech/SpeechSynthesisEvent.h:
        * Modules/speech/SpeechSynthesisEvent.idl:
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/speech/SpeechSynthesisVoice.cpp:
        * Modules/speech/SpeechSynthesisVoice.h:
        * Modules/speech/SpeechSynthesisVoice.idl:
        * Modules/webaudio/AudioBuffer.cpp:
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioListener.cpp:
        * Modules/webaudio/AudioListener.h:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webaudio/PeriodicWave.cpp:
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webdatabase/ChangeVersionWrapper.cpp:
        * Modules/webdatabase/ChangeVersionWrapper.h:
        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        * Modules/webdatabase/DOMWindowWebDatabase.h:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseAuthorizer.cpp:
        * Modules/webdatabase/DatabaseAuthorizer.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        * Modules/webdatabase/DatabaseBackendBase.h:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/DatabaseContext.cpp:
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseDetails.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLCallbackWrapper.h:
        * Modules/webdatabase/SQLError.h:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLException.cpp:
        * Modules/webdatabase/SQLResultSet.cpp:
        * Modules/webdatabase/SQLResultSet.h:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.cpp:
        * Modules/webdatabase/SQLResultSetRowList.h:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLStatement.cpp:
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLStatementCallback.h:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.h:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLStatementSync.cpp:
        * Modules/webdatabase/SQLTransaction.cpp:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionCallback.h:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.h:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/WorkerGlobalScopeWebDatabase.cpp:
        * Modules/webdatabase/WorkerGlobalScopeWebDatabase.h:
        * Modules/webdatabase/WorkerGlobalScopeWebDatabase.idl:
        * Resources/deleteButton.tiff:
        * Resources/deleteButtonPressed.tiff:
        * WebCore.vcxproj/MigrateScripts:
        * WebCorePrefix.cpp:
        * accessibility/AXObjectCache.cpp:
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityARIAGrid.cpp:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridCell.cpp:
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.cpp:
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.cpp:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityList.cpp:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBox.cpp:
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMediaControls.cpp:
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.cpp:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollbar.cpp:
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySlider.cpp:
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilityTable.cpp:
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.cpp:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.cpp:
        * accessibility/AccessibilityTableRow.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        * accessibility/ios/AccessibilityObjectIOS.mm:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        * accessibility/mac/AXObjectCacheMac.mm:
        * accessibility/mac/AccessibilityObjectMac.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        * bindings/gobject/WebKitDOMHTMLPrivate.cpp:
        * bindings/gobject/WebKitDOMHTMLPrivate.h:
        * bindings/js/Dictionary.cpp:
        * bindings/js/GCController.cpp:
        * bindings/js/GCController.h:
        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSAudioTrackCustom.cpp:
        * bindings/js/JSAudioTrackListCustom.cpp:
        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSRuleCustom.h:
        * bindings/js/JSCSSRuleListCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/js/JSCallbackData.cpp:
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSMediaListCustom.h:
        * bindings/js/JSMediaSourceStatesCustom.cpp:
        * bindings/js/JSMediaStreamCapabilitiesCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSNodeCustom.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSSQLTransactionSyncCustom.cpp:
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetCustom.h:
        * bindings/js/JSStyleSheetListCustom.cpp:
        * bindings/js/JSTextTrackCueCustom.cpp:
        * bindings/js/JSTextTrackCustom.cpp:
        * bindings/js/JSTextTrackListCustom.cpp:
        * bindings/js/JSTouchCustom.cpp:
        * bindings/js/JSTouchListCustom.cpp:
        * bindings/js/JSTrackCustom.cpp:
        * bindings/js/JSTrackCustom.h:
        * bindings/js/JSTrackEventCustom.cpp:
        * bindings/js/JSVideoTrackCustom.cpp:
        * bindings/js/JSVideoTrackListCustom.cpp:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * bindings/js/JSWebKitPointCustom.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXSLTProcessorCustom.cpp:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/js/ScriptProfile.cpp:
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfileNode.h:
        * bindings/js/ScriptProfiler.cpp:
        * bindings/js/ScriptProfiler.h:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptController.cpp:
        * bindings/js/WorkerScriptController.h:
        * bindings/objc/DOM.h:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMAbstractView.mm:
        * bindings/objc/DOMAbstractViewFrame.h:
        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMCustomXPathNSResolver.h:
        * bindings/objc/DOMCustomXPathNSResolver.mm:
        * bindings/objc/DOMEventException.h:
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMException.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        * bindings/objc/DOMObject.h:
        * bindings/objc/DOMObject.mm:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMRangeException.h:
        * bindings/objc/DOMRanges.h:
        * bindings/objc/DOMStylesheets.h:
        * bindings/objc/DOMTraversal.h:
        * bindings/objc/DOMUIKitExtensions.h:
        * bindings/objc/DOMUIKitExtensions.mm:
        * bindings/objc/DOMUtility.mm:
        * bindings/objc/DOMViews.h:
        * bindings/objc/DOMXPath.h:
        * bindings/objc/DOMXPath.mm:
        * bindings/objc/DOMXPathException.h:
        * bindings/objc/ExceptionHandlers.h:
        * bindings/objc/ExceptionHandlers.mm:
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        * bindings/objc/ObjCNodeFilterCondition.h:
        * bindings/objc/ObjCNodeFilterCondition.mm:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/objc/WebScriptObject.mm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/InFilesCompiler.pm:
        (license):
        * bindings/scripts/InFilesParser.pm:
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/test/ObjC/DOMFloat64Array.h:
        * bindings/scripts/test/ObjC/DOMFloat64Array.mm:
        * bindings/scripts/test/ObjC/DOMFloat64ArrayInternal.h:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObjectInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        * bindings/scripts/test/ObjC/DOMTestCallbackInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.mm:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetterInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.mm:
        * bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.h:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.mm:
        * bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestException.mm:
        * bindings/scripts/test/ObjC/DOMTestExceptionInternal.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.mm:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListenerInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.mm:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNode.h:
        * bindings/scripts/test/ObjC/DOMTestNode.mm:
        * bindings/scripts/test/ObjC/DOMTestNodeInternal.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/ObjC/DOMTestObjInternal.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.mm:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructorsInternal.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.mm:
        * bindings/scripts/test/ObjC/DOMTestTypedefsInternal.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:
        * bindings/scripts/test/ObjC/DOMattribute.mm:
        * bindings/scripts/test/ObjC/DOMattributeInternal.h:
        * bindings/scripts/test/ObjC/DOMreadonly.h:
        * bindings/scripts/test/ObjC/DOMreadonly.mm:
        * bindings/scripts/test/ObjC/DOMreadonlyInternal.h:
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/TestCustomNamedGetter.idl:
        * bindings/scripts/test/TestDomainSecurity.idl:
        * bindings/scripts/test/TestEventConstructor.idl:
        * bindings/scripts/test/TestEventTarget.idl:
        * bindings/scripts/test/TestException.idl:
        * bindings/scripts/test/TestImplements.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestMediaQueryListListener.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestOverloadedConstructors.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * bridge/Bridge.h:
        * bridge/IdentifierRep.cpp:
        * bridge/IdentifierRep.h:
        * bridge/NP_jsobject.cpp:
        * bridge/NP_jsobject.h:
        * bridge/c/CRuntimeObject.cpp:
        * bridge/c/CRuntimeObject.h:
        * bridge/c/c_class.cpp:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_runtime.h:
        * bridge/c/c_utility.cpp:
        * bridge/c/c_utility.h:
        * bridge/jsc/BridgeJSC.cpp:
        * bridge/jsc/BridgeJSC.h:
        * bridge/npruntime.cpp:
        * bridge/npruntime_impl.h:
        * bridge/npruntime_priv.h:
        * bridge/objc/ObjCRuntimeObject.h:
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/WebScriptObject.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_class.mm:
        * bridge/objc/objc_header.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        * bridge/runtime_root.h:
        * bridge/testbindings.mm:
        * css/CSSAllInOne.cpp:
        * css/CSSAspectRatioValue.cpp:
        * css/CSSAspectRatioValue.h:
        * css/CSSBorderImageSliceValue.cpp:
        * css/CSSBorderImageSliceValue.h:
        * css/CSSCanvasValue.cpp:
        * css/CSSCanvasValue.h:
        * css/CSSCrossfadeValue.cpp:
        * css/CSSCrossfadeValue.h:
        * css/CSSFontFace.cpp:
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.cpp:
        * css/CSSFontFaceSource.h:
        * css/CSSFontFaceSrcValue.cpp:
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontFeatureValue.cpp:
        * css/CSSFontFeatureValue.h:
        * css/CSSFontSelector.cpp:
        * css/CSSFontSelector.h:
        * css/CSSFontValue.cpp:
        * css/CSSGradientValue.cpp:
        * css/CSSGradientValue.h:
        * css/CSSImageGeneratorValue.cpp:
        * css/CSSImageGeneratorValue.h:
        * css/CSSMediaRule.cpp:
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        * css/CSSReflectValue.cpp:
        * css/CSSReflectValue.h:
        * css/CSSReflectionDirection.h:
        * css/CSSRuleList.cpp:
        * css/CSSRuleList.h:
        * css/CSSRuleList.idl:
        * css/CSSSegmentedFontFace.cpp:
        * css/CSSSegmentedFontFace.h:
        * css/CSSShadowValue.cpp:
        * css/CSSTimingFunctionValue.cpp:
        * css/CSSTimingFunctionValue.h:
        * css/CSSUnicodeRangeValue.cpp:
        * css/CSSUnicodeRangeValue.h:
        * css/CSSUnknownRule.idl:
        * css/CSSValue.cpp:
        * css/CSSValueList.idl:
        * css/MediaAllInOne.cpp:
        * css/MediaFeatureNames.cpp:
        * css/MediaList.idl:
        * css/MediaQuery.cpp:
        * css/MediaQuery.h:
        * css/MediaQueryEvaluator.cpp:
        * css/MediaQueryEvaluator.h:
        * css/MediaQueryExp.cpp:
        * css/MediaQueryExp.h:
        * css/Pair.h:
        * css/PropertySetCSSStyleDeclaration.h:
        * css/RGBColor.cpp:
        * css/RGBColor.h:
        * css/SVGCSSParser.cpp:
        * css/SVGCSSStyleSelector.cpp:
        * css/StyleInvalidationAnalysis.cpp:
        * css/StyleInvalidationAnalysis.h:
        * css/StyleMedia.cpp:
        * css/StyleMedia.h:
        * css/StyleMedia.idl:
        * css/StyleSheet.cpp:
        * css/WebKitCSSFilterValue.cpp:
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSKeyframeRule.cpp:
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframeRule.idl:
        * css/WebKitCSSKeyframesRule.cpp:
        * css/WebKitCSSKeyframesRule.h:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSTransformValue.cpp:
        * css/WebKitCSSTransformValue.h:
        * css/WebKitCSSTransformValue.idl:
        * css/make-css-file-arrays.pl:
        * css/mediaControls.css:
        * css/mediaControlsEfl.css:
        * css/mediaControlsEflFullscreen.css:
        * css/mediaControlsGtk.css:
        * css/mediaControlsiOS.css:
        * css/svg.css:
        * dom/ActiveDOMObject.cpp:
        * dom/ActiveDOMObject.h:
        * dom/BeforeLoadEvent.h:
        * dom/BeforeLoadEvent.idl:
        * dom/BeforeTextInsertedEvent.cpp:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.cpp:
        * dom/BeforeUnloadEvent.h:
        * dom/BeforeUnloadEvent.idl:
        * dom/ClassNodeList.cpp:
        * dom/ClassNodeList.h:
        * dom/ClientRect.cpp:
        * dom/ClientRect.h:
        * dom/ClientRect.idl:
        * dom/ClientRectList.cpp:
        * dom/ClientRectList.h:
        * dom/ClientRectList.idl:
        * dom/Clipboard.cpp:
        * dom/Clipboard.idl:
        * dom/ClipboardAccessPolicy.h:
        * dom/ClipboardMac.mm:
        * dom/CompositionEvent.cpp:
        * dom/CompositionEvent.h:
        * dom/CompositionEvent.idl:
        * dom/ContextDestructionObserver.cpp:
        * dom/ContextDestructionObserver.h:
        * dom/CurrentScriptIncrementer.h:
        * dom/CustomEvent.cpp:
        * dom/CustomEvent.h:
        * dom/CustomEvent.idl:
        * dom/DOMCoreException.cpp:
        * dom/DOMCoreException.h:
        * dom/DOMCoreException.idl:
        * dom/DOMError.idl:
        * dom/DeviceMotionEvent.cpp:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceMotionEvent.idl:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentEventQueue.h:
        * dom/DocumentMarker.h:
        * dom/DocumentParser.h:
        * dom/DocumentSharedObjectPool.cpp:
        * dom/DocumentSharedObjectPool.h:
        * dom/Entity.idl:
        * dom/EventContext.cpp:
        * dom/EventContext.h:
        * dom/EventException.cpp:
        * dom/EventException.h:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/EventListenerMap.cpp:
        * dom/EventListenerMap.h:
        * dom/EventNames.cpp:
        * dom/EventQueue.h:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/ExceptionBase.cpp:
        * dom/ExceptionBase.h:
        * dom/GenericEventQueue.cpp:
        * dom/GenericEventQueue.h:
        * dom/KeyboardEvent.idl:
        * dom/MessageChannel.cpp:
        * dom/MessageChannel.h:
        * dom/MessageChannel.idl:
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:
        * dom/MessagePort.cpp:
        * dom/MessagePort.h:
        * dom/MessagePort.idl:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.idl:
        * dom/Notation.idl:
        * dom/OverflowEvent.cpp:
        * dom/OverflowEvent.h:
        * dom/OverflowEvent.idl:
        * dom/PopStateEvent.cpp:
        * dom/PopStateEvent.h:
        * dom/PopStateEvent.idl:
        * dom/Position.cpp:
        * dom/Position.h:
        * dom/ProcessingInstruction.idl:
        * dom/ProgressEvent.cpp:
        * dom/ProgressEvent.h:
        * dom/ProgressEvent.idl:
        * dom/Range.idl:
        * dom/RangeException.cpp:
        * dom/RangeException.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * dom/SecurityContext.cpp:
        * dom/SecurityContext.h:
        * dom/StaticNodeList.cpp:
        * dom/StaticNodeList.h:
        * dom/Text.idl:
        * dom/TextEvent.cpp:
        * dom/TextEvent.h:
        * dom/TextEvent.idl:
        * dom/Touch.cpp:
        * dom/Touch.h:
        * dom/Touch.idl:
        * dom/TouchEvent.cpp:
        * dom/TouchEvent.h:
        * dom/TouchEvent.idl:
        * dom/TouchList.cpp:
        * dom/TouchList.h:
        * dom/TouchList.idl:
        * dom/TransitionEvent.cpp:
        * dom/TransitionEvent.h:
        * dom/TransitionEvent.idl:
        * dom/TreeWalker.idl:
        * dom/UIEvent.idl:
        * dom/UIEventWithKeyState.cpp:
        * dom/WebKitAnimationEvent.cpp:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitTransitionEvent.cpp:
        * dom/WebKitTransitionEvent.h:
        * dom/WebKitTransitionEvent.idl:
        * dom/make_dom_exceptions.pl:
        * dom/make_event_factory.pl:
        * dom/make_names.pl:
        (printLicenseHeader):
        * editing/AlternativeTextController.cpp:
        * editing/AlternativeTextController.h:
        * editing/AppendNodeCommand.cpp:
        * editing/AppendNodeCommand.h:
        * editing/ApplyStyleCommand.cpp:
        * editing/ApplyStyleCommand.h:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/BreakBlockquoteCommand.h:
        * editing/CompositeEditCommand.cpp:
        * editing/CompositeEditCommand.h:
        * editing/CreateLinkCommand.cpp:
        * editing/CreateLinkCommand.h:
        * editing/DeleteButton.cpp:
        * editing/DeleteButton.h:
        * editing/DeleteButtonController.cpp:
        * editing/DeleteButtonController.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        * editing/DeleteSelectionCommand.h:
        * editing/EditAction.h:
        * editing/EditCommand.cpp:
        * editing/EditCommand.h:
        * editing/EditingBoundary.h:
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        * editing/EditorDeleteAction.h:
        * editing/EditorInsertAction.h:
        * editing/FormatBlockCommand.cpp:
        * editing/FormatBlockCommand.h:
        * editing/FrameSelection.cpp:
        * editing/FrameSelection.h:
        * editing/HTMLInterchange.cpp:
        * editing/HTMLInterchange.h:
        * editing/IndentOutdentCommand.cpp:
        * editing/IndentOutdentCommand.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertLineBreakCommand.h:
        * editing/InsertListCommand.cpp:
        * editing/InsertListCommand.h:
        * editing/InsertNodeBeforeCommand.cpp:
        * editing/InsertNodeBeforeCommand.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/InsertTextCommand.cpp:
        * editing/InsertTextCommand.h:
        * editing/MarkupAccumulator.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        * editing/MergeIdenticalElementsCommand.h:
        * editing/ModifySelectionListLevel.cpp:
        * editing/ModifySelectionListLevel.h:
        * editing/MoveSelectionCommand.cpp:
        * editing/MoveSelectionCommand.h:
        * editing/RemoveCSSPropertyCommand.cpp:
        * editing/RemoveCSSPropertyCommand.h:
        * editing/RemoveFormatCommand.cpp:
        * editing/RemoveFormatCommand.h:
        * editing/RemoveNodeCommand.cpp:
        * editing/RemoveNodeCommand.h:
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        * editing/RemoveNodePreservingChildrenCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/ReplaceSelectionCommand.h:
        * editing/SetNodeAttributeCommand.cpp:
        * editing/SetNodeAttributeCommand.h:
        * editing/SetSelectionCommand.cpp:
        * editing/SetSelectionCommand.h:
        * editing/SimplifyMarkupCommand.cpp:
        * editing/SimplifyMarkupCommand.h:
        * editing/SmartReplace.cpp:
        * editing/SmartReplace.h:
        * editing/SmartReplaceCF.cpp:
        * editing/SpellChecker.cpp:
        * editing/SpellChecker.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionCommand.h:
        * editing/SplitElementCommand.cpp:
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.cpp:
        * editing/SplitTextNodeCommand.h:
        * editing/SplitTextNodeContainingElementCommand.cpp:
        * editing/SplitTextNodeContainingElementCommand.h:
        * editing/TextAffinity.h:
        * editing/TextCheckingHelper.cpp:
        * editing/TextGranularity.h:
        * editing/TextIterator.cpp:
        * editing/TextIterator.h:
        * editing/TextIteratorBehavior.h:
        * editing/TypingCommand.cpp:
        * editing/TypingCommand.h:
        * editing/UnlinkCommand.cpp:
        * editing/UnlinkCommand.h:
        * editing/VisiblePosition.cpp:
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        * editing/VisibleSelection.h:
        * editing/VisibleUnits.cpp:
        * editing/VisibleUnits.h:
        * editing/WrapContentsInDummySpanCommand.cpp:
        * editing/WrapContentsInDummySpanCommand.h:
        * editing/WritingDirection.h:
        * editing/efl/EditorEfl.cpp:
        * editing/htmlediting.cpp:
        * editing/htmlediting.h:
        * editing/mac/EditorMac.mm:
        * editing/mac/FrameSelectionMac.mm:
        * editing/markup.cpp:
        * editing/markup.h:
        * extract-localizable-strings.pl:
        * fileapi/FileException.cpp:
        * history/BackForwardClient.h:
        * history/BackForwardList.cpp:
        * history/BackForwardList.h:
        * history/CachedFrame.cpp:
        * history/CachedFrame.h:
        * history/CachedFramePlatformData.h:
        * history/CachedPage.cpp:
        * history/CachedPage.h:
        * history/HistoryItem.cpp:
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        * history/PageCache.h:
        * history/mac/HistoryItemMac.mm:
        * html/FTPDirectoryDocument.cpp:
        * html/FTPDirectoryDocument.h:
        * html/HTMLAudioElement.cpp:
        * html/HTMLAudioElement.h:
        * html/HTMLAudioElement.idl:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLImageLoader.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLSourceElement.cpp:
        * html/HTMLSourceElement.h:
        * html/HTMLSourceElement.idl:
        * html/HTMLTablePartElement.cpp:
        * html/HTMLTableRowsCollection.cpp:
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTitleElement.idl:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLTrackElement.idl:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:
        * html/ImageData.cpp:
        * html/ImageData.h:
        * html/ImageData.idl:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/MediaController.cpp:
        * html/MediaController.h:
        * html/MediaController.idl:
        * html/MediaControllerInterface.h:
        * html/MediaError.h:
        * html/MediaError.idl:
        * html/MediaFragmentURIParser.cpp:
        * html/MediaFragmentURIParser.h:
        * html/MediaKeyError.h:
        * html/MediaKeyError.idl:
        * html/MediaKeyEvent.cpp:
        * html/MediaKeyEvent.h:
        * html/MediaKeyEvent.idl:
        * html/PluginDocument.cpp:
        * html/PluginDocument.h:
        * html/TextDocument.cpp:
        * html/TextDocument.h:
        * html/TimeRanges.cpp:
        * html/TimeRanges.h:
        * html/TimeRanges.idl:
        * html/VoidCallback.h:
        * html/VoidCallback.idl:
        * html/canvas/CanvasGradient.cpp:
        * html/canvas/CanvasGradient.h:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPattern.cpp:
        * html/canvas/CanvasPattern.h:
        * html/canvas/CanvasPattern.idl:
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/CanvasStyle.cpp:
        * html/canvas/CanvasStyle.h:
        * html/canvas/DOMPath.idl:
        * html/canvas/OESVertexArrayObject.cpp:
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLBuffer.cpp:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLBuffer.idl:
        * html/canvas/WebGLContextGroup.cpp:
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLContextObject.cpp:
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLFramebuffer.cpp:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLFramebuffer.idl:
        * html/canvas/WebGLObject.cpp:
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLProgram.cpp:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLProgram.idl:
        * html/canvas/WebGLRenderbuffer.cpp:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderbuffer.idl:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLShader.cpp:
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLShader.idl:
        * html/canvas/WebGLSharedObject.cpp:
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLTexture.cpp:
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLTexture.idl:
        * html/canvas/WebGLUniformLocation.cpp:
        * html/canvas/WebGLUniformLocation.h:
        * html/canvas/WebGLUniformLocation.idl:
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        * html/canvas/WebGLVertexArrayObjectOES.h:
        * html/canvas/WebGLVertexArrayObjectOES.idl:
        * html/forms/FileIconLoader.cpp:
        * html/forms/FileIconLoader.h:
        * html/parser/TextDocumentParser.cpp:
        * html/parser/TextDocumentParser.h:
        * html/shadow/MediaControlElementTypes.cpp:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/MediaControlsGtk.cpp:
        * html/shadow/MediaControlsGtk.h:
        * html/shadow/SpinButtonElement.cpp:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        * html/shadow/TextControlInnerElements.h:
        * html/track/AudioTrack.h:
        * html/track/AudioTrack.idl:
        * html/track/AudioTrackList.cpp:
        * html/track/AudioTrackList.h:
        * html/track/AudioTrackList.idl:
        * html/track/DataCue.cpp:
        * html/track/DataCue.h:
        * html/track/DataCue.idl:
        * html/track/InbandGenericTextTrack.cpp:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.cpp:
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.h:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackCueList.cpp:
        * html/track/TextTrackCueList.h:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackList.h:
        * html/track/TextTrackList.idl:
        * html/track/TextTrackRegion.idl:
        * html/track/TextTrackRegionList.cpp:
        * html/track/TextTrackRegionList.h:
        * html/track/TextTrackRegionList.idl:
        * html/track/TrackBase.cpp:
        * html/track/TrackBase.h:
        * html/track/TrackEvent.cpp:
        * html/track/TrackEvent.h:
        * html/track/TrackEvent.idl:
        * html/track/TrackListBase.cpp:
        * html/track/TrackListBase.h:
        * html/track/VTTCue.idl:
        * html/track/VideoTrack.h:
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackList.cpp:
        * html/track/VideoTrackList.h:
        * html/track/VideoTrackList.idl:
        * html/track/WebVTTElement.cpp:
        * html/track/WebVTTElement.h:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIModuleSource.js:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorClient.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorForwarding.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorNodeFinder.cpp:
        * inspector/InspectorNodeFinder.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorOverlayPage.html:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * loader/CookieJar.h:
        * loader/CrossOriginAccessControl.cpp:
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.cpp:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/DocumentWriter.cpp:
        * loader/EmptyClients.h:
        * loader/FormState.cpp:
        * loader/FormState.h:
        * loader/FrameLoadRequest.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        * loader/HistoryController.cpp:
        * loader/HistoryController.h:
        * loader/MixedContentChecker.cpp:
        * loader/NavigationAction.cpp:
        * loader/NavigationAction.h:
        * loader/NavigationScheduler.cpp:
        * loader/NavigationScheduler.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/PolicyCallback.cpp:
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        * loader/PolicyChecker.h:
        * loader/ProgressTracker.cpp:
        * loader/ProgressTracker.h:
        * loader/ResourceBuffer.cpp:
        * loader/ResourceBuffer.h:
        * loader/ResourceLoadNotifier.cpp:
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h:
        * loader/SinkDocument.cpp:
        * loader/SinkDocument.h:
        * loader/SubframeLoader.cpp:
        * loader/SubframeLoader.h:
        * loader/SubresourceLoader.cpp:
        * loader/SubresourceLoader.h:
        * loader/SubstituteData.h:
        * loader/TextTrackLoader.cpp:
        * loader/appcache/ApplicationCacheAllInOne.cpp:
        * loader/archive/Archive.cpp:
        * loader/archive/Archive.h:
        * loader/archive/ArchiveFactory.cpp:
        * loader/archive/ArchiveFactory.h:
        * loader/archive/ArchiveResource.cpp:
        * loader/archive/ArchiveResource.h:
        * loader/archive/ArchiveResourceCollection.cpp:
        * loader/archive/ArchiveResourceCollection.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        * loader/cache/CachePolicy.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedResourceRequest.cpp:
        * loader/cache/CachedResourceRequest.h:
        * loader/cache/CachedResourceRequestInitiators.cpp:
        * loader/cache/CachedResourceRequestInitiators.h:
        * loader/cf/ResourceLoaderCFNet.cpp:
        * loader/icon/IconController.cpp:
        * loader/icon/IconController.h:
        * loader/icon/IconDatabase.cpp:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.cpp:
        * loader/icon/IconDatabaseBase.h:
        * loader/icon/IconDatabaseClient.h:
        * loader/icon/IconLoader.cpp:
        * loader/icon/IconLoader.h:
        * loader/icon/IconRecord.cpp:
        * loader/icon/IconRecord.h:
        * loader/icon/PageURLRecord.cpp:
        * loader/icon/PageURLRecord.h:
        * loader/mac/DocumentLoaderMac.cpp:
        * loader/mac/LoaderNSURLExtras.h:
        * loader/mac/LoaderNSURLExtras.mm:
        * loader/mac/ResourceBuffer.mm:
        * loader/mac/ResourceLoaderMac.mm:
        * loader/win/DocumentLoaderWin.cpp:
        * loader/win/FrameLoaderWin.cpp:
        * mathml/MathMLAllInOne.cpp:
        * page/AbstractView.idl:
        * page/AlternativeTextClient.h:
        * page/AutoscrollController.cpp:
        * page/AutoscrollController.h:
        * page/BarProp.cpp:
        * page/BarProp.h:
        * page/BarProp.idl:
        * page/ContentSecurityPolicy.cpp:
        * page/ContentSecurityPolicy.h:
        * page/ContextMenuClient.h:
        * page/ContextMenuContext.cpp:
        * page/ContextMenuContext.h:
        * page/ContextMenuController.cpp:
        * page/ContextMenuController.h:
        * page/DOMSecurityPolicy.cpp:
        * page/DOMSecurityPolicy.h:
        * page/DOMSelection.cpp:
        * page/DOMSelection.h:
        * page/DOMSelection.idl:
        * page/DOMTimer.cpp:
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/DragActions.h:
        * page/DragClient.h:
        * page/DragController.cpp:
        * page/DragController.h:
        * page/DragSession.h:
        * page/DragState.h:
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * page/FocusController.cpp:
        * page/FocusController.h:
        * page/FocusDirection.h:
        * page/FrameTree.h:
        * page/GestureTapHighlighter.cpp:
        * page/GestureTapHighlighter.h:
        * page/History.cpp:
        * page/History.h:
        * page/History.idl:
        * page/Location.cpp:
        * page/Location.h:
        * page/Location.idl:
        * page/MouseEventWithHitTestResults.cpp:
        * page/MouseEventWithHitTestResults.h:
        * page/Navigator.cpp:
        * page/NavigatorBase.cpp:
        * page/NavigatorBase.h:
        * page/PageConsole.cpp:
        * page/PageConsole.h:
        * page/Screen.cpp:
        * page/Screen.h:
        * page/Screen.idl:
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:
        * page/SecurityOriginHash.h:
        * page/Settings.cpp:
        * page/Settings.h:
        * page/SpatialNavigation.cpp:
        * page/SuspendableTimer.cpp:
        * page/SuspendableTimer.h:
        * page/UserContentTypes.h:
        * page/UserContentURLPattern.cpp:
        * page/UserContentURLPattern.h:
        * page/UserScript.h:
        * page/UserScriptTypes.h:
        * page/UserStyleSheet.h:
        * page/UserStyleSheetTypes.h:
        * page/WebCoreKeyboardUIMode.h:
        * page/WebKitPoint.h:
        * page/WebKitPoint.idl:
        * page/WindowBase64.idl:
        * page/WindowFeatures.h:
        * page/WindowFocusAllowedIndicator.cpp:
        * page/WindowFocusAllowedIndicator.h:
        * page/WindowTimers.idl:
        * page/WorkerNavigator.cpp:
        * page/WorkerNavigator.h:
        * page/WorkerNavigator.idl:
        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CSSPropertyAnimation.cpp:
        * page/animation/CSSPropertyAnimation.h:
        * page/animation/CompositeAnimation.cpp:
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:
        * page/efl/DragControllerEfl.cpp:
        * page/efl/EventHandlerEfl.cpp:
        * page/gtk/DragControllerGtk.cpp:
        * page/gtk/EventHandlerGtk.cpp:
        * page/ios/EventHandlerIOS.mm:
        * page/mac/DragControllerMac.mm:
        * page/mac/EventHandlerMac.mm:
        * page/mac/PageMac.cpp:
        * page/mac/WebCoreFrameView.h:
        * page/make_settings.pl:
        * page/win/DragControllerWin.cpp:
        * page/win/EventHandlerWin.cpp:
        * page/win/FrameCGWin.cpp:
        * page/win/FrameCairoWin.cpp:
        * page/win/FrameGdiWin.cpp:
        * page/win/FrameWin.cpp:
        * page/win/FrameWin.h:
        * pdf/ios/PDFDocument.h:
        * platform/Clock.cpp:
        * platform/Clock.h:
        * platform/ClockGeneric.cpp:
        * platform/ClockGeneric.h:
        * platform/ColorChooser.h:
        * platform/ColorChooserClient.h:
        * platform/ContentType.cpp:
        * platform/ContentType.h:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        * platform/Cookie.h:
        * platform/Cursor.h:
        * platform/DragData.cpp:
        * platform/DragData.h:
        * platform/DragImage.cpp:
        * platform/DragImage.h:
        * platform/FileChooser.cpp:
        * platform/FileChooser.h:
        * platform/FileSystem.h:
        * platform/FloatConversion.h:
        * platform/KillRing.h:
        * platform/LinkHash.h:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/Logging.cpp:
        * platform/Logging.h:
        * platform/MIMETypeRegistry.cpp:
        * platform/MIMETypeRegistry.h:
        * platform/MediaDescription.h:
        * platform/MediaSample.h:
        * platform/NotImplemented.h:
        * platform/PODFreeListArena.h:
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformExportMacros.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMenuDescription.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformPasteboard.h:
        * platform/PlatformScreen.h:
        * platform/PlatformSpeechSynthesis.h:
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        * platform/PlatformSpeechSynthesisUtterance.h:
        * platform/PlatformSpeechSynthesisVoice.cpp:
        * platform/PlatformSpeechSynthesisVoice.h:
        * platform/PlatformSpeechSynthesizer.cpp:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/PlatformWheelEvent.h:
        * platform/PopupMenuClient.h:
        * platform/RemoteCommandListener.cpp:
        * platform/RemoteCommandListener.h:
        * platform/SSLKeyGenerator.h:
        * platform/SchemeRegistry.cpp:
        * platform/SchemeRegistry.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        * platform/Scrollbar.h:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/SharedTimer.h:
        * platform/Sound.h:
        * platform/ThreadCheck.h:
        * platform/ThreadGlobalData.cpp:
        * platform/ThreadGlobalData.h:
        * platform/ThreadTimers.cpp:
        * platform/ThreadTimers.h:
        * platform/Timer.cpp:
        * platform/Timer.h:
        * platform/URL.cpp:
        * platform/URL.h:
        * platform/Widget.cpp:
        * platform/Widget.h:
        * platform/animation/AnimationUtilities.h:
        * platform/audio/AudioArray.h:
        * platform/audio/AudioBus.cpp:
        * platform/audio/AudioBus.h:
        * platform/audio/AudioChannel.cpp:
        * platform/audio/AudioChannel.h:
        * platform/audio/AudioDestination.h:
        * platform/audio/AudioFIFO.cpp:
        * platform/audio/AudioFIFO.h:
        * platform/audio/AudioFileReader.h:
        * platform/audio/AudioIOCallback.h:
        * platform/audio/AudioPullFIFO.cpp:
        * platform/audio/AudioPullFIFO.h:
        * platform/audio/AudioSourceProvider.h:
        * platform/audio/Biquad.cpp:
        * platform/audio/Biquad.h:
        * platform/audio/Cone.cpp:
        * platform/audio/Cone.h:
        * platform/audio/DirectConvolver.cpp:
        * platform/audio/DirectConvolver.h:
        * platform/audio/Distance.cpp:
        * platform/audio/Distance.h:
        * platform/audio/DownSampler.cpp:
        * platform/audio/DownSampler.h:
        * platform/audio/DynamicsCompressor.cpp:
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.cpp:
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/FFTConvolver.cpp:
        * platform/audio/FFTConvolver.h:
        * platform/audio/FFTFrame.cpp:
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFDatabase.cpp:
        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/HRTFElevation.cpp:
        * platform/audio/HRTFElevation.h:
        * platform/audio/HRTFKernel.cpp:
        * platform/audio/HRTFKernel.h:
        * platform/audio/MultiChannelResampler.cpp:
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Panner.cpp:
        * platform/audio/Panner.h:
        * platform/audio/Reverb.cpp:
        * platform/audio/Reverb.h:
        * platform/audio/ReverbAccumulationBuffer.cpp:
        * platform/audio/ReverbAccumulationBuffer.h:
        * platform/audio/ReverbConvolver.cpp:
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.cpp:
        * platform/audio/ReverbConvolverStage.h:
        * platform/audio/ReverbInputBuffer.cpp:
        * platform/audio/ReverbInputBuffer.h:
        * platform/audio/SincResampler.cpp:
        * platform/audio/SincResampler.h:
        * platform/audio/UpSampler.cpp:
        * platform/audio/UpSampler.h:
        * platform/audio/ZeroPole.cpp:
        * platform/audio/ZeroPole.h:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioFileReaderIOS.cpp:
        * platform/audio/ios/AudioFileReaderIOS.h:
        * platform/audio/mac/AudioDestinationMac.cpp:
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/mac/AudioFileReaderMac.cpp:
        * platform/audio/mac/AudioFileReaderMac.h:
        * platform/audio/mac/FFTFrameMac.cpp:
        * platform/cf/FileSystemCF.cpp:
        * platform/cf/SharedBufferCF.cpp:
        * platform/cf/URLCF.cpp:
        * platform/cocoa/KeyEventCocoa.h:
        * platform/cocoa/KeyEventCocoa.mm:
        * platform/efl/CursorEfl.cpp:
        * platform/efl/EflKeyboardUtilities.cpp:
        * platform/efl/EflKeyboardUtilities.h:
        * platform/efl/FileSystemEfl.cpp:
        * platform/efl/LanguageEfl.cpp:
        * platform/efl/LocalizedStringsEfl.cpp:
        * platform/efl/MIMETypeRegistryEfl.cpp:
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        * platform/efl/PlatformMouseEventEfl.cpp:
        * platform/efl/PlatformScreenEfl.cpp:
        * platform/efl/PlatformWheelEventEfl.cpp:
        * platform/efl/RenderThemeEfl.h:
        * platform/efl/ScrollbarEfl.h:
        * platform/efl/SharedTimerEfl.cpp:
        * platform/efl/SoundEfl.cpp:
        * platform/efl/TemporaryLinkStubs.cpp:
        * platform/efl/WidgetEfl.cpp:
        * platform/graphics/ANGLEWebKitBridge.cpp:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/AudioTrackPrivate.h:
        * platform/graphics/BitmapImage.cpp:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.cpp:
        * platform/graphics/Color.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/DashArray.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.cpp:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatQuad.cpp:
        * platform/graphics/FloatQuad.h:
        * platform/graphics/FloatRect.cpp:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.cpp:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontBaseline.h:
        * platform/graphics/FontCache.cpp:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontData.cpp:
        * platform/graphics/FontData.h:
        * platform/graphics/FontDescription.cpp:
        * platform/graphics/FontFeatureSettings.cpp:
        * platform/graphics/FontFeatureSettings.h:
        * platform/graphics/FontGlyphs.cpp:
        * platform/graphics/FontOrientation.h:
        * platform/graphics/FontRenderingMode.h:
        * platform/graphics/FontSelector.h:
        * platform/graphics/FontWidthVariant.h:
        * platform/graphics/FormatConverter.cpp:
        * platform/graphics/FormatConverter.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Glyph.h:
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/GlyphMetricsMap.h:
        * platform/graphics/GlyphPage.h:
        * platform/graphics/GlyphPageTreeNode.cpp:
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.cpp:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/GraphicsTypes.cpp:
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/GraphicsTypes3D.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/ImageObserver.h:
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/ImageSource.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        * platform/graphics/InbandTextTrackPrivateClient.h:
        * platform/graphics/IntPoint.cpp:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntSize.cpp:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/MediaSourcePrivateClient.h:
        * platform/graphics/NativeImagePtr.h:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/Path.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/PathTraversalState.h:
        * platform/graphics/Pattern.cpp:
        * platform/graphics/Pattern.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/PlatformTimeRanges.cpp:
        * platform/graphics/PlatformTimeRanges.h:
        * platform/graphics/SegmentedFontData.cpp:
        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/ShadowBlur.cpp:
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/SimpleFontData.cpp:
        * platform/graphics/SourceBufferPrivateClient.h:
        * platform/graphics/StringTruncator.cpp:
        * platform/graphics/StringTruncator.h:
        * platform/graphics/TrackPrivateBase.h:
        * platform/graphics/VideoTrackPrivate.h:
        * platform/graphics/WindRule.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/AVFoundationCFSoftLinking.h:
        * platform/graphics/avfoundation/cf/CoreMediaSoftLinking.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.cpp:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        * 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.cpp:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/TransformationMatrixCA.cpp:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        * platform/graphics/ca/mac/LayerPool.mm:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/ca/mac/WebTiledBackingLayer.h:
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:
        * 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:
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        * platform/graphics/cairo/CairoUtilities.cpp:
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        * platform/graphics/cairo/FloatRectCairo.cpp:
        * platform/graphics/cairo/FontCairo.cpp:
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        * platform/graphics/cairo/GradientCairo.cpp:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        * platform/graphics/cairo/PatternCairo.cpp:
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        * platform/graphics/cairo/PlatformContextCairo.h:
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        * platform/graphics/cg/BitmapImageCG.cpp:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.h:
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cg/ImageCG.cpp:
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/IntSizeCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        * platform/graphics/efl/IconEfl.cpp:
        * platform/graphics/efl/ImageEfl.cpp:
        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        * platform/graphics/gtk/GdkCairoUtilities.cpp:
        * platform/graphics/gtk/GdkCairoUtilities.h:
        * platform/graphics/gtk/IconGtk.cpp:
        * platform/graphics/gtk/ImageGtk.cpp:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        * platform/graphics/ios/FontCacheIOS.mm:
        * platform/graphics/ios/GraphicsContext3DIOS.h:
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h:
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        * platform/graphics/mac/FloatPointMac.mm:
        * platform/graphics/mac/FloatRectMac.mm:
        * platform/graphics/mac/FloatSizeMac.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/mac/GraphicsContextMac.mm:
        * platform/graphics/mac/ImageMac.mm:
        * platform/graphics/mac/IntPointMac.mm:
        * platform/graphics/mac/IntRectMac.mm:
        * platform/graphics/mac/IntSizeMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/mac/MediaPlayerProxy.h:
        * platform/graphics/mac/WebCoreCALayerExtras.h:
        * platform/graphics/mac/WebCoreCALayerExtras.mm:
        * 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/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/transforms/AffineTransform.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/TransformState.cpp:
        * platform/graphics/transforms/TransformState.h:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/FontCGWin.cpp:
        * platform/graphics/win/FontCacheWin.cpp:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        * platform/graphics/win/FontWin.cpp:
        * platform/graphics/win/FullScreenController.cpp:
        * platform/graphics/win/FullScreenController.h:
        * platform/graphics/win/FullScreenControllerClient.h:
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        * platform/graphics/win/ImageCGWin.cpp:
        * platform/graphics/win/ImageCairoWin.cpp:
        * platform/graphics/win/ImageWin.cpp:
        * platform/graphics/win/IntPointWin.cpp:
        * platform/graphics/win/IntRectWin.cpp:
        * platform/graphics/win/IntSizeWin.cpp:
        * platform/graphics/win/LocalWindowsContext.h:
        * platform/graphics/win/MediaPlayerPrivateTaskTimer.cpp:
        * platform/graphics/win/MediaPlayerPrivateTaskTimer.h:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        * platform/graphics/win/TransformationMatrixWin.cpp:
        * platform/graphics/wince/FontCacheWinCE.cpp:
        * platform/graphics/wince/FontWinCE.cpp:
        * platform/graphics/wince/MediaPlayerPrivateWinCE.h:
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        * platform/gtk/CompositionResults.h:
        * platform/gtk/CursorGtk.cpp:
        * platform/gtk/GtkPluginWidget.cpp:
        * platform/gtk/GtkPluginWidget.h:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        * platform/gtk/PlatformMouseEventGtk.cpp:
        * platform/gtk/PlatformScreenGtk.cpp:
        * platform/gtk/PlatformWheelEventGtk.cpp:
        * platform/gtk/RedirectedXCompositeWindow.cpp:
        * platform/gtk/RedirectedXCompositeWindow.h:
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/gtk/SharedTimerGtk.cpp:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/gtk/UserAgentGtk.cpp:
        * platform/gtk/UserAgentGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        * platform/gtk/WidgetRenderingContext.cpp:
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        * platform/image-decoders/webp/WEBPImageDecoder.h:
        * platform/ios/CursorIOS.cpp:
        * platform/ios/DragImageIOS.mm:
        * platform/ios/KeyEventCodesIOS.h:
        * platform/ios/KeyEventIOS.mm:
        * platform/ios/PlatformPasteboardIOS.mm:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        * platform/ios/RemoteCommandListenerIOS.h:
        * platform/ios/RemoteCommandListenerIOS.mm:
        * platform/ios/ScrollViewIOS.mm:
        * platform/ios/SoundIOS.mm:
        * platform/ios/SystemMemory.h:
        * platform/ios/SystemMemoryIOS.cpp:
        * platform/ios/WebCoreSystemInterfaceIOS.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/ios/WidgetIOS.mm:
        * platform/mac/BlockExceptions.h:
        * platform/mac/BlockExceptions.mm:
        * platform/mac/ContextMenuItemMac.mm:
        * platform/mac/ContextMenuMac.mm:
        * platform/mac/CursorMac.mm:
        * platform/mac/DragDataMac.mm:
        * platform/mac/DragImageMac.mm:
        * platform/mac/FileSystemMac.mm:
        * platform/mac/KeyEventMac.mm:
        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/mac/LocalCurrentGraphicsContext.mm:
        * platform/mac/LoggingMac.mm:
        * platform/mac/MIMETypeRegistryMac.mm:
        * platform/mac/MediaTimeMac.cpp:
        * platform/mac/MediaTimeMac.h:
        * platform/mac/PasteboardMac.mm:
        * platform/mac/PlatformClockCA.cpp:
        * platform/mac/PlatformClockCA.h:
        * platform/mac/PlatformClockCM.h:
        * platform/mac/PlatformClockCM.mm:
        * platform/mac/PlatformPasteboardMac.mm:
        * platform/mac/PlatformScreenMac.mm:
        * platform/mac/PlatformSpeechSynthesisMac.mm:
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/SharedBufferMac.mm:
        * platform/mac/SharedTimerMac.mm:
        * platform/mac/SoftLinking.h:
        * platform/mac/SoundMac.mm:
        * platform/mac/ThreadCheck.mm:
        * platform/mac/URLMac.mm:
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreNSStringExtras.mm:
        * platform/mac/WebCoreNSURLExtras.h:
        * platform/mac/WebCoreNSURLExtras.mm:
        * platform/mac/WebCoreObjCExtras.h:
        * platform/mac/WebCoreObjCExtras.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/mac/WebCoreView.h:
        * platform/mac/WebCoreView.m:
        * platform/mac/WebFontCache.h:
        * platform/mac/WebFontCache.mm:
        * platform/mac/WebWindowAnimation.h:
        * platform/mac/WebWindowAnimation.mm:
        * platform/mac/WidgetMac.mm:
        * platform/mediastream/MediaStreamConstraintsValidationClient.h:
        * platform/mediastream/MediaStreamCreationClient.h:
        * platform/mediastream/MediaStreamSourceCapabilities.h:
        * platform/mediastream/MediaStreamSourceStates.h:
        * platform/mediastream/MediaStreamTrackSourcesRequestClient.h:
        * platform/mediastream/RTCIceServer.h:
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        * platform/mock/MockMediaStreamCenter.cpp:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        * platform/mock/mediasource/MockBox.cpp:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        * platform/mock/mediasource/MockTracks.cpp:
        * platform/mock/mediasource/MockTracks.h:
        * platform/network/AuthenticationChallengeBase.cpp:
        * platform/network/AuthenticationChallengeBase.h:
        * platform/network/Credential.cpp:
        * platform/network/Credential.h:
        * platform/network/DNS.h:
        * platform/network/DNSResolveQueue.cpp:
        * platform/network/DNSResolveQueue.h:
        * platform/network/DataURL.cpp:
        * platform/network/DataURL.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/HTTPParsers.cpp:
        * platform/network/HTTPParsers.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/ProtectionSpace.cpp:
        * platform/network/ProtectionSpace.h:
        * platform/network/ResourceErrorBase.cpp:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/AuthenticationCF.cpp:
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/cf/DNSCFNet.cpp:
        * platform/network/cf/DownloadBundle.h:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceErrorCF.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/network/curl/AuthenticationChallenge.h:
        * platform/network/curl/CurlDownload.cpp:
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/DNSCurl.cpp:
        * platform/network/curl/DownloadBundle.h:
        * platform/network/curl/FormDataStreamCurl.cpp:
        * platform/network/curl/FormDataStreamCurl.h:
        * platform/network/curl/ResourceError.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        * platform/network/curl/ResourceHandleManager.h:
        * platform/network/curl/ResourceRequest.h:
        * platform/network/curl/ResourceResponse.h:
        * platform/network/curl/SSLHandle.cpp:
        * platform/network/curl/SSLHandle.h:
        * platform/network/gtk/CredentialBackingStore.cpp:
        * platform/network/gtk/CredentialBackingStore.h:
        * platform/network/ios/WebCoreURLResponseIOS.h:
        * platform/network/ios/WebCoreURLResponseIOS.mm:
        * platform/network/mac/AuthenticationMac.h:
        * platform/network/mac/AuthenticationMac.mm:
        * platform/network/mac/CookieJarMac.mm:
        * platform/network/mac/CookieStorageMac.mm:
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        * platform/network/mac/ResourceErrorMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/mac/ResourceRequestMac.mm:
        * platform/network/mac/ResourceResponseMac.mm:
        * platform/network/mac/WebCoreURLResponse.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        * platform/network/soup/AuthenticationChallenge.h:
        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        * platform/network/soup/CookieJarSoup.h:
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/ResourceError.h:
        * platform/network/soup/ResourceErrorSoup.cpp:
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceResponse.h:
        * platform/network/soup/SoupNetworkSession.cpp:
        * platform/network/soup/SoupNetworkSession.h:
        * platform/network/win/CookieJarWin.cpp:
        * platform/network/win/DownloadBundleWin.cpp:
        * platform/network/win/ResourceError.h:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/network/win/ResourceRequest.h:
        * platform/network/win/ResourceResponse.h:
        * platform/posix/FileSystemPOSIX.cpp:
        * platform/posix/SharedBufferPOSIX.cpp:
        * platform/soup/URLSoup.cpp:
        * platform/sql/SQLValue.cpp:
        * platform/sql/SQLValue.h:
        * platform/sql/SQLiteAuthorizer.cpp:
        * platform/sql/SQLiteDatabase.cpp:
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        * platform/sql/SQLiteStatement.h:
        * platform/sql/SQLiteTransaction.cpp:
        * platform/sql/SQLiteTransaction.h:
        * platform/text/SuffixTree.h:
        * platform/text/TextAllInOne.cpp:
        * platform/text/TextBoundaries.cpp:
        * platform/text/TextBoundaries.h:
        * platform/text/TextCodec.cpp:
        * platform/text/TextCodec.h:
        * platform/text/TextCodecASCIIFastPath.h:
        * platform/text/TextCodecICU.cpp:
        * platform/text/TextCodecICU.h:
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecLatin1.h:
        * platform/text/TextCodecUTF16.cpp:
        * platform/text/TextCodecUTF16.h:
        * platform/text/TextCodecUTF8.cpp:
        * platform/text/TextCodecUTF8.h:
        * platform/text/TextCodecUserDefined.cpp:
        * platform/text/TextCodecUserDefined.h:
        * platform/text/TextDirection.h:
        * platform/text/TextEncoding.cpp:
        * platform/text/TextEncoding.h:
        * platform/text/TextEncodingRegistry.cpp:
        * platform/text/TextEncodingRegistry.h:
        * platform/text/TextStream.cpp:
        * platform/text/TextStream.h:
        * platform/text/UnicodeBidi.h:
        * platform/text/mac/CharsetData.h:
        * platform/text/mac/TextBoundaries.mm:
        * platform/text/mac/TextCodecMac.cpp:
        * platform/text/mac/TextCodecMac.h:
        * platform/text/mac/character-sets.txt:
        * platform/text/mac/make-charset-table.pl:
        * platform/text/win/TextCodecWin.h:
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * platform/win/COMPtr.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/ContextMenuItemWin.cpp:
        * platform/win/ContextMenuWin.cpp:
        * platform/win/CursorWin.cpp:
        * platform/win/DragDataWin.cpp:
        * platform/win/DragImageCGWin.cpp:
        * platform/win/DragImageCairoWin.cpp:
        * platform/win/DragImageWin.cpp:
        * platform/win/FileSystemWin.cpp:
        * platform/win/GDIObjectCounter.cpp:
        * platform/win/GDIObjectCounter.h:
        * platform/win/HWndDC.h:
        * platform/win/KeyEventWin.cpp:
        * platform/win/LanguageWin.cpp:
        * platform/win/MIMETypeRegistryWin.cpp:
        * platform/win/PasteboardWin.cpp:
        * platform/win/PlatformMouseEventWin.cpp:
        * platform/win/PlatformScreenWin.cpp:
        * platform/win/SharedBufferWin.cpp:
        * platform/win/SharedTimerWin.cpp:
        * platform/win/SoftLinking.h:
        * platform/win/SoundWin.cpp:
        * platform/win/StructuredExceptionHandlerSuppressor.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/WCDataObject.cpp:
        * platform/win/WCDataObject.h:
        * platform/win/WebCoreTextRenderer.cpp:
        * platform/win/WebCoreTextRenderer.h:
        * platform/win/WheelEventWin.cpp:
        * platform/win/WidgetWin.cpp:
        * platform/win/WindowMessageBroadcaster.cpp:
        * platform/win/WindowMessageBroadcaster.h:
        * platform/win/WindowMessageListener.h:
        * platform/win/WindowsTouch.h:
        * platform/win/makesafeseh.asm:
        * plugins/PluginDatabase.cpp:
        * plugins/PluginDatabase.h:
        * plugins/PluginDebug.cpp:
        * plugins/PluginDebug.h:
        * plugins/PluginPackage.cpp:
        * plugins/PluginPackage.h:
        * plugins/PluginQuirkSet.h:
        * plugins/PluginStream.cpp:
        * plugins/PluginStream.h:
        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/efl/PluginPackageEfl.cpp:
        * plugins/efl/PluginViewEfl.cpp:
        * plugins/gtk/PluginPackageGtk.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginPackageMac.cpp:
        * plugins/mac/PluginViewMac.mm:
        * plugins/npapi.cpp:
        * plugins/npfunctions.h:
        * plugins/npruntime.h:
        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginPackageWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        * plugins/x11/PluginViewX11.cpp:
        * rendering/EllipsisBox.cpp:
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.cpp:
        * rendering/FilterEffectRenderer.h:
        * rendering/HitTestLocation.h:
        * rendering/HitTestRequest.h:
        * rendering/HitTestResult.h:
        * rendering/HitTestingTransformState.cpp:
        * rendering/HitTestingTransformState.h:
        * rendering/RenderBoxRegionInfo.h:
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFrameBase.cpp:
        * rendering/RenderFrameBase.h:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderGeometryMap.cpp:
        * rendering/RenderGeometryMap.h:
        * rendering/RenderGrid.cpp:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.cpp:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.cpp:
        * rendering/RenderIFrame.h:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLineBoxList.cpp:
        * rendering/RenderLineBoxList.h:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderMarquee.h:
        * rendering/RenderMedia.cpp:
        * rendering/RenderMedia.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowThread.cpp:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegionSet.cpp:
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplica.cpp:
        * rendering/RenderReplica.h:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWinCE.cpp:
        * rendering/RenderThemeWinCE.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/RenderTreeAsText.h:
        * rendering/RenderVTTCue.cpp:
        * rendering/RenderVTTCue.h:
        * rendering/RenderVideo.cpp:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/StyleFilterData.cpp:
        * rendering/style/StyleFilterData.h:
        * rendering/style/StylePendingImage.h:
        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGRootInlineBox.h:
        * storage/StorageEventDispatcher.h:
        * svg/SVGException.cpp:
        * svg/graphics/SVGImageChromeClient.h:
        * workers/Worker.cpp:
        * workers/Worker.h:
        * workers/Worker.idl:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScope.idl:
        * workers/WorkerLocation.cpp:
        * workers/WorkerLocation.h:
        * workers/WorkerLocation.idl:
        * workers/WorkerMessagingProxy.cpp:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerScriptLoader.cpp:
        * workers/WorkerScriptLoader.h:
        * workers/WorkerScriptLoaderClient.h:
        * workers/WorkerThread.cpp:
        * workers/WorkerThread.h:
        * xml/DOMParser.h:
        * xml/DOMParser.idl:
        * xml/NativeXPathNSResolver.cpp:
        * xml/NativeXPathNSResolver.h:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.cpp:
        * xml/XMLHttpRequestException.h:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestProgressEvent.h:
        * xml/XMLHttpRequestProgressEvent.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.h:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.cpp:
        * xml/XPathEvaluator.h:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.cpp:
        * xml/XPathException.h:
        * xml/XPathException.idl:
        * xml/XPathExpression.idl:
        * xml/XPathExpressionNode.cpp:
        * xml/XPathNSResolver.cpp:
        * xml/XPathNSResolver.h:
        * xml/XPathNSResolver.idl:
        * xml/XPathNodeSet.h:
        * xml/XPathResult.idl:
        * xml/XPathUtil.h:
        * xml/XPathVariableReference.cpp:
        * xml/XSLTProcessor.idl:
        * xml/XSLTUnicodeSort.cpp:
        * xml/XSLTUnicodeSort.h:

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        Fix scrollperf logging
        https://bugs.webkit.org/show_bug.cgi?id=130278
        <rdar://problem/16320003>

        Reviewed by Anders Carlsson.
        
        r165493 broke scrollperf logging by adding in the scroll position
        to the viewport rect, which used to be 0,0 based. Restore
        the previous behavior.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):

2014-03-14  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: border-radius painting falls back to rectangle at subpixel positions.
        https://bugs.webkit.org/show_bug.cgi?id=130272

        Unreviewed. Missing piece from http://trac.webkit.org/changeset/165670

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting):

2014-03-14  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: border-radius painting falls back to rectangle at subpixel positions.
        https://bugs.webkit.org/show_bug.cgi?id=130272

        Reviewed by Simon Fraser.

        Rounded rectangle's radius needs adjustment after its containing rect gets pixel snapped.
        Keeping the old radius value could make rounded rectangle non-renderable, because the
        originally calculated radius length does not fit the snapped rectangle anymore.

        Test: fast/borders/hidpi-border-radius-outer-border-goes-rectangle.html

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] background-attachment: fixed renders oddly, moves around
        https://bugs.webkit.org/show_bug.cgi?id=130277
        <rdar://problem/16332883>

        Reviewed by Tim Horton.

        If we have a counter-scrolling layer (for a fixed background), move
        it around when changing the viewport.

        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::updateForViewport):

2014-03-14  Jae Hyun Park  <jaepark@webkit.org>

        [Texmap] Remove duplicated code in TextureMapperLayer
        https://bugs.webkit.org/show_bug.cgi?id=130173

        Reviewed by Martin Robinson.

        This patch is a simple refactoring to remove duplicated code in
        TextureMapperLayer.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::~TextureMapperLayer):
        (WebCore::TextureMapperLayer::removeFromParent):

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        Release-assert if someone starts the WebThread in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=130270
        <rdar://problem/16332380>

        Reviewed by Sam Weinig.

        If someone tries to start the WebThread in the WebProcess, assert,
        even in release builds, because this should never happen.

        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadEnable):

2014-03-14  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Clean up unused externs from WebCore logging.
        https://bugs.webkit.org/show_bug.cgi?id=130240

        Reviewed by Andreas Kling.

        * platform/Logging.h:

2014-03-14  James Craig  <jcraig@apple.com>

        AX: AccessibilityObject::invalidStatus() is incorrect when aria-invalid="undefined" or whitespace
        https://bugs.webkit.org/show_bug.cgi?id=130071

        Reviewed by Chris Fleizach.

        Accounted for whitespace values and the explicit string, "undefined".

        Test: accessibility/aria-invalid.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::invalidStatus):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):

2014-03-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] CSS parser accepts trailing position arguments
        https://bugs.webkit.org/show_bug.cgi?id=129514

        Reviewed by Andreas Kling.

        Add a check to make sure there are no remaining function args
        following a position in the circle() and ellipse() css shape
        functions.

        Updated existing parsing tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeCircle):
        (WebCore::CSSParser::parseBasicShapeEllipse):

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build and sort the exports file.

        * WebCore.exp.in:

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Improve behavior of fixed elments on zooming
        https://bugs.webkit.org/show_bug.cgi?id=130253

        Reviewed by Beth Dakin.

        Correctly reposition right- and bottom-relative position:fixed
        elements on zooming in WK2 iOS by telling the scrolling tree
        about zoom-related viewport changes.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::rectForViewportConstrainedObjects):
        (WebCore::FrameView::viewportConstrainedObjectsRect): We need to be able to
        recompute the fixed position rect from the scrolling tree on iOS, so we need
        a static function, similar to scrollOffsetForFixedPosition(), that computes
        the constrained viewport.
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor): When scrolling (and, by implication, zooming)
        is delegated, then setPageScaleFactor() should not affect the scroll position.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Go back to just
        passing the visibleContentRect() for iOS.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling): Entrypoint to
        the scrolling tree, called when the viewport is changed by zooming.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition): Use the
        new FrameView::rectForViewportConstrainedObjects() to compute the correct viewport
        for fixed/sticky child nodes.
        (WebCore::ScrollingTreeScrollingNodeIOS::updateForViewport):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateForViewport):

2014-03-14  Dirk Schulze  <krit@webkit.org>

        Refactor Path to Path2D and remove currentPath
        https://bugs.webkit.org/show_bug.cgi?id=130236

        Reviewed by Dean Jackson.

        Other implementations prefer Path2D over Path. Furthermore, currentPath is not the right
        way to apply a Path2D object to a context. Main argument is that currentPath creates a copy
        of the Path2D object. Instead we pass Path2D as argument to fill, stroke and clip now.

        Tests: fast/canvas/canvas-clip-path.html
               fast/canvas/canvas-fill-path.html
               fast/canvas/canvas-stroke-path.html

        * bindings/scripts/CodeGeneratorJS.pm: WebIDL parser didn't handle enumerations
            for overloaded methods at all.
        (GenerateParametersCheckExpression):
        * html/canvas/CanvasRenderingContext2D.cpp: New functions with DOMPath argument.
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::clip):
        (WebCore::CanvasRenderingContext2D::fillInternal): Internal method to avoid code duplication
            and copy operation.
        (WebCore::CanvasRenderingContext2D::strokeInternal): Ditto.
        (WebCore::CanvasRenderingContext2D::clipInternal): Ditto.
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl: Rename Path to Path2D.

2014-03-14  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder should take a const reference to InsertedNodes
        https://bugs.webkit.org/show_bug.cgi?id=130232

        Reviewed by Andreas Kling.

        This method doesn't modify InsertedNodes object.

        No new tests, no behavior change.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        * editing/ReplaceSelectionCommand.h:

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

        [EME] Extend the lifetime of MediaKeySession.
        https://bugs.webkit.org/show_bug.cgi?id=129841

        Reviewed by Eric Carlson.

        Test: media/encrypted-media/encrypted-media-session-lifetime.html

        In anticipation of guidance to be added to the EME Spec <https://www.w3.org/Bugs/Public/show_bug.cgi?id=24771>,
        extend the lifetime of MediaKeySession by making the session an ActiveDOMObject, and returning true to
        hasPendingActivity when the session is both not closed and is associated with a live MediaKeys object.

        Additionally, keep the object from being destroyed while events are pending.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySession.idl:

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

        Remove an unused function fix builds.

        * platform/mac/HTMLConverter.mm:

2014-03-14  Frédéric Wang  <fred.wang@free.fr>

        FontCache: Replace DEPRECATED_DEFINE_STATIC_LOCAL with static NeverDestroyed<T>.
        https://bugs.webkit.org/show_bug.cgi?id=130233

        Reviewed by Andreas Kling.

        No new tests.

        * platform/graphics/FontCache.cpp:
        (WebCore::fontCache):
        (WebCore::FontVerticalDataCacheKeyTraits::emptyValue):
        (WebCore::fontVerticalDataCacheInstance):
        (WebCore::FontDataCacheKeyTraits::emptyValue):
        * platform/graphics/FontCache.h:

2014-03-11  Oliver Hunt  <oliver@apple.com>

        Improve dom error messages
        https://bugs.webkit.org/show_bug.cgi?id=130103

        Reviewed by Andreas Kling.

        Make the DOM error messages more descriptive, and update bindings tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * 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):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod3):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        (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):
        (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):
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionByteMethod):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethod):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethod):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionCustomMethod):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces):
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClamp):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionOrange):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithSequence):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithArray):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        (WebCore::jsTestObjPrototypeFunctionAny):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::constructJSTestTypedefs):
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsImmutableSerializedScriptValue):
        (WebCore::jsTestTypedefsConstructorTestSubObj):
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsAttrWithSetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithSetterException):
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        (WebCore::jsTestTypedefsPrototypeFunctionFunc):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableArrayArg):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp):
        (WebCore::jsTestTypedefsPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction2):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithException):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeReadonly):

2014-03-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] polygon default fill-rule should be omitted from the serialization
        https://bugs.webkit.org/show_bug.cgi?id=129840

        Reviewed by Dirk Schulze.

        Modifying the default polygon string opening to be "polygon(" rather than
        "polygon(nonzero".

        Updated existing parsing tests.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildPolygonString):

2014-03-14  Brent Fulgham  <bfulgham@apple.com>

        Crash when using a mixture of In-Band and Out-of-Band Tracks
        https://bugs.webkit.org/show_bug.cgi?id=130247

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::processNewAndRemovedTextTracks): Do not include
        the new Out-of-Band placeholder tracks in our counts of in-band tracks.

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

        [Mac] Avoid creating DOMCSSStyleDeclaration in WebHTMLConverter
        https://bugs.webkit.org/show_bug.cgi?id=130226

        Reviewed by Andreas Kling.

        Extracted HTMLConverterCaches in C++ that directly calls getPropertyCSSValue on computed style
        and inline style to avoid creating Objective-C wrappers for CSSComputedStyleDeclaration.

        This improves the runtime of PerformanceTests/Interactive/CopyAll.html from 31-32s to 25-26s (20%).

        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        (HTMLConverterCaches::computedStylePropertyForElement):
        (HTMLConverterCaches::inlineStylePropertyForElement):
        (stringFromCSSValue):
        (-[WebHTMLConverter _computedStringForNode:property:]):
        (floatValueFromPrimitiveValue):
        (_getFloat):
        (-[WebHTMLConverter _getComputedFloat:forNode:property:]):
        (-[WebHTMLConverter _computedColorForNode:property:]):
        (-[WebHTMLConverter dealloc]):
        (-[WebHTMLConverter init]):

2014-03-14  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Include Role as an extra attribute in the page overlay.
        https://bugs.webkit.org/show_bug.cgi?id=130214

        Reviewed by Timothy Hatcher.

        Adding Role to the Web Inspector element overlay.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * inspector/InspectorOverlayPage.js:
        (_createElementTitle):

2014-03-14  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Expose Accessibility Tree parent of the selected node
        https://bugs.webkit.org/show_bug.cgi?id=129943

        Reviewed by Timothy Hatcher.

        Tests: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        Web Accessibility Node Inspector now displays a link to the AX parent node,
        because it's not a 1:1 match with the DOMNode parent.

        * inspector/InspectorDOMAgent.cpp: Support for DOMNode.role and AccessibilityProperties.axParentNodeId.
        (WebCore::InspectorDOMAgent::buildObjectForNode): Support for role.
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties): Support for axParentNodeId.
        * inspector/protocol/DOM.json: Added axParentNodeId on AccessibilityProperties, and role on DOMNode.

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

        [Mac] Remove NSURLCache logic from WebCore pressure relief code.
        <https://webkit.org/b/130248>

        The NSURLCache lives in the networking process and should be cleared
        on that end. Furthermore, this code doesn't really do what we thought
        it was doing; it merely sets and and resets the limits. No truncation
        ever occurred. The intended functionality was implemented in r165342.

        Reviewed by Anders Carlsson.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):

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

        Simplify jettisoning of style resolvers on memory pressure.
        <https://webkit.org/b/129644>

        Now that we have Document::allDocuments(), we can jettison all the
        style resolvers by walking the set of live documents and calling
        clearStyleResolver() on each one, instead of having a function on
        Page that walks the frame tree of every living page, etc.

        Reviewed by Antti Koivisto.

        * page/Page.cpp:
        * page/Page.h:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):

2014-03-07  Jer Noble  <jer.noble@apple.com>

        Add Remote Control command support to HTLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=129926

        Reviewed by Eric Carlson.

        Support the new MediaSession remote control commands by pulling in code from
        MediaControlElementTypes to control scanning.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLMediaElement.h:
        * html/MediaController.cpp:
        (MediaController::beginScanning): Moved from MediaControlElementTypes.
        (MediaController::endScanning): Ditto.
        * html/MediaController.h:
        * html/MediaControllerInterface.h:

        Remove all the scanning code from MediaControlSeekButtonElement.
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement):
        (WebCore::MediaControlSeekButtonElement::setActive):
        * html/shadow/MediaControlElementTypes.h:

2014-03-14  Krzysztof Czech  <k.czech@samsung.com>

        Move WebSpeech code to use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=130231

        Reviewed by Anders Carlsson.

        Replace uses of OwnPtr and PassOwnPtr in WebSpeech code with std::unique_ptr.

        No new tests. Covered by existing ones.

        * Modules/speech/SpeechRecognitionController.cpp:
        * Modules/speech/SpeechRecognitionController.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::setPlatformSynthesizer):
        (WebCore::SpeechSynthesis::getVoices):
        (WebCore::SpeechSynthesis::startSpeakingImmediately):
        * Modules/speech/SpeechSynthesis.h:
        * WebCore.exp.in:
        * platform/PlatformSpeechSynthesizer.cpp:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        * testing/Internals.cpp:
        (WebCore::Internals::enableMockSpeechSynthesizer):

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Move visited link handling to VisitedLinkTableController and VisitedLinkProvider
        https://bugs.webkit.org/show_bug.cgi?id=130223
        <rdar://problem/16315792>

        Reviewed by Dan Bernstein.

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2014-03-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Fix unused parameter warnings in the GObject WebKitDOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=130174

        Reviewed by Daniel Bates.

        * bindings/gobject/DOMObjectCache.cpp:
        (WebKit::weakRefNotify): Fix unused parameters.
        * bindings/gobject/WebKitDOMDeprecated.cpp: Ditto.
        * bindings/gobject/WebKitDOMObject.cpp: Ditto.
        * bindings/scripts/CodeGeneratorGObject.pm: Generate UNUSED_PARAM when appropriate and clean
        up the getter and setter code generation a little to make it easier to read.

2014-03-14  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Build fix with SUBPIXEL_LAYOUT disabled
        https://bugs.webkit.org/show_bug.cgi?id=130210

        Reviewed by Daniel Bates.

        Use pre-incremeent operator for LayoutUnit instead of post-increment operator as LayoutUnit doesn't support the
        latter and we don't make use of the return value.

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

2014-03-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Inline-block child of content node incorrectly clipped
        https://bugs.webkit.org/show_bug.cgi?id=130229

        Reviewed by Andrei Bucur.

        Constrain the target box rect to the region box rect only if we are able
        to determine the region range for box. If we cannot do that, getRegionRangeForBox
        returns null values for start and end region and we should not perform the clamping.

        Test: fast/regions/inlineblock-child-inlineblock-contentnode-in-region.html

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::rectFlowPortionForBox):

2014-03-14  Zan Dobersek  <zdobersek@igalia.com>

        Unnecessary ImplementationLacksVTable IDL attribute used for RTCConfiguration, RTCIceServer
        https://bugs.webkit.org/show_bug.cgi?id=130230

        Reviewed by Philippe Normand.

        The RTCConfiguration and RTCIceServer classes do not own virtual tables, so using the
        ImplementationLacksVTable attribute in the IDL interface leads to a compile-time assertion
        failure in the generates JSC wrappers because none of the classes is polymorphic.

        * Modules/mediastream/RTCConfiguration.idl:
        * Modules/mediastream/RTCIceServer.idl:

2014-03-14  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] the "grid-template-areas" is not identified as computable property.
        https://bugs.webkit.org/show_bug.cgi?id=130073

        Reviewed by Sergio Villar Senin.

        The "grid-template-areas" property is a computable CSS property, so it should be
        handled accordingly by the Web Inspector.

        No new tests.

        * css/CSSComputedStyleDeclaration.cpp:
        CSSPropertyWebkitGridTemplateAreas added to the computedProperties array.

2014-03-14  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid layout] Initial position in span not correctly computed sometimes
        https://bugs.webkit.org/show_bug.cgi?id=130124

        Reviewed by Darin Adler.

        The code uses std::lower_bound() to get the first grid line
        position before a given resolved position in a Vector. That
        function returns an iterator pointing to the first value not
        "strictly less" than the given one. Consequently, the returned
        position might be actually located after the resolved final
        position. In those cases we need to select the previous position
        in the Vector (which is guaranted to be "< resolved position" due
        to how std::lower_bound() works).

        For example, if we have vector=[2,5,8] as grid positions, and we
        need the first position before 7, std::lower_bound(vector, 7) will
        point to 8 (first value not < 7). It's obvious that we should
        select 5 instead. Should the pointed value be equal, then we
        should do nothing, because the indexes mean tracks, so the item
        will be placed in just one cell of the grid.

        * rendering/RenderGrid.cpp:
        (WebCore::firstNamedGridLineBeforePosition):
        (WebCore::RenderGrid::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):

2014-03-14  Zsolt Borbely  <borbezs@inf.u-szeged.hu>

        Fix the !ENABLE(SVG_FONTS) build
        https://bugs.webkit.org/show_bug.cgi?id=130193

        Reviewed by Dirk Schulze.

        Add missing ENABLE(SVG_FONTS) guards for createGlyphToPathTranslator() function
        in SVGTextRunRenderingContext.h and TextRun.h, because when the SVG_FONTS are
        disabled the function is not implemented.

        * platform/graphics/TextRun.h:
        * rendering/svg/SVGTextRunRenderingContext.h:

2014-03-14  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix after r165607. There were two missing replaces.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * dom/Element.cpp:
        (WebCore::attrNodeListMap):

2014-03-14  Frédéric Wang  <fred.wang@free.fr>

        Migrate the MathML stretchy code from UChar to Glyph.
        https://bugs.webkit.org/show_bug.cgi?id=128907

        Reviewed by Chris Fleizach.

        This prepares the MathML stretchy code for future support for the MATH
        table. In particular, this uses the glyph index for measuring and
        drawing instead of Unicode code point since the MATH table uses glyph
        indices. Also, this merges the preferred width and stretchy character
        selection into one common path since they will also have to share the
        size variants measuring/selection. Finally, we expose a drawGlyphs()
        method so that we can draw a glyph by index.

        No new tests. This should not change the behavior of the stretchy code.

        * platform/graphics/Font.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawGlyphs):
        * platform/graphics/GraphicsContext.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::boundsForGlyph):
        (WebCore::RenderMathMLOperator::heightForGlyph):
        (WebCore::RenderMathMLOperator::advanceForGlyph):
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLOperator::findStretchyData):
        (WebCore::RenderMathMLOperator::updateStyle):
        (WebCore::RenderMathMLOperator::firstLineBaseline):
        (WebCore::RenderMathMLOperator::computeLogicalHeight):
        (WebCore::RenderMathMLOperator::paintGlyph):
        (WebCore::RenderMathMLOperator::fillWithExtensionGlyph):
        (WebCore::RenderMathMLOperator::paint):
        (WebCore::RenderMathMLOperator::paintChildren):
        * rendering/mathml/RenderMathMLOperator.h:

2014-03-12  Sergio Villar Senin  <svillar@igalia.com>

        Rename DEFINE_STATIC_LOCAL to DEPRECATED_DEFINE_STATIC_LOCAL
        https://bugs.webkit.org/show_bug.cgi?id=129612

        Reviewed by Darin Adler.

        For new code use static NeverDestroyed<T> instead.

        Removed the list of changed files as it was huge.

2014-03-14  Gavin Barraclough  <barraclough@apple.com>

        Reduce memory use for static property maps
        https://bugs.webkit.org/show_bug.cgi?id=129986

        Unreviewed Windows build fix / update bindings test results following r165603.

        * bindings/scripts/CodeGeneratorJS.pm:
        (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:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * 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::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjPrototypeFunctionByteMethod):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethod):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethod):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithSequence):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithArray):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction2):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:

2014-03-14  Jinwoo Song  <jinwoo7.song@samsung.com>

        Use override keyword in BatteryManager
        https://bugs.webkit.org/show_bug.cgi?id=130225

        Reviewed by Daniel Bates.

        * Modules/battery/BatteryManager.h:

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

        Reduce memory use for static property maps
        https://bugs.webkit.org/show_bug.cgi?id=129986

        Reviewed by Andreas Kling.

        Static property tables are currently duplicated on first use from read-only memory into dirty memory
        in every process, and since the entries are large (48 bytes) and the tables can be unusually sparse
        (we use a custom hash table without a rehash) a lot of memory may be wasted.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticValueSlotEntryWithoutCaching):
        (WebCore::getStaticValueSlotEntryWithoutCaching<JSDOMWrapper>):
            - HashEntry -> HashTableValue.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
            - HashEntry -> HashTableValue.
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
            - HashEntry -> HashTableValue.
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::putDelegate):
            - HashEntry -> HashTableValue.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
            - HashEntry -> HashTableValue.
        (GenerateHashTable):
            - emit the hash table index into the derived source (we were calculating this already to ensure chaining does not get too deep).

2014-03-13  Manish R Gurnaney  <m.gurnaney@samsung.com>

        Scroll size is not recalculated when absolute left of child is updated
        https://bugs.webkit.org/show_bug.cgi?id=123958

        Reviewed by Simon Fraser.

        Test: fast/css/display-inline-block-scrollbar.html
        Actual issue was that whenever there is the content change in the
        RenderBlock having inline-block children, The InlineFlowBox while
        computing overflow never resets previous value.
        
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeOverflow):
        Added code to clear overflow when we start computing overflow for
        InlineFlowBox. So as to ScrollSize can be recalculated properly.

2014-03-13  Zalan Bujtas  <zalan@apple.com>

        Pass const RenderStyle& to box decoration functions.
        https://bugs.webkit.org/show_bug.cgi?id=130201

        Reviewed by Andreas Goran Kling.

        No change in functionality.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxShadow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMaskImages):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::getBorderEdgeInfo):
        (WebCore::RenderBoxModelObject::borderObscuresBackgroundEdge):
        (WebCore::RenderBoxModelObject::borderObscuresBackground):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):

2014-03-13  Jinwoo Jeong  <jw00.jeong@samsung.com>

        Refactor Vibration algorithm to use only one timer.
        https://bugs.webkit.org/show_bug.cgi?id=130059

        Reviewed by Darin Adler.

        Currently Vibration is using two timers,
        one is to start a vibration and another is to check termination of a vibration.
        But they do not work in same time, if one of them is fired, then anothor will start.
        Thus this patch removes one of them, and manages vibration states by enumeration.

        Also, this patch implement the missing part of the algorithm,
        which check the maximum length of the vibration pattern and the maximum duration of the vibration.

        Lastly, this patch removes unused methods from Vibration.

        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::Vibration):
        (WebCore::Vibration::vibrate):
        (WebCore::Vibration::cancelVibration):
        Removed stopVibration() and its contents moved to cancelVibration().
        (WebCore::Vibration::timerFired): Combined timerStartFired() and timerStopFired().
        Removed suspendVibration() and resumeVibration(), which is never called since r.
        * Modules/vibration/Vibration.h: Added new enumertaion to specify states of Vibration.
        (WebCore::Vibration::isVibrating):

2014-03-13  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Use loc strings for known aria-invalid types
        https://bugs.webkit.org/show_bug.cgi?id=129952

        Reviewed by Joseph Pecoraro.

        Updating inspector-protocol enum and UI display values for @aria-invalid.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

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

2014-03-13  Dirk Schulze  <krit@webkit.org>

        [SVG2] support paint-order presentation attribute
        https://bugs.webkit.org/show_bug.cgi?id=129373

        Reviewed by Dean Jackson.

        Add support for the paint-order property from SVG2. The presentation
        attribute/CSS property allows to paint fill, stroke and markers in any order
        the author desires.

        Firefox supports this but behind a runtime flag. It is just activated in
        nightly builds by default.

        Chromium supports it behind a runtime flag as well but is going to ship it
        pretty soon.

        Tests: svg/paint-order/paint-order-fill-expected.svg
               svg/paint-order/paint-order-fill-markers-expected.svg
               svg/paint-order/paint-order-fill-markers.svg
               svg/paint-order/paint-order-fill.svg
               svg/paint-order/paint-order-markers-expected.svg
               svg/paint-order/paint-order-markers-stroke-expected.svg
               svg/paint-order/paint-order-markers-stroke.svg
               svg/paint-order/paint-order-markers.svg
               svg/paint-order/paint-order-normal-expected.svg
               svg/paint-order/paint-order-normal.svg
               svg/paint-order/paint-order-stroke-expected.svg
               svg/paint-order/paint-order-stroke-marker-expected.svg
               svg/paint-order/paint-order-stroke-marker.svg
               svg/paint-order/paint-order-stroke.svg
               svg/paint-order/paint-order-text-markers-expected.svg
               svg/paint-order/paint-order-text-markers.svg
               svg/paint-order/paint-order-text-normal-expected.svg
               svg/paint-order/paint-order-text-normal.svg
               svg/paint-order/paint-order-text-stroke-expected.svg
               svg/paint-order/paint-order-text-stroke.svg
               svg/paint-order/paint-order-text-tspan-001-expected.svg
               svg/paint-order/paint-order-text-tspan-001.svg
               svg/paint-order/paint-order-text-tspan-002-expected.svg
               svg/paint-order/paint-order-text-tspan-002.svg
               svg/paint-order/parsing-paint-order.html

        * css/CSSComputedStyleDeclaration.cpp: Computed style for paint-order.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::paintOrder):
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/SVGCSSParser.cpp: Parse paint-order. Take care of serialization
            at this point already to get element style correct.
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parsePaintOrder):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::paintTypesForPaintOrder):
        (WebCore::SVGRenderStyle::diff): Repaint on change.
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialPaintOrder):
        (WebCore::SVGRenderStyle::setPaintOrder):
        (WebCore::SVGRenderStyle::paintOrder):
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGShape.cpp: Change order of painting based on paint-order.
        (WebCore::RenderSVGShape::strokeShape):
        (WebCore::RenderSVGShape::fillStrokeMarkers):
        (WebCore::RenderSVGShape::paint):
        (WebCore::RenderSVGShape::addFocusRingRects):
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint): Ditto.
        * svg/SVGElement.cpp: Make property a presentation attribute.
        (WebCore::populateAttributeNameToCSSPropertyIDMap):
        (WebCore::populateAttributeNameToAnimatedPropertyTypeMap):
        * svg/svgattrs.in: Add paint-order attribute.

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

        Network process instantiates JSC::VM under fake memory pressure.
        <https://webkit.org/b/130143>

        Stop calling GCController::garbageCollectSoon() in the fake memory
        pressure callback. The pressure relief code already schedules GC
        by way of discardAllCode() which does reportAbandonedObjectGraph().
        This way we don't accidentally instantiate a VM in the networking
        process for no reason.

        Reviewed by Geoffrey Garen.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):

2014-03-13  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: AXI: Expose focused/focusable state in the Accessibility Node Inspector
        https://bugs.webkit.org/show_bug.cgi?id=129779

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMAgent.cpp: Set property "focused".
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/protocol/DOM.json: Add property "focused" to
        AccessibilityProperties.

2014-03-12  Jae Hyun Park  <jaepark@webkit.org>

        Remove remaining Nix port related files
        https://bugs.webkit.org/show_bug.cgi?id=130179

        Reviewed by Csaba Osztrogonác.

        GLContextFromCurrentEGL was added in r155360 as a part of nix
        upstreaming. As Nix port is removed from the source tree, these files
        are in no use.

        * platform/graphics/egl/GLContextFromCurrentEGL.cpp: Removed.
        * platform/graphics/egl/GLContextFromCurrentEGL.h: Removed.

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

        REGRESSION (r160806): Incorrect cascade order of prefixed and non-prefixed variants of
        CSS properties box-shadow and background-{clip, origin, size}
        https://bugs.webkit.org/show_bug.cgi?id=130102
        <rdar://problem/16187037>

        Reviewed by Andreas Kling.

        Fixes an issues in the computation of the final value for the CSS properties
        box-shadow and background-{clip, origin, size} when the definition of a selector
        uses both the prefixed and non-prefixed variants (in order) of these properties.

        Tests: fast/css/cascade/background-clip-and-webkit-background-clip-cascade-order.html
               fast/css/cascade/background-origin-and-webkit-background-origin-cascade-order.html
               fast/css/cascade/background-size-and-webkit-background-size-cascade-order.html
               fast/css/cascade/box-shadow-and-webkit-box-shadow-cascade-order.html

        * css/CSSPropertyNames.in: Add a comment to explain the difference between property
        -webkit-box-shadow and property box-shadow.
        * css/StyleResolver.cpp:
        (WebCore::shouldApplyPropertyInParseOrder): Add prefixed and non-prefixed variants
        of box-shadow and background-{clip, origin, size} to the list of properties that need
        to be applied in the same order as they were parsed from the stylesheet.

2014-03-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorFrontendHost.loadResourceSynchronously
        https://bugs.webkit.org/show_bug.cgi?id=130217

        Reviewed by Timothy Hatcher.

        This has been replaced by NetworkAgent.loadResource,
        which loads asynchronously through the backend.

        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2014-03-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network.loadResource should include the response status code
        https://bugs.webkit.org/show_bug.cgi?id=130216

        Reviewed by Timothy Hatcher.

        * inspector/InspectorResourceAgent.cpp:
        Record and send the http status code.

        * inspector/protocol/Network.json:
        Include status code property in the success callback.

2014-03-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network.loadResource XHR crash if page reloaded while request is ongoing
        https://bugs.webkit.org/show_bug.cgi?id=130211

        Reviewed by Timothy Hatcher.

        Merged from Blink with changes, (patch by vsevik@chromium.org):
        http://src.chromium.org/viewvc/blink?view=revision&revision=152712

        Using an XMLHttpRequest to download resources had a few issues. Being an
        Active DOM Object the load could be paused. Without an extra retain,
        when the load was cancelled (e.g. a page reload) the XHR would get
        destructed and could cause a crash if the list of active DOM objects
        was actively being iterated.

        Switch to a DocumentThreadableLoader to manage the load ourselves.
        This still uses the Memory cache, but we have a little more control.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::loadResource):
        Switch from XHR to DocumentThreadableLoader.

        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::sendForInspector):
        Remove the now unnecessary XHR sendForInspector path.

2014-03-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165540.
        https://bugs.webkit.org/show_bug.cgi?id=130199

        caused 1 hidpi test fail (Requested by zalan on #webkit).

        Reverted changeset:

        "Subpixel rendering: Nested layers with subpixel accumulation
        paint to wrong position."
        https://bugs.webkit.org/show_bug.cgi?id=130153
        http://trac.webkit.org/changeset/165540

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        Fix a bunch of mistakes in the parsing of ::cue( and ::cue
        https://bugs.webkit.org/show_bug.cgi?id=130113

        Reviewed by Andreas Kling.

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setPseudoTypeValue):
        The ::cue() pseudo element "function" was passed as a PseudoClass.
        The type was then parsed and considered as a compatibility type to flip
        the match type back to PseudoElement.

        Instead of all that jazz, just pass the right type from the grammar.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::parsePseudoType):
        The non-function ::cue pseudo element use shadow pseudo ID for matching the element.
        Since it is unprefixed, it needs to map to one of the Custom types. The previous code
        was using String::startsWith() for some reason, change that to a simple equality.

2014-03-13  Benjamin Poulain  <benjamin@webkit.org>

        Clean up RenderStyle creation
        https://bugs.webkit.org/show_bug.cgi?id=130180

        Reviewed by Andreas Kling.

        Use the copy constructor with the default style instead of having a special
        constructor for that.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::create):
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        The viewport code should not depend on WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=130218

        Reviewed by Tim Horton.

        The viewport code cannot be generalized to other ports because it relies
        on WebKit system interface to get the device screen size.
        This patch fixes that by going through ChromeClient to get the data.

        * dom/Document.cpp:
        (WebCore::Document::processViewport):
        Get the screensize from chrome client.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        This is dead code. Nothing should ever use computeViewportAttributes().

        (WebCore::finalizeViewportArguments):
        * dom/ViewportArguments.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::viewportScreenSize):

2014-03-07  Jer Noble  <jer.noble@apple.com>

        Add remote control command support to MediaSession.
        https://bugs.webkit.org/show_bug.cgi?id=129903

        Reviewed by Eric Carlson.

        Add the capability to receive remote control commands (currently iOS only) and to
        pass those commands through the MediaSessionManager.

        Add a new platform class which can listen for remote control commands:
        * platform/RemoteCommandListener.cpp: Added.
        (WebCore::RemoteCommandListener::create):
        * platform/RemoteCommandListener.h: Added.
        (WebCore::RemoteCommandListenerClient::~RemoteCommandListenerClient):
        (WebCore::RemoteCommandListener::~RemoteCommandListener):
        (WebCore::RemoteCommandListener::RemoteCommandListener):
        * platform/ios/RemoteCommandListenerIOS.h: Added.
        * platform/ios/RemoteCommandListenerIOS.mm: Added.
        (WebCore::RemoteCommandListener::create):
        (WebCore::RemoteCommandListenerIOS::RemoteCommandListenerIOS):
        (WebCore::RemoteCommandListenerIOS::~RemoteCommandListenerIOS):

        Handle remote control command events in HTMLMediaElement and AudioDestinationMac:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * platform/audio/mac/AudioDestinationMac.h:
        (WebCore::AudioDestinationMac::canReceiveRemoteControlCommands):
        (WebCore::AudioDestinationMac::didReceiveRemoteControlCommand):

        Pipe command events through MediaSessionManager:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::canReceiveRemoteControlCommands):
        (WebCore::MediaSession::didReceivRemoteControlCommand):
        * platform/audio/MediaSession.h:
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::addSession):
        (WebCore::MediaSessionManager::removeSession):
        (WebCore::MediaSessionManager::sessionWillBeginPlayback):
        (WebCore::MediaSessionManager::didReceiveRemoteControlCommand):
        (WebCore::MediaSessionManager::addClient):
        (WebCore::MediaSessionManager::removeClient):
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManagerClient::~MediaSessionManagerClient):
        (WebCore::MediaSessionManagerClient::MediaSessionManagerClient):

        Make sessionWillBegin/EndPlayback() methods take non-const parameters:
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::sessionWillEndPlayback):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManagerIOS::sessionWillBeginPlayaback):
        (WebCore::MediaSessionManagerIOS::sessionWillEndPlayaback):

        Add new files and export new symbols:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-03-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r165544 and r165560.

        It broke EFL/GTK/Windows build

        Reverted changesets:

        "Optimize hasTagName when called on an HTMLElement"
        https://bugs.webkit.org/show_bug.cgi?id=130090
        http://trac.webkit.org/changeset/165544

        http://trac.webkit.org/changeset/165560

2014-03-13  Antti Koivisto  <antti@apple.com>

        Try to stop asserts in debug build.

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

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        Update the build fix for r165544

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        Fix typo :(

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        Update the build fix for r165544

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper isSVGGroupElement]):
        Use the SVG version since the name being tested is a SVG name.

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        Attempt to fix the build after r165542

        * dom/NodeRenderStyle.h:

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        Update WebAccessibilityObjectWrapperIOS after r165544

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper isSVGGroupElement]):

2014-03-13  Antti Koivisto  <antti@apple.com>

        REGRESSION(r165542): printing/page-rule-selection.html failing
        https://bugs.webkit.org/show_bug.cgi?id=130205

        Reviewed by Andreas Kling.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::styleForPage):
        
            Use Document style as parent when resolving page style.

        (WebCore::StyleResolver::applyPropertyToStyle):
        * css/StyleResolver.h:
        
            Get rid of the default null parameter.

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        Remove INPUT_LIST_BUTTON from the PseudoIds
        https://bugs.webkit.org/show_bug.cgi?id=130108

        Reviewed by Andreas Kling.

        * rendering/style/RenderStyleConstants.h:
        It is unused.

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

        [iOS] Sync media playback with now playing
        https://bugs.webkit.org/show_bug.cgi?id=130172

        Reviewed by Jer Noble.
        
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::play): Move clientWillBeginPlayback to
            playInternal so it is called every time playback begins.
        (WebCore::HTMLMediaElement::playInternal): Call clientWillBeginPlayback.
        (WebCore::HTMLMediaElement::pause): Move clientWillPausePlayback to
            playInternal so it is called every time playback begins.
        (WebCore::HTMLMediaElement::playInternal): Call clientWillPausePlayback.
        (WebCore::HTMLMediaElement::mediaSessionTitle): New. Return the 'title' attribute,
            or currenSrc if that is empty.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaSessionDuration): Return duration.
        (WebCore::HTMLMediaElement::mediaSessionCurrentTime): Return current time.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::clientWillPausePlayback): New, passthrough to the
            media element.
        (WebCore::MediaSession::title): Ditto.
        (WebCore::MediaSession::duration): Ditto.
        (WebCore::MediaSession::currentTime): Ditto.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSessionClient::mediaSessionTitle):
        (WebCore::MediaSessionClient::mediaSessionDuration):
        (WebCore::MediaSessionClient::mediaSessionCurrentTime):

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Initialize m_activeSession.
        (WebCore::MediaSessionManager::removeSession): Set m_activeSession if the session
            being removed is currently active.
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): Set m_activeSession.
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::sessionWillEndPlayback):
        (WebCore::MediaSessionManager::setCurrentSession):
        (WebCore::MediaSessionManager::currentSession):

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback): Call updateNowPlayingInfo. 
        (WebCore::MediaSessionManageriOS::sessionWillEndPlayback): Ditto.
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Update MPNowPlayingInfoCenter
            with the current media item's title, duration, and current time.
        (-[WebMediaSessionHelper initWithCallback:]): Turn on deliver of remote control
            events, even though we don't respond to them yet, or Now Playing won't work.

2014-03-13  Radu Stavila  <stavila@adobe.com>

        Webkit not building on XCode 5.1 due to garbage collection no longer being supported
        https://bugs.webkit.org/show_bug.cgi?id=130087

        Reviewed by Mark Rowe.

        Disable garbage collection on macosx when not using internal SDK.

        No new tests required.

        * Configurations/Base.xcconfig:

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

        Don't send synchronous resize events when FrameView has auto-sizing enabled.
        <https://webkit.org/b/130198>
        <rdar://problem/15991333>

        Reviewed by Dan Bernstein.

        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):

2014-03-13  Antti Koivisto  <antti@apple.com>

        Try to fix release build.

        * css/MediaQueryMatcher.cpp:
        * css/StyleMedia.cpp:
        * html/HTMLTitleElement.cpp:

2014-03-11  Darin Adler  <darin@apple.com>

        Avoid copy-prone idiom "for (auto item : collection)"
        https://bugs.webkit.org/show_bug.cgi?id=129990

        Reviewed by Geoffrey Garen.

        Most of these changes have no effect. A few of them get rid of unwanted
        copying of the items as we iterate them. Found these with the command
        'git grep "for (auto .*:"' or the equivalent.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData): Use auto& to avoid copying the keys.
        (WebCore::IDBKeyData::maybeCreateIDBKey): Ditto.
        (WebCore::IDBKeyData::isolatedCopy): Ditto.

        * dom/Node.cpp:
        (WebCore::Document::invalidateNodeListAndCollectionCaches): Use auto*
        to make explicit the fact that these are pointers. Stop using "it" for
        a variable that is not an iterator. Get rid of unneeded local variables
        for the collections themselves.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument): Use auto& to make sure we
        don't do any unnecessary copying. Stop using "it" for a variable that
        is not an iterator.

        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::lastRow): Use auto* to be explicit
        that these are pointers.
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal): Ditto.
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot): Ditto. Also got rid of
        an unnecessary local variable.

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseFiles): Use auto&. Also fix a FIXME.
        (WebCore::FileChooser::chooseMediaFiles): Ditto.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize): Use auto&.

        * rendering/RenderIterator.h: Changed include from RenderObject.h to
        RenderElement.h; iterators are based on RenderElement now.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies): Use auto*.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation): Use auto*.
        (WebCore::RenderSVGResourceContainer::markAllClientLayersForInvalidation): Ditto.
        (WebCore::RenderSVGResourceContainer::registerResource): Ditto.

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren): Updated to use a more specific
        type, to use auto* instead of of auto, and to eliminate the slightly sloppily
        capitalized and not-so-slightly ungrammatical notlayoutedObjects.
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext): Use auto&.
        (WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending): Use auto*.

        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles): Use auto*.
        (WebCore::SVGResourcesCycleSolver::resolveCycles): Ditto. Also lineageOfType.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget): Use auto*.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::invalidateMPathDependencies): Ditto.

2014-03-13  Brian Burg  <bburg@apple.com>

        Web Inspector: Remove unused callId parameter from evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::evaluateForTestInFrontend):
        * inspector/InspectorController.h:

2014-03-13  Darin Adler  <darin@apple.com>

        Optimize hasTagName when called on an HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=130090

        Reviewed by Antti Koivisto.

        Added new hasTagName functions that have the efficiency of hasLocalName.
        but are safe.

        Now we can always use hasTagName, and we'll get a compile time error if
        we try to use an SVG tag name with an HTML element. All call sites that
        use the more specific tag name types are more efficient, and call sites
        that have a specific pointer type will get even more efficient checking
        that is exactly what we used to get by calling hasLocalName.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasTagName): Cast explicitly to Element
        since Node::hasTagName no longer works on a general QualifiedName.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isDescendantOfElementType): Use
        more specific type, RenderElement, so we can call hasTagName on Element
        instead of Node; eliminates an unnecessary branch.

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets): Use
        new for loop and full words for variable names. Also use nullptr instead
        of 0. Call toHTMLElement and toSVGElement in code that checks hasTagName
        since it's already checking isHTMLElement and isSVGElement.

        * dom/Element.cpp:
        (WebCore::attrNodeListMap): Use NeverDestroyed and put the vectors into
        the map rather than putting pointers to a vector into the map.
        (WebCore::attrNodeListForElement): Take a reference rather than a pointer,
        and update for the change above.
        (WebCore::ensureAttrNodeListForElement): Ditto.
        (WebCore::removeAttrNodeListForElement): Ditto.
        (WebCore::findAttrNodeInList): Ditto.
        (WebCore::Element::isFocusable): Use ancestorsOfType<HTMLCanvasElement>
        to fine the canvas rather than a hand-written loop.
        (WebCore::Element::attrNodeList): Update for above changes.
        (WebCore::Element::setAttributeNode): Ditto.
        (WebCore::Element::attrIfExists): Ditto.
        (WebCore::Element::ensureAttr): Ditto.
        (WebCore::Element::detachAttrNodeFromElementWithValue): Ditto.
        (WebCore::Element::detachAllAttrNodesFromElement): Ditto.

        * dom/Element.h: Removed the overload of hasLocalName that takes a
        QualifiedName and ignores the non-local-name parts of it. Callers should
        use hasTagName instead, now that it's optimized appropriately. Added
        overloads of hasTagName for all the specific qualified name types. It's
        more efficient to use the Node versions of these functions rather than
        using QualifiedName::matches to do the check. Removed the hasTagName and
        hasLocalName functions from the Node class; the only convenience functions
        needed in Node are the specific checks for tags from HTML, MathML, and SVG,
        not the general purpose ones.

        * dom/Node.h: Removed hasLocalName and replaced the single hasTagName
        that takes a QualifiedName with three faster ones that take HTML, MathML,
        and SVG qualified names instead. Also updated to use nullptr instead of 0.

        * dom/PositionIterator.cpp: Added now-needed include.
        * dom/Text.cpp: Ditto.

        * dom/make_names.pl:
        (printHeaderHead): Renamed an argument for clarity and added a definitions
        argument, which is where we insert the classes derived from QualifiedName.
        (printCppHead): Renamed an argument for clarity.
        (printTypeHelpers): Use hasTagName rather than hasLocalName, since the
        former is now optimized to be the same as what the latter was.
        (printNamesHeaderFile): Define a class derived from QualifiedName that can
        be used at compile time to avoid having to check the namespace.
        (printNamesCppFile): Use the new more-specific type as needed.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::isLegacyAppleStyleSpan): Use hasTagName instead of hasLocalName,
        and references instead of pointers.
        (WebCore::ApplyStyleCommand::ApplyStyleCommand): Removed uneeded explicit
        construction of a smart pointer.
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun): Updated to use
        the enclosingElementWithTag function by its new name.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionUnorderedListState): Updated to use the
        enclosingElementWithTag function by its new name.
        (WebCore::Editor::selectionOrderedListState): Ditto.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Use a more-specific type for the list tag.
        (WebCore::InsertListCommand::doApplyForSingleParagraph): Ditto.
        * editing/InsertListCommand.h: Ditto.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces): Added an explicit
        cast to Element in the loop that is already guarded by an isElementNode check.
        Also use a modern C++ for loop.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        Updated to use the enclosingElementWithTag function by its new name.
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds): Ditto.
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent): Ditto.

        * editing/TypingCommand.cpp: Added now-needed includes.
        * editing/VisibleUnits.cpp: Ditto.

        * editing/htmlediting.cpp:
        (WebCore::enclosingElementWithTag): Changed to return an Element instead of a Node,
        since nodes other than elements do not have tags.
        * editing/htmlediting.h: Ditto.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::adjustedSelectionRange): Updated to use the enclosingElementWithTag
        function by its new name.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendText): Ditto.
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization): Ditto.
        (WebCore::highestAncestorToWrapMarkup): Ditto.
        (WebCore::createMarkupInternal): Ditto.
        (WebCore::createContextualFragment): Ditto. Use hasTagName instead of hasLocalName,
        since the former is now optimized to be the same as the latter was before.

        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement): Use hasTagName instead of hasLocalName,
        since the former is now optimized to be the same as the latter was before.
        (WebCore::nameShouldBeVisibleInDocumentAll): Ditto.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::ieForbidsInsertHTML): Ditto.
        (WebCore::unicodeBidiAttributeForDirAuto): Ditto.
        (WebCore::HTMLElement::parseBorderWidthAttribute): Ditto.
        (WebCore::HTMLElement::setInnerHTML): Ditto.
        (WebCore::shouldProhibitSetInnerOuterText): Ditto. Added this to share code between
        setInnerText and setOuterText.
        (WebCore::HTMLElement::setInnerText): Ditto.
        (WebCore::HTMLElement::setOuterText): Ditto.
        (WebCore::HTMLElement::rendererIsNeeded): Ditto.
        (WebCore::HTMLElement::createElementRenderer): Ditto.

        * html/HTMLElement.h: Added hasTagName, which hides the one inherited from Element
        and takes the more-specific HTMLQualifiedName type. This means we don't need to check
        the namespace at runtime because it's known at compile time. Also put the
        implementation of Node::hasTagName for HTMLQualifiedName into this header.

        * html/HTMLObjectElement.cpp:
        (WebCore::isRecognizedTagName): Updated for change in return type of
        HTMLNames::getHTMLTags.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add): Use hasTagName inastead of hasLocalName.
        (WebCore::HTMLSelectElement::value): Use isHTMLOptionElement instead of hasTagName.
        Also use a new style for loop and emptyString() instead of "".
        (WebCore::HTMLSelectElement::setValue): Ditto.
        (WebCore::HTMLSelectElement::setLength): Ditto.
        (WebCore::HTMLSelectElement::searchOptionsForValue): Ditto.
        (WebCore::HTMLSelectElement::restoreFormControlState): Ditto.

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalPresentationAttributeStyle): Use hasTagName
        instead of hasLocalName.

        * html/HTMLTableRowsCollection.cpp:
        (WebCore::isInSection): Updated to use hasTagName and take a reference.
        (WebCore::HTMLTableRowsCollection::rowAfter): Pass a reference.

        * html/parser/HTMLConstructionSite.cpp: Added now-needed include.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::createCaseMap): Updated to return a map rather than filling one in, and to
        be flxible about the type of the table being used.
        (WebCore::adjustSVGTagNameCase): Updated to use NeverDestroyed.
        (WebCore::adjustAttributes): Added new helper so we can share more code. Updated
        template argument names for clarity.
        (WebCore::adjustSVGAttributes): Marked this inline, since it just turns around and
        calls a single non-inline function.
        (WebCore::adjustMathMLAttributes): Ditto.
        (WebCore::addNamesWithPrefix): Changed to take argument by reference instead of pointer.
        (WebCore::createForeignAttributesMap): Added. Factors out the map creation from the
        function below.
        (WebCore::adjustForeignAttributes): Updated for above changes.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Updated to pass reference.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): Ditto.

        * inspector/InspectorStyleSheet.cpp: Added now-needed include.

        * mathml/MathMLElement.h: Added hasTagName, which hides the one inherited from Element
        and takes the more-specific MathMLQualifiedName type. This means we don't need to check
        the namespace at runtime because it's known at compile time. Also put the
        implementation of Node::hasTagName for MathMLQualifiedName into this header.

        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createElementRenderer): Use hasTagName.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::attributeChanged): Use hasTagName.
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex): Ditto.
        (WebCore::MathMLSelectElement::getSelectedActionChild): Ditto.
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild): Ditto.
        (WebCore::MathMLSelectElement::updateSelectedChild): Ditto.
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createElementRenderer): Ditto.
        (WebCore::MathMLTextElement::childShouldCreateRenderer): Ditto.

        * platform/mac/HTMLConverter.mm: Added now-needed include.
        * rendering/RenderBlockFlow.cpp: Ditto.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Use hasTagName.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::rendererForRootBackground): Ditto.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Ditto.

        * rendering/RenderReplaced.cpp: Added now-needed include.

        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::RenderMathMLScripts): Use hasTagName.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::RenderMathMLUnderOver): Ditto.

        * svg/SVGElement.h: Added hasTagName, which hides the one inherited from Element
        and takes the more-specific SVGQualifiedName type. This means we don't need to check
        the namespace at runtime because it's known at compile time. Also put the
        implementation of Node::hasTagName for SVGQualifiedName into this header.

        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::childrenChanged): Use isSVGFontFaceElement instead
        of calling hasTagName.

        * svg/SVGUseElement.cpp:
        (WebCore::isDirectReference): Changed to take a reference and a more specific type.
        (WebCore::SVGUseElement::toClipPath): Added a type cast.
        (WebCore::SVGUseElement::rendererClipChild): Use more specific types so we don't
        need a type cast.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::parseDocumentFragment): Added explicit calls to this
        unusual call site that has a good reason to use hasLocalName instead of hasTagName.

2014-03-13  Antti Koivisto  <antti@apple.com>

        Try to fix iOS build.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):

2014-03-13  Antti Koivisto  <antti@apple.com>

        Remove StyleResolver::State::m_parentNode
        https://bugs.webkit.org/show_bug.cgi?id=130194

        Reviewed by Andreas Kling.

        This variable was the "parent" node where the style was being inherited from, not the actual parent.
        The code would also recompute it even though the call sites generally know the rendering parent already.

        If we consistently pass parent style to StyleResolver::styleForElement we won't need the variable and
        the associated code. We also get rid of one more client of NodeRenderingTraversal.

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::document):
        (WebCore::StyleResolver::State::State):
        * dom/Element.cpp:
        (WebCore::Element::customStyleForRenderer):
        
            Add parentStyle parameter.

        * dom/Element.h:
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::customStyleForRenderer):
        * dom/PseudoElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::didAttachRenderers):
        (WebCore::HTMLOptGroupElement::updateNonRenderStyle):
        (WebCore::HTMLOptGroupElement::customStyleForRenderer):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::didAttachRenderers):
        (WebCore::HTMLOptionElement::updateNonRenderStyle):
        (WebCore::HTMLOptionElement::customStyleForRenderer):
        * html/HTMLOptionElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::textWithDirection):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::customStyleForRenderer):
        (WebCore::TextControlInnerTextElement::customStyleForRenderer):
        * html/shadow/TextControlInnerElements.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
        (WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        * rendering/RenderNamedFlowFragment.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::styleForElement):
        
            This used to be Element::styleForRenderer. It is now a standalone static.

        (WebCore::Style::elementInsideRegionNeedsRenderer):
        (WebCore::Style::createRendererIfNeeded):
        (WebCore::Style::resolveLocal):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::customStyleForRenderer):
        * svg/SVGElement.h:

2014-03-13  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Nested layers with subpixel accumulation paint to wrong position.
        https://bugs.webkit.org/show_bug.cgi?id=130153

        Reviewed by Simon Fraser.

        Subpixels (fractional device pixels here) can accumulate through nested layers. Subpixels
        need to be propagated through the layer tree so that painting coordinates match layout coordinates.
        
        Compositing case: (absolute positioning, 2x display)
        parent layer pos(0.3, 0.3) -> floored painting position (0, 0)
        child layer pos(10.2, 10.2) -> layout offset from parent (10.2, 10.2), 
        but the actual painting offset is (10.5, 10.5) as the result of parent flooring.
        
        Non-compositing case: (absolute positioning, 2x display)
        parent layer pos(0.3, 0.3) -> GraphicsContext is translated to (0, 0).
        child layer pos(10.2, 10.2) -> layout offset from parent (10.2, 10.2)
        but the GraphicsContext's offset is (10.5, 10.5) as the result of the parent's translate.   

        In both cases, without the subpixel adjustment, we'd paint the current layer at (10.0, 10.0)
        after flooring, while its painting position is actually (10.5, 10.5).
        Subpixels do accumulate through nested layers.

        Tests: compositing/hidpi-nested-compositing-layers-with-subpixel-accumulation.html
               fast/layers/hidpi-nested-layers-with-subpixel-accumulation.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::devicePixelFractionFromRenderer):

2014-03-13  Radu Stavila  <stavila@adobe.com>

        The scrolledContentOffset method should handle the hasOverflowClip check
        https://bugs.webkit.org/show_bug.cgi?id=130028

        Reviewed by Antti Koivisto.

        Before this patch, every call to RenderBox::scrolledContentOffset was guarded by the
        hasOverflowClip check, because the scrolledContentOffset method would ASSERT(hasOverflowClip()).
        This was simplified by moving the hasOverflowClip check inside the scrolledContentOffset method
        and returning (0, 0) for elements that do not clip the overflow.

        No new tests needed, just a refactor.

        * editing/VisibleUnits.cpp:
        (WebCore::absoluteLineDirectionPointToLocalPointInBlock):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::offsetForContents):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrolledContentOffset):
        (WebCore::RenderBox::offsetFromContainer):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetFromContainer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::decorationsClipRectForBoxInNamedFlowFragment):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::pushMappingToContainer):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint):
        (WebCore::RenderObject::offsetFromContainer):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hitInnerTextElement):

2014-03-13  Chris Fleizach  <cfleizach@apple.com>

        AX: accessibility data table heuristics fail on this jQuery table
        https://bugs.webkit.org/show_bug.cgi?id=129369

        Reviewed by Mario Sanchez Prada.

        Updated accessibility/table-detection.html

        If a table uses display style of table-row-group, the RenderTable gets disassociated from the HTMLTableElement.
        We can find that element in a different way by asking for the parent of the first table section.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::activeDescendant):
            This method was accessing an object's element unsafely and this table change exposed the issue.
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::tableElement):
        (WebCore::AccessibilityTable::isDataTable):
        * accessibility/AccessibilityTable.h:

2014-03-13  Antti Koivisto  <antti@apple.com>

        Ensure that layout milestones complete in all cases
        https://bugs.webkit.org/show_bug.cgi?id=130101
        
        Reviewed by Darin Adler.
        
        Milestones fail to complete in some testing scenarios.

        * dom/Document.cpp:
        (WebCore::Document::setParsing):
        
            Check if we need to fire layout milestones if parsing finishes without pending layout.
            Parsing status affects whether the document is considered non-empty and that affects
            layout milestones.

            Remove explicit layout scheduling here, layout timer will be active already if there
            is a layout pending

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::firePaintRelatedMilestonesIfNeeded):
        
            Renamed for consistency

        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        
            Factor layout milestone firing into a function.

        * page/FrameView.h:

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Replay: add infrastructure for memoizing nondeterministic DOM APIs
        https://bugs.webkit.org/show_bug.cgi?id=129445

        Reviewed by Timothy Hatcher.

        Add two pieces of infrastructure to support memoization of selected DOM APIs.

        The first piece is MemoizedDOMResult, a templated replay input class that knows
        how to serialize a DOM API's return value, ctype, and exception code.

        The second piece is the addition of a new IDL attribute called `Nondeterministic`.
        When placed on a DOM function or attribute, the code generator will emit code
        to save the DOM API's return value or use a memoized return value instead,
        depending on the current replay state. This new emitted code path is behind
        a feature flag.

        No new tests, as no new inputs are addressed by this change. Per-DOM API replay
        regression tests will be added when those APIs are marked as nondeterministic.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm: Add support of the `Nondeterministic` attribute.
        (GenerateImplementation): Handle cases for attributes and getters with exceptions.
        (GenerateImplementationFunctionCall): Handle function calls with and without exceptions.
        (GetNativeTypeForMemoization): Added. Converts DOMString to WTF::String.
        * bindings/scripts/IDLAttributes.txt: Add new `Nondeterministic` attribute.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjPrototypeFunctionByteMethod):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethod):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethod):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithSequence):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithArray):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction2):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):

        * replay/AllReplayInputs.h:
        * replay/MemoizedDOMResult.cpp: Added.
        (WebCore::MemoizedDOMResultBase::type):
        (WebCore::MemoizedDOMResultBase::createFromEncodedResult):
        (InputTraits<MemoizedDOMResultBase>::type):
        (InputTraits<MemoizedDOMResultBase>::encode):
        (InputTraits<MemoizedDOMResultBase>::decode):

        * replay/MemoizedDOMResult.h: Added. Every specialization of MemoizedDOMResult<T>
        stores a binding name, ctype, result value of type T, and optional exception code.
        The ctype-specific code uses the CTypeTraits struct to abstract over enum names and
        compiler types. The actual encode/decode methods just use methods from EncodingTraits<T>.

        (WebCore::MemoizedDOMResultBase::MemoizedDOMResultBase):
        (WebCore::MemoizedDOMResultBase::~MemoizedDOMResultBase):
        (WebCore::MemoizedDOMResultBase::attribute):
        (WebCore::MemoizedDOMResultBase::ctype):
        (WebCore::MemoizedDOMResultBase::exceptionCode):
        (WebCore::CTypeTraits::decode):
        (WebCore::MemoizedDOMResultBase::convertTo):
        (JSC::InputTraits<MemoizedDOMResultBase>::queue):
        * replay/ReplayInputTypes.cpp: See below.
        (WebCore::ReplayInputTypes::ReplayInputTypes):
        * replay/ReplayInputTypes.h: See below.
        * replay/SerializationMethods.cpp: We need to special-case the encoding
        and decoding of MemoizedDOMResult inputs because the input is not part of
        the generated per-framework replay inputs enum.
        (JSC::EncodingTraits<NondeterministicInputBase>::encodeValue):
        (JSC::EncodingTraits<NondeterministicInputBase>::decodeValue):

        * replay/WebInputs.json: Add the EncodedCType enum as an external enum type,
        so that we can use a generated EncodingTraits specialization to encode the enum.

2014-03-11  Jae Hyun Park  <jaepark@webkit.org>

        Make HTMLCanvasElement::is3D private
        https://bugs.webkit.org/show_bug.cgi?id=130117

        Reviewed by Anders Carlsson.

        HTMLCanvasElement::is3D is not used anywhere except HTMLCanvasElement.
        So, make HTMLCanvasElement::is3D a private method. Also, make more use
        of is3D method.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::getImageData):
        * html/HTMLCanvasElement.h:

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

        Web Inspector: OS X View Indication
        https://bugs.webkit.org/show_bug.cgi?id=130119

        Reviewed by Timothy Hatcher.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setIndicating):
        OS X will handles this in the InspectorOverlay. iOS does not use the
        overlay, so it handles this in the client (already implemented).

        * inspector/InspectorOverlay.h:
        Remove unused m_size, and add a boolean for the indicating state.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::InspectorOverlay):
        (WebCore::InspectorOverlay::shouldShowOverlay):
        Helper for determining if we should show the overlay or not.

        (WebCore::InspectorOverlay::setIndicating):
        Set the state and trigger an overlay update.

        (WebCore::InspectorOverlay::paint):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::drawGutter):
        (WebCore::InspectorOverlay::evaluateInOverlay):
        Simplification of existing methods.

        * inspector/InspectorOverlayPage.css:
        (.indicate):
        Give the page a blue tint, matching the node highlight color.

        * inspector/InspectorOverlayPage.js:
        (showPageIndication):
        (hidePageIndication):
        Add / remove a body style class.

        (drawNodeHighlight):
        Remove unused parameters.

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

        Web Inspector: Disable REMOTE_INSPECTOR in earlier OS X releases
        https://bugs.webkit.org/show_bug.cgi?id=130118

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:

2014-03-12  Tim Horton  <timothy_horton@apple.com>

        Build fix for ENABLE(IMAGE_CONTROLS) after 165479

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::servicesRolloverButtonCell):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        (WebCore::RenderThemeMac::imageControlsButtonSize):
        Don't try to use the AppKit methods that are only available on 64-bit.

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

        [WebVTT] HTML5 "space" cahracters around "-->" are not required
        https://bugs.webkit.org/show_bug.cgi?id=117421

        Reviewed by Eric Carlson.

        Merged from Blink (patch by caitpotter88@gmail.com):
        https://chromium.googlesource.com/chromium/blink/+/4ef469cd627a13696b88e285ae28a60e38f9c286
        http://crbug.com/242158

        New tests: media/track/track-webvtt-tc029-timings-whitespace.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::collectTimingsAndSettings): Make whitespace around cue-timings optional.

2014-03-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165482.
        https://bugs.webkit.org/show_bug.cgi?id=130157

        Broke the windows build; "error C2466: cannot allocate an
        array of constant size 0" (Requested by jernoble on #webkit).

        Reverted changeset:

        "Reduce memory use for static property maps"
        https://bugs.webkit.org/show_bug.cgi?id=129986
        http://trac.webkit.org/changeset/165482

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector receives spurious setScriptEnabled instrumentation calls
        https://bugs.webkit.org/show_bug.cgi?id=130147

        Reviewed by Timothy Hatcher.

        When page settings change, inspector instrumentation should only fire if
        the scriptsEnabled setting actually changes from the previous setting. But
        due to an unnecessary PLATFORM(IOS) guard, the inspector was being notified
        on every settings update even if nothing changed.

        This manifested as lots of Page.scriptsEnabled messages being sent to
        the inspector frontend as the Inspector window is dragged.

        * page/Settings.cpp:
        (WebCore::Settings::setScriptEnabled): Remove PLATFORM(IOS) from early return.

2014-03-12  Simon Fraser  <simon.fraser@apple.com>

        Have the scrolling tree track the viewport size, not the viewport rect
        https://bugs.webkit.org/show_bug.cgi?id=130141

        Reviewed by Beth Dakin.

        The scrolling tree only needs to know the size of the viewport, not its
        origin, since the origin is deduced from the updated scroll position.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setViewportSize):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::viewportSize):
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::maximumScrollPosition):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):

2014-03-12  Simon Fraser  <simon.fraser@apple.com>

        Spelling is hard
        https://bugs.webkit.org/show_bug.cgi?id=130146

        Reviewed by Beth Dakin.

        Fix spelling (constained -> constrained).

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange):

2014-03-12  Simon Fraser  <simon.fraser@apple.com>

        Change scrollOffsetForFixedPosition() to do LayoutUnit math
        https://bugs.webkit.org/show_bug.cgi?id=129981

        Reviewed by Beth Dakin.

        FrameView::scrollOffsetForFixedPosition() returned an IntSize,
        but to allow subpixel scroll offsets, we need it to return a LayoutSize.
        
        Fix code that calls this to use more LayoutUnit math.
        
        This progresses fixed background images on zoom, which cam now be subpixel
        positioned.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedVisibleContentRect):
        (WebCore::FrameView::scrollOffsetForFixedPosition):
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::constrainScrollPositionForOverhang):
        * platform/ScrollableArea.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):

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

        Reduce memory use for static property maps
        https://bugs.webkit.org/show_bug.cgi?id=129986

        Reviewed by Andreas Kling.

        Static property tables are currently duplicated on first use from read-only memory into dirty memory
        in every process, and since the entries are large (48 bytes) and the tables can be unusually sparse
        (we use a custom hash table without a rehash) a lot of memory may be wasted.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticValueSlotEntryWithoutCaching):
        (WebCore::getStaticValueSlotEntryWithoutCaching<JSDOMWrapper>):
            - HashEntry -> HashTableValue.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
            - HashEntry -> HashTableValue.
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
            - HashEntry -> HashTableValue.
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::putDelegate):
            - HashEntry -> HashTableValue.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
            - HashEntry -> HashTableValue.
        (GenerateHashTable):
            - emit the hash table index into the derived source (we were calculating this already to ensure chaining does not get too deep).

2014-03-12  Tim Horton  <timothy_horton@apple.com>

        Hook up image controls for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=130062
        <rdar://problem/15964809>

        Reviewed by Brady Eidson.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        Fix some header ordering.

        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        Handle mapping ImageControlsButtonPart to the -webkit-appearance value CSSValueImageControlsButton.

        * css/CSSValueKeywords.in:
        * platform/ThemeTypes.h:
        Add a -webkit-appearance value image-controls-button, and an associated control part.

        * dom/Node.h:
        (WebCore::Node::isImageControlsButtonElement): Added.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp: Added.
        (WebCore::RenderImageControlsButton::RenderImageControlsButton):
        (WebCore::RenderImageControlsButton::~RenderImageControlsButton):
        (WebCore::RenderImageControlsButton::updateLogicalWidth):
        (WebCore::RenderImageControlsButton::computeLogicalHeight):
        (WebCore::ImageControlsButtonElementMac::ImageControlsButtonElementMac):
        (WebCore::ImageControlsButtonElementMac::~ImageControlsButtonElementMac):
        (WebCore::ImageControlsButtonElementMac::maybeCreate):
        (WebCore::ImageControlsButtonElementMac::defaultEventHandler):
        (WebCore::ImageControlsButtonElementMac::createElementRenderer):
        * html/shadow/mac/ImageControlsButtonElementMac.h: Added.
        Add a new element/renderer pair for the single button that comprises image controls on Mac.
        RenderImageControlsButton gets its size from the theme's imageControlsButtonSize.

        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::RenderImageControls::RenderImageControls):
        (WebCore::RenderImageControls::~RenderImageControls):
        (WebCore::RenderImageControls::updateLogicalWidth):
        (WebCore::RenderImageControls::computeLogicalHeight):
        (WebCore::ImageControlsRootElement::maybeCreate):
        (WebCore::ImageControlsRootElementMac::ImageControlsRootElementMac):
        (WebCore::ImageControlsRootElementMac::~ImageControlsRootElementMac):
        (WebCore::ImageControlsRootElementMac::createElementRenderer):
        * html/shadow/mac/ImageControlsRootElementMac.h:
        Add a custom renderer for the root image controls element on Mac, which inherits
        its size from the <img> that it is shadowing.
        Add a ImageControlsButtonElementMac as the sole child of the root element.

        * html/shadow/mac/imageControlsMac.css:
        (.x-webkit-image-controls):
        (.x-webkit-image-controls-button):
        (.x-webkit-image-controls:hover .x-webkit-image-controls-button):
        The button should become opaque whenever *any* part of the image is hovered,
        not just the button itself. Also, use the new image-controls-button -webkit-appearance
        value to get the appropriate appearance from the theme.

        * page/ContextMenuContext.cpp:
        (WebCore::ContextMenuContext::ContextMenuContext):
        * page/ContextMenuContext.h:
        (WebCore::ContextMenuContext::setControlledImage):
        (WebCore::ContextMenuContext::controlledImage):
        Store an image on the ContextMenuContext instead of just whether we hit an image.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::imageFromImageElementNode):
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        (WebCore::ContextMenuController::populate):
        Keep track of the hit image in the ContextMenuContext.

        (WebCore::ContextMenuController::replaceControlledImage):
        Replace the hit image with a new one.

        * page/ContextMenuController.h:

        * rendering/RenderReplaced.h:
        Fix a double-space typo.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        Handle ImageControlsButtonPart in RenderTheme's switches.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::imageControlsButtonSize):
        (WebCore::RenderTheme::paintImageControlsButton):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::servicesRolloverButtonCell):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        (WebCore::RenderThemeMac::imageControlsButtonSize):
        Paint the image controls button.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readImage):
        (WebCore::Editor::WebContentReader::readURL):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readImage):
        * platform/URL.cpp:
        (WebCore::URL::fakeURLWithRelativePart):
        * platform/URL.h:
        Factor out code to create a "fake" URL (with a UUID "hostname" and the
        webkit-fake-url protocol), and make use of it where we construct such URLs.

2014-03-12  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash when running media/fallback.html test in MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification()
        https://bugs.webkit.org/show_bug.cgi?id=130136

        Reviewed by Eric Carlson.

        MediaPlayerPrivateAVFoundation is trying to lock its m_queueMutex from an async thread after
        while being destroyed in the main thread. To resolve this race condition, redispatch from
        the async thread to the main thread, and use a WeakPtr to determine whether the object has
        been destroyed or not.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::checkPlayability):

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

        [Win] Remove use of QTSDK
        https://bugs.webkit.org/show_bug.cgi?id=130049

        Reviewed by Darin Adler.

        Media testing already covers this functionality.

        * WebCore.vcxproj/WebCore.vcxproj: Remove QuickTime files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * platform/graphics/MediaPlayer.h: Remove QuickTime and Chromium
        media references.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp: Removed.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h: Removed.
        * platform/graphics/win/QTCFDictionary.cpp: Removed.
        * platform/graphics/win/QTCFDictionary.h: Removed.
        * platform/graphics/win/QTDecompressionSession.cpp: Removed.
        * platform/graphics/win/QTDecompressionSession.h: Removed.
        * platform/graphics/win/QTMovie.cpp: Removed.
        * platform/graphics/win/QTMovie.h: Removed.
        * platform/graphics/win/QTMovieGWorld.cpp: Removed.
        * platform/graphics/win/QTMovieGWorld.h: Removed.
        * platform/graphics/win/QTMovieTask.cpp: Removed.
        * platform/graphics/win/QTMovieTask.h: Removed.
        * platform/graphics/win/QTMovieVisualContext.cpp: Removed.
        * platform/graphics/win/QTMovieVisualContext.h: Removed.
        * platform/graphics/win/QTMovieWinTimer.cpp: Removed.
        * platform/graphics/win/QTMovieWinTimer.h: Removed.
        * platform/graphics/win/QTPixelBuffer.cpp: Removed.
        * platform/graphics/win/QTPixelBuffer.h: Removed.
        * platform/graphics/win/QTTrack.cpp: Removed.
        * platform/graphics/win/QTTrack.h: Removed.
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories): Don't look
        for the QuickTime plugin anymore.

2014-03-12  David Kilzer  <ddkilzer@apple.com>

        Fix build after r165472

        Fixes the following build failure:

            WebCore/rendering/shapes/Shape.cpp:97:20: error: unused function 'ensureRadiiDoNotOverlap' [-Werror,-Wunused-function]
            static inline void ensureRadiiDoNotOverlap(FloatRect& bounds, FloatSize& radii)
                               ^
            1 error generated.

        * rendering/shapes/Shape.cpp:
        (ensureRadiiDoNotOverlap): Remove unused function.

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

        [CSS Shapes] Remove deprecated shapes
        https://bugs.webkit.org/show_bug.cgi?id=125235

        Reviewed by Dirk Schulze.

        Remove support for deprecated shape types and syntax. These have
        already been removed from the CSS Shapes specification, so this aligns
        the implementation with the specification.

        The "new" tests below were simply moved from the old csswg directory,
        as they were the only tests there that applied to the current syntax.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-polygon-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-polygon-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-polygon-002.html

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        * css/CSSBasicShapes.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor):
        * rendering/style/BasicShapes.cpp:
        * rendering/style/BasicShapes.h:

2014-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] [Stable] deadlock in gobject introspection
        https://bugs.webkit.org/show_bug.cgi?id=125651

        Reviewed by Sergio Villar Senin.

        Make the default SoupNetworkSession a destroyable object to ensure
        the wrapped SoupSession is finalized when the process finishes. This
        is important because soup cancels any ongoing connection when finalized.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::defaultSession): Do not use NeverDestroyed.
        * platform/network/soup/SoupNetworkSession.h:

2014-03-12  Antti Koivisto  <antti@apple.com>

        Don't use NodeRenderingTraversal for pseudo elements
        https://bugs.webkit.org/show_bug.cgi?id=130091

        Reviewed by Andreas Kling.

        Make traversing during style resolve more comprehensible by handling before/after pseudo elements explicitly.

        With this patch NodeRenderingTraversal is only needed for InsertionPoints (which are nothing but an implementation
        detail of the <details> element at this point).

        * dom/Element.cpp:
        (WebCore::shouldUseNodeRenderingTraversalSlowPath):
        
            PseudoElements don't need the slow path anymore.

        (WebCore::Element::setBeforePseudoElement):
        (WebCore::Element::setAfterPseudoElement):
        (WebCore::Element::clearBeforePseudoElement):
        (WebCore::Element::clearAfterPseudoElement):
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::traverseParent):
        (WebCore::NodeRenderingTraversal::firstChildSlow):
        (WebCore::NodeRenderingTraversal::nextSiblingSlow):
        (WebCore::NodeRenderingTraversal::previousSiblingSlow):
        * dom/NodeRenderingTraversal.h:
        (WebCore::NodeRenderingTraversal::firstChild):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::nextSiblingRenderer):
        
            Add ::before/::after pseudo element handling here.

        (WebCore::Style::shouldCreateRenderer):
        (WebCore::Style::elementInsideRegionNeedsRenderer):
        (WebCore::Style::createRendererIfNeeded):
        (WebCore::Style::previousSiblingRenderer):
        
            Add ::before pseudo element handling here (text node can't be ::after).

        (WebCore::Style::reattachTextRenderersForWhitespaceOnlySiblingsAfterAttachIfNeeded):
        (WebCore::Style::textRendererIsNeeded):
        (WebCore::Style::createTextRendererIfNeeded):
        (WebCore::Style::attachTextRenderer):
        (WebCore::Style::updateTextRendererAfterContentChange):
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachDistributedChildren):
        
            Handle InsertionPoints in one place.

        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::resolveLocal):
        (WebCore::Style::updateTextStyle):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::resolveTree):
        
            Pass the rendering parent around to various functions instead of determining it repeatedly by calling 
            NodeRenderingTraversal::parent. It is always the same for all direct children being resolved and generally just
            the parent element.

2014-03-12  Frédéric Wang  <fred.wang@free.fr>

        Invisible Operators should not add space.
        https://bugs.webkit.org/show_bug.cgi?id=115786

        Reviewed by Chris Fleizach.

        This change adds special handling for invisible operator to ensure they really behave as empty box. We now ignore their glyph widths and do not paint them.

        Test: mathml/presentation/mo-invisible.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLOperator::paint):
        * rendering/mathml/RenderMathMLOperator.h:

2014-03-11  Frédéric Wang  <fred.wang@free.fr>

        Implement MathML spacing around operators .
        https://bugs.webkit.org/show_bug.cgi?id=115787

        Reviewed by Chris Fleizach.

        This makes the <mo> operators use the lspace/rspace properties to
        determine their spacing. The spacing is now consistent with the one
        of <mfenced> and as a consequence bug 118843 is fixed. This also ensures
        that the rendering of <mo> elements is updated when the form or
        attributes are changed.

        Tests: mathml/presentation/dir-mo.html
               mathml/presentation/mo-form-dynamic.html
               mathml/presentation/mo-form-minus-plus.html
               mathml/presentation/mo-form.html
               mathml/presentation/mo-lspace-rspace-dynamic.html
               mathml/presentation/mo-lspace-rspace.html
               mathml/presentation/mo-whitespaces.html

        * css/mathml.css:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::childrenChanged):
        * mathml/MathMLInlineContainerElement.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
        (WebCore::RenderMathMLOperator::SetOperatorProperties):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::updateOperatorProperties):
        (WebCore::RenderMathMLOperator::updateStyle):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::updateOperatorProperties):
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLToken.h:

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

        Get the incomplete WebVTT Regions code to build again.
        https://bugs.webkit.org/show_bug.cgi?id=130094

        Reviewed by Eric Carlson.

        The feature is not being turned on here, so there are no new tests.

        * DerivedSources.make: Add missing IDL files for Regions.
        * WebCore.xcodeproj/project.pbxproj: Add Regions-related files.
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newRegionsParsed): Add stub implementation.
        * html/track/LoadableTextTrack.cpp: Add missing include file.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Correct ordering of construction
        to avoid compiler warning.

2014-03-11  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove unused method from BatteryController
        https://bugs.webkit.org/show_bug.cgi?id=130063

        Reviewed by Darin Adler.

        * Modules/battery/BatteryController.h: Removed client() which is not used.

2014-03-11  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-posinset and aria-setsize through object attributes
        https://bugs.webkit.org/show_bug.cgi?id=130011

        Reviewed by Chris Fleizach.

        Based on http://www.w3.org/TR/2014/PR-wai-aria-implementation-20140206/
        aria-poinset and aria-setsize can be exposed as object attributes.

        Test: accessibility/aria-setsize-posinset.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2014-03-10  Frédéric Wang  <fred.wang@free.fr>

        Improve renderer classes for MathML Token elements.
        https://bugs.webkit.org/show_bug.cgi?id=124838

        Reviewed by Chris Fleizach.

        This patch continues the refactoring of token elements that has been
        started in bug 44208. The <mo> element now derives from the
        RenderMathMLToken class, which was already used for the <mi> element.
        The behavior of anonymous <mo> elements created by the <mfenced> element
        is now more consistent with the one of "standard" <mo> elements and the
        spacing around them is now handled in RenderMathMLOperator. This is a
        first step towards fixing bugs 115787 and 118843. The only visible
        rendering change is how <mfenced> open/close attributes handle
        whitespace and multiple characters and some tests are added for that.
        Other features are already covered by other tests. Finally, this also
        removes some code from AccessibilityRenderObject that was used to
        workaround issues with <mo> elements.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::startOfContinuations):
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::isMathOperator):
        (WebCore::AccessibilityRenderObject::isIgnoredElementWithinMathTree):
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::didAttachRenderers):
        (WebCore::MathMLTextElement::childrenChanged):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::RenderMathMLFenced):
        (WebCore::RenderMathMLFenced::updateFromElement):
        (WebCore::RenderMathMLFenced::createMathMLOperator):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
        (WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
        (WebCore::RenderMathMLOperator::SetOperatorProperties):
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLOperator::rebuildTokenContent):
        (WebCore::RenderMathMLOperator::updateTokenContent):
        (WebCore::RenderMathMLOperator::updateStyle):
        (WebCore::RenderMathMLOperator::firstLineBaseline):
        (WebCore::RenderMathMLOperator::paint):
        (WebCore::RenderMathMLOperator::paintChildren):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::createWrapperIfNeeded):

2014-03-10  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Expose checked/disabled/expanded/pressed/readonly/selected
        https://bugs.webkit.org/show_bug.cgi?id=129781

        Reviewed by Joseph Pecoraro.

        Enabling several more properties to be exposed in the Accessibility Node Inspector.

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

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsChecked):
        * accessibility/AccessibilityObject.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/protocol/DOM.json:

2014-03-10  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] inset corner radii are not flipped for vertical writing modes
        https://bugs.webkit.org/show_bug.cgi?id=129918

        Reviewed by Dean Jackson.

        When creating an inset shape, convert the radii to logical coordinates
        as well as the box.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-right.html

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Convert the radii to logical
            coordinates.

2014-03-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Frontend loaded resources from cache are not hidden as expected
        https://bugs.webkit.org/show_bug.cgi?id=130044

        Reviewed by Timothy Hatcher.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        Use the new request that was passed in. Assume it is filled in appropriately.

        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldContinueAfterNotifyingLoadedFromMemoryCache):
        Carry over the hidden from inspector state if the passed in request had it,
        and create the request that loadedResourceFromMemoryCache will use.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        Add missing ifdefs for INSPECTOR only function.

2014-03-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove 'visibilitychange' attribute event listener from document
        https://bugs.webkit.org/show_bug.cgi?id=129794

        Reviewed by Simon Fraser.

        Remove the unused attribute event listener which is not defined in Page Visibility API spec.
        http://www.w3.org/TR/page-visibility/#sec-document-interface

        * dom/Document.h:

2014-03-10  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WebKit 2] Wire the unobscured rect in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=130058

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::unobscuredContentRect):
        (WebCore::ScrollView::setUnobscuredContentRect):

2014-03-10  Benjamin Poulain  <bpoulain@apple.com>

        makeSelectorPseudoTypeMap.py should not be copied in the WebCore bundle

        * WebCore.xcodeproj/project.pbxproj:

2014-03-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Add support for Geoclue2
        https://bugs.webkit.org/show_bug.cgi?id=120185

        Reviewed by Carlos Garcia Campos.

        Patch by Anton Obzhirov <a.obzhirov@samsung.com> and Mario Sanchez Prada <mario.prada@samsung.com>

        Implement a new geolocation provider based on Geoclue2, which will only
        be used if a good enough version of Geoclue2 is found  at configure time.

        * GNUmakefile.am: Generate C-API for accessing the D-Bus API
        provided by Geoclue2, and place it in DerivedSources.
        * GNUmakefile.list.am: Add GeolocationProviderGeoclue2.cpp, and
        include the generated proxy files when using Geoclue2.
        * PlatformGTK.cmake: Likewise, for CMake based builds.
        * platform/geoclue/GeolocationProviderGeoclue.h: Modified to
        accomodate the needs both for Geoclue and Geoclue2 providers.
        * platform/geoclue/GeolocationProviderGeoclue1.cpp: Renamed from Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.cpp.
        (GeolocationProviderGeoclue::getPositionCallback):
        (GeolocationProviderGeoclue::positionChangedCallback):
        (GeolocationProviderGeoclue::createGeocluePositionCallback):
        (GeolocationProviderGeoclue::geoclueClientSetRequirementsCallback):
        (GeolocationProviderGeoclue::createGeoclueClientCallback):
        (GeolocationProviderGeoclue::GeolocationProviderGeoclue):
        (GeolocationProviderGeoclue::~GeolocationProviderGeoclue):
        (GeolocationProviderGeoclue::startUpdating):
        (GeolocationProviderGeoclue::stopUpdating):
        (GeolocationProviderGeoclue::setEnableHighAccuracy):
        (GeolocationProviderGeoclue::initializeGeoclueClient):
        (GeolocationProviderGeoclue::initializeGeocluePosition):
        (GeolocationProviderGeoclue::updateClientRequirements):
        (GeolocationProviderGeoclue::positionChanged):
        (GeolocationProviderGeoclue::errorOccurred):
        * platform/geoclue/GeolocationProviderGeoclue2.cpp: Added.
        (GeolocationProviderGeoclue::GeolocationProviderGeoclue):
        (GeolocationProviderGeoclue::~GeolocationProviderGeoclue):
        (GeolocationProviderGeoclue::startUpdating):
        (GeolocationProviderGeoclue::stopUpdating):
        (GeolocationProviderGeoclue::setEnableHighAccuracy):
        (GeolocationProviderGeoclue::createGeoclueManagerProxyCallback):
        (GeolocationProviderGeoclue::getGeoclueClientCallback):
        (GeolocationProviderGeoclue::createGeoclueClientProxyCallback):
        (GeolocationProviderGeoclue::startClientCallback):
        (GeolocationProviderGeoclue::locationUpdatedCallback):
        (GeolocationProviderGeoclue::createLocationProxyCallback):
        (GeolocationProviderGeoclue::startGeoclueClient):
        (GeolocationProviderGeoclue::updateLocation):
        (GeolocationProviderGeoclue::errorOccurred):
        (GeolocationProviderGeoclue::updateClientRequirements):

2014-03-10  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed Windows Build Fix.

        * WebCore.vcxproj/WebCore.vcxproj: Don't build cURL files for Apple Windows port.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerPaintContents): Correct
        method signature to match base class.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::loadInternal): Use proper character encoding.

2014-03-10  Simon Fraser  <simon.fraser@apple.com>

        Fix three leaks
        https://bugs.webkit.org/show_bug.cgi?id=130048

        Reviewed by Anders Carlsson.

        The NSDictionary was leaked.

        * page/ios/UserAgentIOS.mm:
        (WebCore::osMarketingVersion):

2014-03-10  Beth Dakin  <bdakin@apple.com>

        Set background color of WK2's UIScrollView to the pageExtendedBackgroundColor
        https://bugs.webkit.org/show_bug.cgi?id=129919

        Reviewed by Benjamin Poulain.

        WK2 needs to be able to ask for the pageExtendedBackgroundColor, so this patch 
        adds a function to Page that will return it

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::pageExtendedBackgroundColor):
        * page/Page.h:
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::rootExtendedBackgroundColor):

2014-03-10  Benjamin Poulain  <bpoulain@apple.com>

        Generalize unobscured rect to all ports
        https://bugs.webkit.org/show_bug.cgi?id=130036

        Reviewed by Simon Fraser.

        iOS differentiates visible content and unobscured content. This patch moves the concept to all
        ports to remove the #ifdefs from the call sites.

        On everything but iOS, unobscuredRect and visibleRect are the same.

        * WebCore.exp.in:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:
        (WebCore::ScrollView::unobscuredContentRectIncludingScrollbars):
        (WebCore::ScrollView::unobscuredContentRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewportSize):

2014-03-10  Benjamin Poulain  <benjamin@webkit.org>

        Start splitting CSS Selectors's pseudo types
        https://bugs.webkit.org/show_bug.cgi?id=130003

        Reviewed by Andreas Kling.

        CSS Selectors pseudo types come in 3 flavors: page, pseudo class, pseudo elements.

        The three types are mixed together in a single enum list named PseudoType. Only some combinations
        of match type + pseudo type are valid, but this is implicitly defined from the code.

        This patch is the beginning of a refactoring to add more clear boundaries between
        valid and invalid combinations.

        First, the handling of page pseudo types is completely split from the other values.
        The parser use a different method for handling the value CSSParserSelector::parsePagePseudoSelector().

        PagePseudo types no longer store their string in the CSSSelector either to reduce the redundancy
        with m_pseudoType.
        When we need to generate the string for those CSSSelector, we recreate the string as needed in
        CSSSelector::selectorText().

        The remaining two types are not yet split in this patch but this introduce the preliminary clean up
        toward that goal.
        The list of parsed pseudo types is now generated at compile time from the source in SelectorPseudoTypeMap.in.

        * DerivedSources.make:
        The mapping of strings to pseudo types is generated from SelectorPseudoTypeMap.in
        by the new script makeSelectorPseudoTypeMap.py.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGrammar.y.in:
        Split the parsing of Pseudo Types. Pseudo page get its own method. The others will need some work.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePagePseudoSelector):
        (WebCore::CSSParserSelector::setPseudoTypeValue):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForPage):
        This is an example of invalid combination that is hidden by the current code.
        First, Left and Right could never appear in a pseudo class match.
        (WebCore::CSSSelector::pseudoId):
        (WebCore::CSSSelector::parsePseudoType):
        (WebCore::appendPseudoTypeTailIfNecessary):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::pseudoType):
        (WebCore::CSSSelector::matchesPseudoElement):
        (WebCore::CSSSelector::setValue):
        (WebCore::CSSSelector::CSSSelector):
        * css/PageRuleCollector.cpp:
        (WebCore::checkPageSelectorComponents):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorPseudoTypeMap.h: Added.
        * css/SelectorPseudoTypeMap.in: Added.
        * css/makeSelectorPseudoTypeMap.py: Added.
        (enumerablePseudoType):
        (expand_ifdef_condition):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):

2014-03-10  Enrica Casucci  <enrica@apple.com>

        iOS build fix after http://trac.webkit.org/changeset/165385

        Unreviewed.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):

2014-03-10  Daniel Bates  <dabates@apple.com>

        REGRESSION (r159218): FrameView::layout() should destroy TemporaryChange<LayoutPhase>
        before destroying Ref<FrameView>
        https://bugs.webkit.org/show_bug.cgi?id=130034
        <rdar://problem/15664288>

        Reviewed by Alexey Proskuryakov.

        We should always destroy TemporaryChange<LayoutPhase> before destroying Ref<FrameView>
        in FrameView::layout() so as to ensure that the FrameView exists when we restore the
        original layout phase value.

        The existing test fast/frames/crash-remove-iframe-during-object-beforeload.html covers
        this change. Although you must run the test with Guard Malloc enabled (i.e. run-webkit-tests -r).

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Move construction of variable protect before the construction of
        variable layoutPhaseRestorer. Additionally, add a period to the end of the comment associated
        with variable protect.

2014-03-10  Zsolt Borbely  <borbezs@inf.u-szeged.hu>

        ASSERTION FAILED: span >= 1
        https://bugs.webkit.org/show_bug.cgi?id=129148

        Reviewed by Andreas Kling.

        Set the value of span to 1 if the given number is too big or zero.

        Test: fast/table/incorrect-colgroup-span-values.html

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseAttribute):

2014-03-10  Brent Fulgham  <bfulgham@apple.com>

        [Win] Pass environment to Pre-Build, Pre-Link, and Post-Build Stages.
        https://bugs.webkit.org/show_bug.cgi?id=130023.

        Reviewed by Dean Jackson.

        * WebCore.vcxproj/WebCore.proj: Avoid trailing slashes in path values to
        prevent escaping during later string substitution.

2014-03-10  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Hit-testing is not working properly inside scrollable regions
        https://bugs.webkit.org/show_bug.cgi?id=130015

        Reviewed by Antti Koivisto.

        When hit-testing inside the flow thread's layer, the scrolled offset
        of the current region must be taken into consideration.

        Test: fast/regions/scrollable-regions-hit-testing-inside.html

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

2014-03-10  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] SVG Image valued shape fails if root element's size is relative
        https://bugs.webkit.org/show_bug.cgi?id=128983

        Reviewed by Simon Fraser.

        When creating a shape based on an Image, compute its dimensions using
        RenderBoxModelObject::calculateImageIntrinsicDimensions(), then set the
        ImageResource's containerSize, and then use imageForRenderer() to get the
        image to be drawn. The first step resolves SVG Image relative sizes, the
        second step creates and caches an SVGImageForContainer with the correct
        containerSize, and the last step retrieves the SVGImageForContainer.

        Test: fast/shapes/shape-outside-floats/shape-outside-relative-size-svg.html

        * rendering/RenderBoxModelObject.h: Publicized calculateImageIntrinsicDimensions() and its enum.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::getShapeImageAndRect):
        (WebCore::ShapeInfo<RenderType>::computedShape):

2014-03-10  Darin Adler  <darin@apple.com>

        TextIterator: Use StringView and references rather than pointers
        https://bugs.webkit.org/show_bug.cgi?id=129975

        Reviewed by Anders Carlsson.

        TextIterator refinements:
        - Use StringView instead of deprecatedCharacters to point to characters within strings.
        - Added TextIteratorCopyableText, a safe way to copy the current text of a TextIterator,
          for use by WordAwareIterator.
        - Removed m_shouldStop; iterators stop by setting m_positionNode to null, and there is no
          need for a separate boolean to do the same thing.
        - Got rid of all the boolean data members set based on the text iterator behavior; instead
          store the behavior in a data member and check it directly.
        - Changed most functions to use references rather than pointers.
        - Small micro-optimizations, such as using fastGetAttribute rather than getAttribute.
        - Switched to nullptr instead of 0 where appropriate.
        - Removed unused functions.
        - Cut down on use of abbreviations instead of words.
        - Renamed data members and argument names for clarity.
        - Split up assertions that needlessly asserted more than one thing in a single expression.
        - Treat CDATASection just like other Text, since its text will be visible.

        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling): Pass reference rather than pointer.
        (WebCore::Editor::rangeOfString): Ditto.
        (WebCore::Editor::countMatchesForText): Ditto.
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspelling): Ditto.

        * editing/TextIterator.cpp:
        (WebCore::depthCrossingShadowBoundaries): Take a reference rather than a pointer.
        (WebCore::nextInPreOrderCrossingShadowBoundaries): Ditto.
        (WebCore::fullyClipsContents): Ditto.
        (WebCore::ignoresContainerClip): Ditto.
        (WebCore::pushFullyClippedState): Ditto.
        (WebCore::setUpFullyClippedStack): Ditto.
        (WebCore::isRendererReplacedElement): Use references rather than pointers in the
        implementation. Also use fastGetAttribute instead of getAttribute.
        (WebCore::TextIteratorCopyableText::reset): Added.
        (WebCore::TextIteratorCopyableText::set): Added.
        (WebCore::TextIteratorCopyableText::appendToStringBuilder): Added.
        (WebCore::TextIterator::TextIterator): Use more initialization rather than assignment.
        Got rid of some local variables.
        (WebCore::TextIterator::advance): Removed the m_shouldStop boolean, uneeded.
        Many other improvements. Use isTextNode instead of nodeType.
        (WebCore::hasVisibleTextNode): Changed this into a file-private helper function
        instead of a member function.
        (WebCore::TextIterator::handleTextNode): Used references and cut down on type casts.
        Gave local variables clearer names.
        (WebCore::TextIterator::handleTextBox): More of the same.
        (WebCore::TextIterator::handleTextNodeFirstLetter): Ditto.
        (WebCore::TextIterator::handleReplacedElement): Ditto.
        (WebCore::shouldEmitTabBeforeNode): Ditto.
        (WebCore::hasHeaderTag): Added.
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode): More of the same.
        (WebCore::shouldEmitNewlineAfterNode): Ditto.
        (WebCore::shouldEmitNewlineBeforeNode): Ditto.
        (WebCore::shouldEmitExtraNewlineForNode): Ditto.
        (WebCore::collapsedSpaceLength): Use StringImpl directly instead of using the
        deprecatedCharacters function.
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero): More like above.
        (WebCore::TextIterator::shouldEmitSpaceBeforeAndAfterNode): Ditto.
        (WebCore::TextIterator::representNodeOffsetZero): Ditto.
        (WebCore::TextIterator::handleNonTextNode): Ditto.
        (WebCore::TextIterator::exitNode): Ditto.
        (WebCore::TextIterator::emitCharacter): Changed to use the new copyable text class
        instead of managing the single character buffer directly here.
        (WebCore::TextIterator::emitText): Changed to take a Text& and use the copyable text
        class. Added a FIXME about a mistake I noticed.
        (WebCore::TextIterator::range): Streamlined and simplified a bit. Updated data
        member names to be a bit clearer. This function never returned null before, but there
        was a code path that looked like it would; I removed that.
        (WebCore::TextIterator::node): Removed unneeded null checks; the range function will
        never return a range of null or one with null for a start container.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): More
        like above.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Reorganized a bit and removed
        m_shouldStop.
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode): More of the same.
        (WebCore::SimplifiedBackwardsTextIterator::handleFirstLetter): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::handleReplacedElement): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::exitNode): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::emitCharacter): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::advanceRespectingRange): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::range): Ditto.
        (WebCore::CharacterIterator::CharacterIterator): Ditto.
        (WebCore::CharacterIterator::range): Ditto. No need for ASSERT_NO_EXCEPTION.
        (WebCore::CharacterIterator::advance): Ditto.
        (WebCore::BackwardsCharacterIterator::BackwardsCharacterIterator): Ditto.
        (WebCore::BackwardsCharacterIterator::range): Ditto.
        (WebCore::BackwardsCharacterIterator::advance): Ditto.
        (WebCore::WordAwareIterator::WordAwareIterator): Ditto.
        (WebCore::WordAwareIterator::advance): Use copyableText for m_previousText, fixing
        the FIXME that I wrote in here before.
        (WebCore::WordAwareIterator::text): Ditto.
        (WebCore::containsKanaLetters): Changed to quickly return false when the pattern
        is all Latin-1 rather than expanding to 16-bit just to check.
        (WebCore::SearchBuffer::SearchBuffer): Iterate the target using the string operator[]
        instead of using deprecatedCharacters.
        (WebCore::SearchBuffer::append): Do the folding of quote marks and hyphens one character
        at a time as we move characters into the buffer instead of in a separate loop.
        (WebCore::TextIterator::rangeLength): Updated for changes eslwehere.
        (WebCore::TextIterator::subrange): Ditto.
        (WebCore::isInsideReplacedElement): Ditto. Also streamlined and removed unneeded null check.
        (WebCore::TextIterator::rangeFromLocationAndLength): Updated for changes elsewhere and
        removed unneeded ASSERT_NO_EXCEPTION.
        (WebCore::plainText): Ditto.
        (WebCore::collapsedToBoundary): Ditto.
        (WebCore::findPlainText): Ditto.

        * editing/TextIterator.h: Changed many functions to take references instead of pointers.
        Added TextIteratorCopyableText, to represent the current text in a TextIterator in a form
        that can be safely copied and used after further iteration. Reorganized member functions so
        they are in the same order in all the classes. Changed TextIterator to use
        TextIteratorCopyableText. Removed many unused functions, including:
        - TextIterator::length
        - TextIterator::deprecatedTextIteratorCharacters
        - TextIterator::characterAt
        - SimplifiedBackwardsTextIterator::length
        - CharacterIterator::length
        - CharacterIterator::string
        - WordAwareIterator::length
        - WordAwareIterator::range

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace): Pass reference rather than pointer.
        Use text().length() instead of length(). Check atEnd() before using CharacterIterator, since
        iterator member functions don't work when at the end.
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary): Ditto.
        (WebCore::nextBoundary): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::visiblePositionForIndexUsingCharacterIterator): Ditto.
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::indexCountOfWordPrecedingSelection): Ditto.
        (WebCore::Frame::wordsInCurrentParagraph): Ditto.

2014-03-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Clean up library linking
        https://bugs.webkit.org/show_bug.cgi?id=129782

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Some files are duplicated on the source list of two convenience
        libraries. Ensure that they are all compiled into WebCore instead of WebCorePlatformGTK.
        Some simply need to be moved to WebCore from WebCorePlatformGTK. Don't try to link
        WebCorePlatformGTK against WebCore -- convenience libraries should be able to save
        their symbol resolution for the final linking step.

2014-03-10  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Scrolling regions with the mouse wheel only works properly if hovering over the region's padding
        https://bugs.webkit.org/show_bug.cgi?id=129485

        Reviewed by Andrei Bucur.

        When searching for the region under the mouse pointer (to identify which region to scroll), 
        the localToAbsolute method must be called on the region container, not the region itself.
        Also, when calling the offsetFromContainer method on a named flow fragment,
        it must only take into consideration the border and padding of the fragment container,
        not its scrolled offset.

        Test: fast/regions/wheel-scrollable-single-region.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        * rendering/RenderFlowThread.cpp:
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::offsetFromContainer):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::fragmentFromAbsolutePointAndBox):
        * rendering/RenderNamedFlowThread.h:

2014-03-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove unused dispatchStorageEvent() from StorageAreaSync
        https://bugs.webkit.org/show_bug.cgi?id=129999

        Reviewed by Andreas Kling.

        dispatchStorageEvent() is not used anywhere.

        * storage/StorageAreaSync.h: Remove dispatchStorageEvent().

2014-03-09  Alexey Proskuryakov  <ap@apple.com>

        iOS build fix.

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

2014-03-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Don't perform a round-trip through WebProcess before interpreting key events
        https://bugs.webkit.org/show_bug.cgi?id=129812

        Reviewed by Darin Adler.

        No significant behavior changes expected, except for Esc key processing, which now
        dispatches a keypress before executing its default action.

        * platform/KeypressCommand.h: Added.
        (WebCore::KeypressCommand::KeypressCommand):
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Moved KeypressCommand from dom/KeyboardEvent.h to its own header, as it needed
        in platform/ directory now.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        (WebCore::KeyboardEvent::handledByInputMethod):
        (WebCore::KeyboardEvent::keypressCommands):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::handledByInputMethod):
        (WebCore::PlatformKeyboardEvent::commands):
        PlatformKeyboardEvent now carries results of interpreting the event by AppKit. This
        is logically not much different from carrying charcode, and is similar to what Gtk
        does for input methods.
        KeyboardEvent already had keypress commands, which were added to it after construction.
        It's still possible for WebKit1, while with WebKit2, they are provided at construction
        time. The event now also has a boolean for whether IM handled it already.

2014-03-09  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Pass FloatSize boxsize to transform animations to support device pixel sizing.
        https://bugs.webkit.org/show_bug.cgi?id=129985

        Reviewed by Simon Fraser.

        This is in preparation to stop passing integral positioned boxes to transform animations.

        No change in behavior.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::addAnimation):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::getTransformFunctionValue):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startTransition):

2014-03-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS Wk2] Can't scroll after going back to page in page cache
        https://bugs.webkit.org/show_bug.cgi?id=129989
        <rdar://problem/16217588>

        Reviewed by Dan Bernstein.

        iOS has a special FrameLoader::forceLayoutWithoutRecalculatingStyle()
        function that is called instead of FrameView::forceLayout(). This was unimplemented
        for the WK2 FrameLoaderClient, so no layout was forced, with the result
        that the contentSize was never updated and scrolling was broken.
        
        Fix by renaming the client function to forceLayoutOnRestoreFromPageCache()
        and having it return a bool to say whether the default forceLayout()
        should be done. WK1 can then continue to have its custom behavior,
        and Wk2 will simply do a forceLayout().
        
        Also remove FrameLaoderClient::forceLayout(), which was never called.

        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/FrameLoaderClient.h:

2014-03-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Get position:fixed working slighlty better
        https://bugs.webkit.org/show_bug.cgi?id=129988

        Reviewed by Dan Bernstein.

        On iOS we want to use the viewport-constrained visible rect, not
        just the visible rect.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):

2014-03-07  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Don't call scrollOffsetForFixedPosition a second time if we have no header and footer layers
        https://bugs.webkit.org/show_bug.cgi?id=129912

        Reviewed by Tim Horton.

        Avoid extra work if we have no header or footer layers.

        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition):

2014-03-08  Zalan Bujtas  <zalan@apple.com>

        RenderElement::valueForLength() callers misuse bool parameter.
        https://bugs.webkit.org/show_bug.cgi?id=129982

        Reviewed by Andreas Kling.

        Remove bogus RenderView* parameter.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):

2014-03-08  Jeremy Jones  <jeremyj@apple.com>

        Allow media element to supply the video layer after fullscreen transition has already begun.
        https://bugs.webkit.org/show_bug.cgi?id=129870

        Reviewed by Eric Carlson.

        Instead of borrowing the videolayer from the HTMLMediaElement, WebVideoFullscreen now supplies a layer to HTMLMediaElement to fill in as needed and at the appropriate time.

        This allows fullscreen even if the video layer hasn't yet been created. And in the future it allows MediaPlayer to supply other layers such as closed captions. 

        * WebCore.exp.in:
        Remove exports related to borrowing and lend the video layer.
        Add exports for supplying a layer to fullscreen and keepying the frame and gravity properties in sync.

        * html/HTMLMediaElement.cpp:
        Remove the concept of borrowing the platform layer.
        Add the concept of a supplied m_videoFullscreenLayer, into which the media player can add layers.
        When the m_videoFullscreenFrame is supplied, don't show the video layer inline any more.
        Stash video layer properties in case the media player is not yet created.

        (WebCore::HTMLMediaElement::HTMLMediaElement):
        Initialize gravity to the default. Remove m_platformLayerBorrowed.

        (WebCore::HTMLMediaElement::platformLayer):
        When we have a m_videoFullscreenLayer, don't show video inline.

        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        Pass along the m_videoFullscreenLayer to the MediaPlayer if available or just stash it for later.

        (WebCore::HTMLMediaElement::createMediaPlayer):
        Pass along video fullscreen properties that we may have accumulated before the MediaPlayer was created.

        (WebCore::HTMLMediaElement::setVideoFullscreenGravity):
        Stash the gravity property, pass it along to the media player if possible.

        * html/HTMLMediaElement.h:
        Remove concept of borrowing the video layer. Add properties for a supplied videoFullscreenLayer.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVideoFullscreenLayer):
        Forward on to internal implementation.

        (WebCore::MediaPlayer::setVideoFullscreenFrame):
        Forward on to internal implementation.

        (WebCore::MediaPlayer::setVideoFullscreenGravity):
        Forward on to internal implementation.

        * platform/graphics/MediaPlayer.h:
        Add methods for video fullscreen Layer, Frame and Gravity.

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setVideoFullscreenLayer):
        Add default implementation.

        (WebCore::MediaPlayerPrivateInterface::setVideoFullscreenFrame):
        Add default implementation.
        
        (WebCore::MediaPlayerPrivateInterface::setVideoFullscreenGravity):
        Add default implementation.
        
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        Add support for fullscreen video layer, frame and gravity.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        Init m_videoFullscreenGravity. 

        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        Apply cached properties once video layer is created and add to the fullscreen layer.

        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        Cache the property value. Add video layer right away available.

        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenFrame):
        Cache the property value. Apply to video layer right away if available.

        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenGravity):
        Cache the property value. Apply to video layer right away if available.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        Supply a fullscreen video layer to the WebVideoFullscreenModel and to the WebVideoFullscreenInterface.

        (-[WebVideoFullscreenController enterFullscreen:]):
        Supply a fullscreen video layer to the WebVideoFullscreenModel and to the WebVideoFullscreenInterface.

        (-[WebVideoFullscreenController didExitFullscreen]):
        Clean up the videoFullscreenLayer.

        * platform/ios/WebVideoFullscreenInterface.h:
        Remove methods related to lending the video layer.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        Rename WebAVPlayer layer to WebAVVideoLayer to match the AVKit name.
        Remove functions related to lending the video layer.
        Supply a layer directly to enterFullscreen.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (+[WebAVVideoLayer videoLayer]):
        Rename WebAVPlayer layer to WebAVVideoLayer to match the AVKit name.

        (-[WebAVVideoLayer setPlayerController:]):
        Store the AVPlayerController to prevent AVKit's default behavior.

        (-[WebAVVideoLayer setBounds:]):
        Forward this onto the WebVideoFullscreenModel

        (-[WebAVVideoLayer setVideoLayerGravity:]):
        Forward this onto the WebVideoFullscreenModel

        (-[WebAVVideoLayer videoLayerGravity]):
        Forward this onto the WebVideoFullscreenModel

        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        Supply a video layer directly instead of relying on one being previously loaned.

        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        Clean-up now assumes there is a video layer.

        * platform/ios/WebVideoFullscreenModel.h:
        Remove methods for borrowing and returning video layers.
        Add methods for keeping video layer state in sync.

        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        Remove methods for borrowing and returning video layers.
        Add method for supplying a video fullscreen layer.
        Add methods for keeping video layer state in sync.

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::setMediaElement):
        Handle audio element case by setting hasVideo to false.

        (WebVideoFullscreenModelMediaElement::setVideoFullscreenLayer):
        Pass along the video fullscreen layer to the media element.

        (WebVideoFullscreenModelMediaElement::setVideoLayerFrame):
        Pass along the video layer frame to the media element.

        (WebVideoFullscreenModelMediaElement::setVideoLayerGravity):
        Pass along the video layer gravity to the media element.

2014-03-08  Jae Hyun Park  <jaepark@webkit.org>

        Clean up PlatformLayer.h
        https://bugs.webkit.org/show_bug.cgi?id=129967

        Reviewed by Martin Robinson.

        * platform/graphics/PlatformLayer.h:
        Remove duplicated declaration of PlatformLayer when using TextureMapper.

2014-03-08  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Simple compositing container layer (isSimpleContainerCompositingLayer) paints to wrong position.
        https://bugs.webkit.org/show_bug.cgi?id=129861

        Reviewed by Simon Fraser.

        This patch ensures that both the simple and non-simple cases paint to the same position.
        Simple compositing container layer codepath needs to take the fractional device pixel offset
        into account when painting. Without the fractional value, the final paint rounding could push the
        paint offset to a different position.
        retina example:
        compositing top-left: 0px 0px.
        fractional offset: 0.3px 0.3px
        painting coords without offseting: 0px 0px
                           with offseting: 0.5px 0.5px

        Tests: compositing/hidpi-simple-container-layer-on-device-pixel.html

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsRect):
        (WebCore::GraphicsLayer::setContentsRect):
        (WebCore::GraphicsLayer::contentsClippingRect):
        (WebCore::GraphicsLayer::setContentsClippingRect):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsRect):
        (WebCore::GraphicsLayerCA::setContentsClippingRect):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundColor):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        (WebCore::RenderLayerBacking::contentOffsetInCompostingLayer):
        (WebCore::RenderLayerBacking::backgroundBoxForPainting):
        * rendering/RenderLayerBacking.h:

2014-03-08  Oliver Hunt  <oliver@apple.com>

        SerializedScriptValue may move Identifiers between worlds
        https://bugs.webkit.org/show_bug.cgi?id=129979

        Reviewed by Andreas Kling.

        Test: fast/workers/worker-copy-shared-blob-url.html

        Don't use Strings to store blob URLs as String's may be Identifiers
        and they can only exist in one world/thread at a time.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserializeString):
        (WebCore::SerializedScriptValue::addBlobURL):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/js/SerializedScriptValue.h:

2014-03-07  Timothy Hatcher  <timothy@apple.com>

        Load source maps and their resources asynchronously.

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

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        Honor the hiddenFromInspector flag.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveData):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::replayXHR):
        (WebCore::InspectorResourceAgent::loadResource):
        * inspector/InspectorResourceAgent.h:
        Honor the hiddenFromInspector flag by keeping track of
        hidden identifiers in a HashSet.

        * inspector/protocol/Network.json:
        (Network.loadResource): Added.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::hiddenFromInspector): Added.
        (WebCore::ResourceRequestBase::setHiddenFromInspector): Added.
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        Add a flag to hide the request from the Inspector.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::sendForInspector): Added.
        (WebCore::XMLHttpRequest::sendForInspectorXHRReplay): Renamed.
        (WebCore::XMLHttpRequest::createRequest):
        * xml/XMLHttpRequest.h:
        Make Inspector loads allow cross-origins and hide their request
        from the Inspector itself.

2014-03-07  Tim Horton  <timothy_horton@apple.com>

        [WebKit2][iOS] PDF
        https://bugs.webkit.org/show_bug.cgi?id=129600
        <rdar://problem/15260216>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializePDFMIMETypes):
        (WebCore::initializePostScriptMIMETypes):
        (WebCore::initializeMIMETypeRegistry):
        (WebCore::MIMETypeRegistry::getPDFMIMETypes):
        * platform/MIMETypeRegistry.h:
        Split PDF and PostScript MIME types, so WebKit2 can retrieve just the PDF ones
        without PostScript included.

2014-03-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Comment in RenderStyle is no longer accurate
        https://bugs.webkit.org/show_bug.cgi?id=129956

        Reviewed by Simon Fraser.

        RenderStyle::createStyleInheritingFromPseudoStyle was moved from RenderImage. Before it
        was moved, there was an image-specific comment in the function. However, that comment
        is both irrelevant to RenderStyle, and incorrect as the function is necessary for
        RenderQuotes as well.

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

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::createStyleInheritingFromPseudoStyle):

2014-03-07  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Throw SYNTAX_ERROR when maxRetransmits and maxRetransmitTime are both set in RTCDataChannelInit
        https://bugs.webkit.org/show_bug.cgi?id=129894

        Reviewed by Eric Carlson.

        Existing test was updated.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):

2014-03-07  Benjamin Poulain  <bpoulain@apple.com>

        Fix the regression introduced by r165288
        https://bugs.webkit.org/show_bug.cgi?id=129934

        Reviewed by Ryosuke Niwa.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        We need to return the new value after layout, not the value from the dirty tree.

2014-03-07  Benjamin Poulain  <benjamin@webkit.org>

        Traversal failure in a direct adjacent chain with tail backtracking lacks the path to clear the tail
        https://bugs.webkit.org/show_bug.cgi?id=129863

        Reviewed by Gavin Barraclough.

        Direct adjacent backtracking use the stack to push the backtracking entry point and recover from there.
        In case of traversal failure, their is no point in recovering from the indirect adjancent entry point and
        we should clear entry point from the stack (which is the purpose of the tail).

        The adjancent tail was missing the part for clearing the stack in one case.

        The case with adjancent backtracking inside descendant backtracing was doing everything right. This patch
        generalize this code and the correct tail is fully generated by generateAdjacentBacktrackingTail().

        JumpToClearAdjacentDescendantTail becomes JumpToClearAdjacentTail, and this new backtracking state is added
        to the missing traversal action.

        Test: fast/selectors/long-adjacent-backtracking.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::solveBacktrackingAction):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateBacktrackingTailsIfNeeded):

2014-03-07  Andreas Kling  <akling@apple.com>

        [Mac] Notify system malloc of fake memory pressure.
        <https://webkit.org/b/129908>

        After fixing the leak in r165252, I was surprised to find that it didn't
        show up on memory test bots. It turns out that while the memory is now
        getting freed, the system malloc implementation doesn't actually release
        pages back to the OS until there is memory pressure.

        Since we are just faking the memory pressure on bots, we have to let
        system malloc in on the fun, so we can get representative numbers.
        With this change, we should finally see the effect of not leaking the
        URLRequest object tree.

        Reviewed by Anders Carlsson.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):

            Tell system malloc that we are under fake memory pressure.

2014-03-07  Benjamin Poulain  <bpoulain@apple.com>

        [iOS] WebKit1 scroll position is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=129905

        Reviewed by Simon Fraser.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        A new optimization was avoiding layout if the position is zero. This was using the scrollX/Y instead
        of actualScrollX/Y which caused us to always bail out instead of returning the value to JavaScript.

        * platform/ScrollView.h:
        (WebCore::ScrollView::actualScrollX):
        (WebCore::ScrollView::actualScrollY):
        (WebCore::ScrollView::actualScrollPosition):
        This was accidentally changed to the iOS compat document visible rect at some point.

2014-03-07  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Remove unused StdDeviation from Drop shadow effect
        https://bugs.webkit.org/show_bug.cgi?id=129891

        Reviewed by Dirk Schulze.

        No new tests, no change on behavior.

        * platform/graphics/filters/FEDropShadow.h:

2014-03-07  Brent Fulgham  <bfulgham@apple.com>

        Correct out-of-band track selection logic.
        https://bugs.webkit.org/show_bug.cgi?id=129900

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::synchronizeTextTrackState): Correct test to
        use inequality.

2014-03-07  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Correctly serialize ellipse positions
        https://bugs.webkit.org/show_bug.cgi?id=129700

        Reviewed by Dirk Schulze.

        Updating ellipse serialization to be in line with
        the CSS Shapes spec. Positions should serialize as
        2 or 4-value positions, converting keywords to
        percentages where possible. This uses the same method
        as circle position serialization (bug 129404).

        Updated existing parsing tests.

        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeEllipse::cssText): Use the
        normalization / serialization helpers for shape position.

2014-03-07  Brian Burg  <bburg@apple.com>

        Unreviewed, rebaseline run-binding-tests results after r165242.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):

2014-03-07  Darin Adler  <darin@apple.com>

        Remove non-working optimization that was attempted on iOS only
        https://bugs.webkit.org/show_bug.cgi?id=129595
        <rdar://problem/15798825>

        Reviewed by Sam Weinig.

        Code in GCController tried to optimize cases where the controller
        was used, but no JavaScript had been run in the current process.
        The code was never effective, and was iOS-only. Another way to fix
        the problem would be to change the code so it works, and if we do
        that we should do it for all platforms, not just iOS.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow): Remove check of
        JSDOMWindow::commonVMExists, since it's called just after a call
        to JSDOMWindow::commonVM, which will create it as a side effect.
        (WebCore::GCController::releaseExecutableMemory): Ditto.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM): Removed iOS-specific code
        that pulled the commonVM global out into another function so we
        can check for its existence without creating it as a side effect.

        * bindings/js/JSDOMWindowBase.h: Ditto.

2014-03-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] inset does not properly clamp large corner radii
        https://bugs.webkit.org/show_bug.cgi?id=129726

        Reviewed by Dirk Schulze.

        Make sure that radii that are larger than 50% of the associated shape
        dimension (height or width) are properly reduced the same way as
        border-radius radii are.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-large-radius.html

        * rendering/shapes/Shape.cpp:
        (WebCore::ensureRadiiDoNotOverlap): Drive by style fix.
        (WebCore::Shape::createShape): Scale radii the same way as border
            radii are scaled.
        * platform/graphics/FloatRoundedRect.h:
        (WebCore::calcBorderRadiiConstraintScaleFor): Move border radii
            constraint calculation function out so that it can be shared by
            the shape code.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor): Call renamed scale function.

2014-03-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GST] Set name to several timeout sources
        https://bugs.webkit.org/show_bug.cgi?id=129878

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):

2014-03-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Timeout sources not correctly removed
        https://bugs.webkit.org/show_bug.cgi?id=129877

        Reviewed by Philippe Normand.

        Set source ID variables to 0 after removing the sources from the
        context. Also give a name to the sources.

        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::disconnect):
        (WebCore::TrackPrivateBaseGStreamer::activeChanged):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfActiveChanged):

2014-03-07  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Remove FFTFrameMKL.
        https://bugs.webkit.org/show_bug.cgi?id=129866

        Reviewed by Csaba Osztrogonác.

        * platform/audio/FFTFrame.h:
        * platform/audio/FFTFrameStub.cpp:
        * platform/audio/mkl/FFTFrameMKL.cpp: Removed, it is never used.

2014-03-07  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Adding getConfiguration method to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=129845

        Reviewed by Eric Carlson.

        Test: fast/mediastream/RTCPeerConnection-getConfiguration.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCConfiguration.idl: Added.
        * Modules/mediastream/RTCIceServer.idl: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::updateIce):
        (WebCore::RTCPeerConnection::getConfiguration):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:

2014-03-07  Jinwoo Song  <jinwoo7.song@samsung.com>

        Optimize collectionLast() and collectionTraverseBackward() in LiveNodeList
        https://bugs.webkit.org/show_bug.cgi?id=129775

        Reviewed by Ryosuke Niwa.

        Check the LiveNodeList type if it is HTMLTagNodeListType and ClassNodeListType then
        apply inlined matching methods for each type.

        * dom/LiveNodeList.cpp:
        (WebCore::lastMatchingElement): Added.
        (WebCore::previousMatchingElement): Added.
        (WebCore::traverseMatchingElementsBackward): Added.
        (WebCore::LiveNodeList::collectionLast): Apply lastMatchingElement() with LiveNodeList type.
        (WebCore::LiveNodeList::collectionTraverseBackward): Apply traverseMatchingElementsBackward()
        with LiveNodeList type.

2014-03-06  Andreas Kling  <akling@apple.com>

        WebCoreResourceHandleAsOperationQueueDelegate over-retains NSURLRequest.
        <https://webkit.org/b/129862>

        Don't retain the pointer before assigning it to a RetainPtr, since that
        will cause the object to leak.

        Reviewed by Alexey Proskuryakov.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueWillSendRequest:]):

2014-03-06  Dan Bernstein  <mitz@apple.com>

        Don’t copy WebInputs.json into the framework.

        * WebCore.xcodeproj/project.pbxproj: Removed WebInputs.json from the Copy Bundle Resources
        build phase of the WebCore target.

2014-03-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Updating RTCPeerConnection.idl
        https://bugs.webkit.org/show_bug.cgi?id=129804

        Reviewed by Eric Carlson.

        Some methods signatures were wrong, marking some arguments as optional when they are mandatory.

        Existing tests were updated.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCStatsRequestImpl.cpp:
        (WebCore::RTCStatsRequestImpl::create):
        (WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl):
        (WebCore::RTCStatsRequestImpl::requestFailed):
        * Modules/mediastream/RTCStatsRequestImpl.h:
        * platform/mediastream/RTCStatsRequest.h:

2014-03-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Updating RTCIceServer to match spec
        https://bugs.webkit.org/show_bug.cgi?id=129844

        Reviewed by Eric Carlson.

        Move RTCIceServer from RTCConfiguration to its own file.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::validateIceServerURL):
        (WebCore::processIceServer):
        * platform/mediastream/RTCConfiguration.h:
        (WebCore::RTCConfiguration::iceServers):
        * platform/mediastream/RTCIceServer.h: Added.

2014-03-06  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Move EvasGL classes from WebKit to WebCore namespace.
        https://bugs.webkit.org/show_bug.cgi?id=129797

        Reviewed by Gyuyoung Kim.

        Though EvasGLContext and EvasGLSurface files were moved from WebKit2/UIProcess/API/efl/ 
        to WebCore/platform/graphics/efl/, they are still in WebKit namespace.
        Patch for namespace changes.

        * platform/graphics/efl/EvasGLContext.cpp:
        * platform/graphics/efl/EvasGLContext.h:
        * platform/graphics/efl/EvasGLSurface.cpp:
        * platform/graphics/efl/EvasGLSurface.h:

2014-03-06  Brian Burg  <bburg@apple.com>

        CodeGeneratorJS.pm doesn't need to add spaces between consecutive closing template brackets
        https://bugs.webkit.org/show_bug.cgi?id=129836

        Reviewed by Andreas Kling.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        (GetNativeVectorInnerType):
        (GetSVGPropertyTypes):

2014-03-06  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove unused method from BatteryController
        https://bugs.webkit.org/show_bug.cgi?id=129850

        Reviewed by Gyuyoung Kim.

        isActive() method is never called anywhere.

        * Modules/battery/BatteryController.cpp:
        * Modules/battery/BatteryController.h:

2014-03-06  Pratik Solanki  <psolanki@apple.com>

        [iOS] Crash on launch with website restrictions enabled
        https://bugs.webkit.org/show_bug.cgi?id=129854
        <rdar://problem/16207016>

        Reviewed by Simon Fraser.

        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter): Initialize m_neFilterSourceQueue so that we don't
        crash in the dtor due to garbage value in the field.

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        Minor optimization in ScrollingTreeScrollingNodeMac
        https://bugs.webkit.org/show_bug.cgi?id=129848

        Reviewed by Dean Jackson.

        No need to call scrollOffsetForFixedPosition() again if we don't have header
        and footer layers.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

2014-03-06  Mark Lam  <mark.lam@apple.com>

        XMLHttpRequest: status and statusText throw DOM Exception 11 when the state is UNSENT or OPENED.
        https://bugs.webkit.org/show_bug.cgi?id=45994

        Not reviewed.

        Re-landing r161051 (originally by Ryosuke Niwa, reviewed by Alexey Proskuryakov)
        since https://bugs.webkit.org/show_bug.cgi?id=126219 is no longer an issue.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2014-03-06  Brent Fulgham  <bfulgham@apple.com>

        Revise Out-of-band VTT support for better integration with AVFoundation engine
        https://bugs.webkit.org/show_bug.cgi?id=129749
        <rdar://problem/16215701>

        Reviewed by Eric Carlson.

        Revise the platform handling of out-of-band text tracks so that we can keep AVFoundation
        informed of track selections we make. Use a dummy out-of-band child of the existing text
        track classes to avoid code duplication.

        * WebCore.xcodeproj/project.pbxproj: Add new OutOfBandTextTrackPrivateAVF.h file.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Notify player when OOB tracks change.
        (WebCore::HTMLMediaElement::outOfBandTrackSources): Also pass track mode to platform backend.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::platformTextTrack): Also pass track mode to constructor.
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase): Move ownership of track unique identifier to this base class.
        * html/track/TrackBase.h:
        (WebCore::TrackBase::uniqueId): Ditto.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::notifyTrackModeChanged): Added stub to pass message to platform player.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::notifyTrackModeChanged): Stub for most platforms.
        * platform/graphics/PlatformTextTrack.h:
        (WebCore::PlatformTextTrack::create): Update for revised constructor (with 'mode' argument).
        (WebCore::PlatformTextTrack::createOutOfBand): Ditto.
        (WebCore::PlatformTextTrack::mode): Added.
        (WebCore::PlatformTextTrack::captionMenuOffItem): Use revised constructor arguments.
        (WebCore::PlatformTextTrack::captionMenuAutomaticItem): Ditto.
        (WebCore::PlatformTextTrack::PlatformTextTrack): Ditto.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: Change predicate to return enum indicating the category
        of track (out-of-band, legacy closed caption, or in band).
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::notifyTrackModeChanged): Added.
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h: Override predicate to return category enum.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp: Revise to use new category enum.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h: Override predicate to return category enum.
        that this is NOT an out-of-band track.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h: Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::notifyTrackModeChanged): Added implementation.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions): Revise to handle out-of-band
        track placeholders.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Modify to inform AVFoundation about any
        out-of-band tracks we've selected.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::synchronizeTextTrackState): Added.
        * platform/graphics/avfoundation/objc/OutOfBandTextTrackPrivateAVF.h: Added.
        (WebCore::OutOfBandTextTrackPrivateAVF::create):
        (WebCore::OutOfBandTextTrackPrivateAVF::processCue):
        (WebCore::OutOfBandTextTrackPrivateAVF::resetCueValues):
        (WebCore::OutOfBandTextTrackPrivateAVF::mediaSelectionOption):
        (WebCore::OutOfBandTextTrackPrivateAVF::OutOfBandTextTrackPrivateAVF):
        (WebCore::OutOfBandTextTrackPrivateAVF::processCueAttributes):
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h: Override predicate to indicate
        that this is NOT an out-of-band track.
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        (WebCore::MediaPlayerPrivateIOS::setSelectedTextTrack): Correct typo in logging text.

2014-03-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Updating createOffer and createAnswer methods to match WebRTC editor's draft of 01/27/2014
        https://bugs.webkit.org/show_bug.cgi?id=129484

        Reviewed by Eric Carlson.

        According to the spec, createOffer and createAnswer will no longer have MediaConstraints as an argument,
        instead they will have RTCOfferOptions and RTCOfferAnswerOptions, respectively.

        Existing tests were updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCOfferAnswerOptions.cpp: Added.
        * Modules/mediastream/RTCOfferAnswerOptions.h: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):
        (WebCore::RTCPeerConnectionHandlerMock::createAnswer):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2014-03-06  Brian Burg  <bburg@apple.com>

        Web Replay: premature release() of PassRefPtr in InspectorReplayAgent
        https://bugs.webkit.org/show_bug.cgi?id=129827

        Reviewed by Timothy Hatcher.

        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):

2014-03-06  Benjamin Poulain  <bpoulain@apple.com>

        [iOS] Do not compile fake mouse event handling when iOS Touch Events are enabled
        https://bugs.webkit.org/show_bug.cgi?id=129725

        Reviewed by Dan Bernstein.

        Bug <rdar://problem/16218636>. The code is #ifdef'ed out to avoid setting up useless objects
        and to avoid future mistake.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::~EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::startAutoHideCursorTimer):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoonInQuad):
        * page/EventHandler.h:

2014-03-06  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. iOS build fix after r165199.

        * rendering/RootInlineBox.cpp:

2014-03-06  Benjamin Poulain  <bpoulain@apple.com>

        [iOS] Rename the actualVisibleXXXRect to unobscuredContentRect for consistency
        https://bugs.webkit.org/show_bug.cgi?id=129773

        Reviewed by Simon Fraser.

        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRectInternal):
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::unoscuredContentRect):
        * platform/ios/wak/WAKScrollView.h:
        * platform/ios/wak/WAKScrollView.mm:
        (-[WAKScrollView unoscuredContentRect]):
        (-[WAKScrollView description]):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2014-03-05  Oliver Hunt  <oliver@apple.com>

        Support caching of custom setters
        https://bugs.webkit.org/show_bug.cgi?id=129519

        Reviewed by Filip Pizlo.

        Add forwarding header

        Tests: js/regress/assign-custom-setter-polymorphic.html
               js/regress/assign-custom-setter.html

        * ForwardingHeaders/jit/SpillRegistersMode.h: Added.

2014-03-05  Jon Honeycutt  <jhoneycutt@apple.com>

        Invalid cast in WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients()

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

        Clang appears to be optimizing out a branch in RenderObject::node()
        when compiling RenderLayer::FilterInfo::updateReferenceFilterClients().
        We'll work around this by factoring out the code in question into a
        separate member function marked NEVER_INLINE.

        No test possible due to <https://bugs.webkit.org/show_bug.cgi?id=129757>.

        Reviewed by David Kilzer.

        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::layerElement):
        Code moved from updateReferenceFilterClients(). Returns the Element*
        for m_layer.
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
        Use layerElement().

        * rendering/RenderLayerFilterInfo.h:
        Declared layerElement().

2014-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Expose the console object in JSContexts to interact with Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=127944

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * ForwardingHeaders/runtime/ConsoleClient.h: Added.
        * ForwardingHeaders/runtime/ConsoleTypes.h: Renamed from Source/WebCore/ForwardingHeaders/inspector/ConsoleTypes.h.
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        Update build systems.

        * page/Console.cpp: Removed.
        * page/Console.h: Removed.
        * page/Console.idl: Removed.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::resetDOMWindowProperties):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::defaultStatus):
        * page/DOMWindow.idl:
        Removed the old IDL generated Console object on window.

        * page/PageConsole.cpp:
        (WebCore::PageConsole::shouldPrintExceptions):
        (WebCore::PageConsole::setShouldPrintExceptions):
        (WebCore::PageConsole::mute):
        (WebCore::PageConsole::unmute):
        (WebCore::PageConsole::messageWithTypeAndLevel):
        (WebCore::PageConsole::count):
        (WebCore::PageConsole::profile):
        (WebCore::PageConsole::profileEnd):
        (WebCore::PageConsole::time):
        (WebCore::PageConsole::timeEnd):
        (WebCore::PageConsole::timeStamp):
        (WebCore::PageConsole::group):
        (WebCore::PageConsole::groupCollapsed):
        (WebCore::PageConsole::groupEnd):
        (WebCore::PageConsole::clearProfiles):
        * page/PageConsole.h:
        Move the handling of Console object into PageConsole.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        Set the PageConsole as the ConsoleClient of the JSGlobalObject
        so that WebCore may handle console messages directly. For instance
        it may pass messages on to the ChromeClient.

        * testing/Internals.cpp:
        (WebCore::Internals::consoleProfiles):
        To access profiles, go through PageConsole now instead of Console.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/objc/WebScriptObject.mm:
        * css/MediaList.cpp:
        * dom/ScriptExecutionContext.h:
        * dom/UIEvent.cpp:
        * dom/ViewportArguments.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/CommandLineAPIHost.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/WebConsoleAgent.cpp:
        * loader/FrameLoader.cpp:
        * loader/MixedContentChecker.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * page/ChromeClient.h:
        * page/ContentSecurityPolicy.cpp:
        * page/Page.cpp:
        * page/Page.h:
        * svg/SVGDocumentExtensions.cpp:
        * workers/WorkerMessagingProxy.cpp:
        * workers/WorkerReportingProxy.h:
        Update includes.

2014-03-06  Zsolt Borbely  <borbezs@inf.u-szeged.hu>

        Fix the !ENABLE(CSS_STICKY_POSITION) build
        https://bugs.webkit.org/show_bug.cgi?id=129793

        Reviewed by Simon Fraser.

        Add missing ENABLE(CSS_STICKY_POSITION) guard to EditingStyle::convertPositionStyle().

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

2014-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Leak: dispatch_semaphore leak allocated in MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange
        https://bugs.webkit.org/show_bug.cgi?id=129792

        Reviewed by Anders Carlsson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):

2014-03-06  Brendan Long  <b.long@cablelabs.com>

        Implement VideoTrackList.selectedIndex
        https://bugs.webkit.org/show_bug.cgi?id=129770

        Reviewed by Eric Carlson.

        Tests: media/track/video/video-track-mkv-theora-selected.html

        * html/track/VideoTrackList.idl:

2014-03-06  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK][CMake] Fix the GTK+ CMake build
        https://bugs.webkit.org/show_bug.cgi?id=129801

        Reviewed by Martin Robinson.

        Include missing files for CMake build

        * CMakeLists.txt: Add a missing references to DOMURLMediaStream

2014-03-06  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Setting content to opaque on m_graphicsLayer depends on subpixel accumulation.
        https://bugs.webkit.org/show_bug.cgi?id=129776

        Reviewed by Simon Fraser.

        isEmpty() returns true when any of the dimensions is <= 0. Subpixel accumulation could happen
        in one direction only. Use isZero() instead().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2014-03-06  Gurpreet Kaur  <k.gurpreet@samsung.com>

        REGRESSION (r158254): Rubber-banding at Bing image search causes the toolbar to move up and away
        https://bugs.webkit.org/show_bug.cgi?id=128873

        Reviewed by Antonio Gomes.

        This regression is caused by  http://trac.webkit.org/changeset/154614 
        and http://trac.webkit.org/changeset/156605. So reverting the changes
        to make it Web compatible as earlier.

        * dom/Element.cpp:
        (WebCore::Element::scrollLeft):
        (WebCore::Element::scrollTop):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        Reverting changes as it caused regression.

2014-03-06  Zan Dobersek  <zdobersek@igalia.com>

        Move Source/WebCore/html/canvas/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129668

        Reviewed by Anders Carlsson.

        Replace uses of OwnPtr and PassOwnPtr in code under Source/WebCore/html/canvas/ to std::unique_ptr.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::getContext):
        * html/HTMLCanvasElement.h:
        * html/canvas/ANGLEInstancedArrays.cpp:
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/EXTTextureFilterAnisotropic.cpp:
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/OESElementIndexUint.cpp:
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.cpp:
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.cpp:
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.cpp:
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.cpp:
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.cpp:
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.cpp:
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGLCompressedTextureATC.cpp:
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.cpp:
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.cpp:
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLDebugRendererInfo.cpp:
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.cpp:
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.cpp:
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLDrawBuffers.cpp:
        * html/canvas/WebGLDrawBuffers.h:
        * html/canvas/WebGLLoseContext.cpp:
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::getExtension):
        * html/canvas/WebGLRenderingContext.h:

2014-03-06  Zan Dobersek  <zdobersek@igalia.com>

        Move Source/WebCore/editing/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129665

        Reviewed by Anders Carlsson.

        Replace uses of OwnPtr and PassOwnPtr in code under Source/WebCore/editing/ with std::unique_ptr.

        * editing/EditingStyle.cpp:
        (WebCore::htmlElementEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement):
        (WebCore::htmlAttributeEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes):
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        (WebCore::Editor::clear):
        * editing/Editor.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:

2014-03-06  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 Eric Carlson.

        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):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptRunner.h: Remove an unnecessary PassOwnPtr header inclusion.

2014-03-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165175.
        http://trac.webkit.org/changeset/165175
        https://bugs.webkit.org/show_bug.cgi?id=129788

        Linking failures on GTK, EFL due to missing gstreamer-tag-1.0
        dependency (Requested by zdobersek on #webkit).

        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):

2014-03-05  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] human readable language code for tracks
        https://bugs.webkit.org/show_bug.cgi?id=124514

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Run language codes though gst_tag_get_language_code_iso_639_1() to make sure they're valid.

2014-03-05  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove unused method from Vibration
        https://bugs.webkit.org/show_bug.cgi?id=129732

        Reviewed by Gyuyoung Kim.

        * Modules/vibration/Vibration.cpp:
        Removed isActive(), which is never called since r152441.
        * Modules/vibration/Vibration.h: Ditto.

2014-03-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165141, r165157, and r165158.
        http://trac.webkit.org/changeset/165141
        http://trac.webkit.org/changeset/165157
        http://trac.webkit.org/changeset/165158
        https://bugs.webkit.org/show_bug.cgi?id=129772

        "broke ftl" (Requested by olliej_ on #webkit).

        * ForwardingHeaders/jit/SpillRegistersMode.h: Removed.

2014-03-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] The GObject DOM bindings should always be built
        https://bugs.webkit.org/show_bug.cgi?id=127963

        Reviewed by Ryosuke Niwa.

        * PlatformGTK.cmake: Make compilation of the WebKitGTK+ GObject DOM bindings
        unconditional, instead of conditional on the WebKit2 build.

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

        [MSE] Crash in SourceBuffer::sourceBufferPrivateDidReceiveSample() - received samples after SourceBuffer was removed.
        https://bugs.webkit.org/show_bug.cgi?id=129761

        Reviewed by Eric Carlson.

        Guard against the possibility that SourceBufferPrivates will continue to generate samples even after
        a parse error. Bail out early from sourceBufferPrivateDidReceiveInitializationSegment and
        sourceBufferPrivateDidReceiveSample if the SourceBuffer has been removed.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2014-03-05  Enrica Casucci  <enrica@apple.com>

        Build fix, take 2.

        * platform/mac/HTMLConverter.mm:

2014-03-05  Enrica Casucci  <enrica@apple.com>

        Build fix.

        * platform/mac/HTMLConverter.mm:

2014-03-05  Enrica Casucci  <enrica@apple.com>

        Crash when copying content that contains <sup>.
        https://bugs.webkit.org/show_bug.cgi?id=129765
        <rdar://problem/16139498>
        
        Reviewed by Benjamin Poulain.

        Adding static definition of NSAttributeSuperscriptName.

        * platform/mac/HTMLConverter.mm:

2014-03-05  Gavin Barraclough  <barraclough@apple.com>

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

        Unreviewed roll-out.

        Reverting r164347, r165054, r165066 - not clear the performance tradeoff was right.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::clearWrappers):
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsStringWithCache):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):
        * bindings/scripts/StaticString.pm:
        (GenerateStrings):

2014-03-05  Daniel Bates  <dabates@apple.com>
            And Alexey Proskuryakov  <ap@apple.com>

        ASSERT(newestManifest) fails in WebCore::ApplicationCacheGroup::didFinishLoadingManifest()
        https://bugs.webkit.org/show_bug.cgi?id=129753
        <rdar://problem/12069835>

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where an assertion failure would occur when visiting a web site whose on-disk
        app cache doesn't contain a manifest resource.

        For some reason an app cache for a web site may be partially written to disk. In particular, the
        app cache may only contain a CacheGroups entry. That is, the manifest resource and origin records
        may not be persisted to disk. From looking over the code, we're unclear how such a situation can occur
        and hence have been unable to create such an app cache. We were able to reproduce this issue using
        an app cache database file that was provided by a person that was affected by this issue.

        No test included because it's not straightforward to write a test for this change.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): Assert that m_cacheBeingUpdated->manifestResource()
        is non-null. Currently we only document this assumption in a code comment. Also separated a single assertion
        expression into two assertion expressions to make it straightforward to identify the failing sub-expression
        on failure.
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store): Modified to call ApplicationCacheStorage::deleteCacheGroupRecord()
        to remove a cache group and associated cache records (if applicable) before inserting a cache group entry.
        This replacement approach will ultimately repair incomplete app cache data for people affected by this bug.
        (WebCore::ApplicationCacheStorage::loadCache): Log an error and return nullptr if the cache we loaded doesn't
        have a manifest resource.
        (WebCore::ApplicationCacheStorage::deleteCacheGroupRecord): Added.
        (WebCore::ApplicationCacheStorage::deleteCacheGroup): Extracted deletion logic for cache group record into
        ApplicationCacheStorage::deleteCacheGroupRecord().
        * loader/appcache/ApplicationCacheStorage.h:

2014-03-05  Oliver Hunt  <oliver@apple.com>

        Support caching of custom setters
        https://bugs.webkit.org/show_bug.cgi?id=129519

        Reviewed by Filip Pizlo.

        Add forwarding header

        Tests: js/regress/assign-custom-setter-polymorphic.html
               js/regress/assign-custom-setter.html

        * ForwardingHeaders/jit/SpillRegistersMode.h: Added.

2014-03-05  David Kilzer  <ddkilzer@apple.com>

        Fix crash in CompositeEditCommand::cloneParagraphUnderNewElement()
        <http://webkit.org/b/129751>
        <rdar://problem/16237965>

        Reviewed by Jon Honeycutt.

        Merged from Blink (patch by Yuta Kitamura):
        https://src.chromium.org/viewvc/blink?revision=168160&view=revision
        http://crbug.com/345005

            The root cause is CompositeEditCommand::moveParagraphWithClones() passing
            two positions |start| and |end| which do not follow the document order,
            i.e. in some situations |start| is located after |end| because of
            the difference in affinity.

            This patch fixes this crash by normalizing |end| to |start| in such situations.
            It also adds an ASSERT that checks the relationship between |start| and |end|.

        Test: editing/execCommand/format-block-crash.html

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

2014-03-05  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Scrollable regions
        https://bugs.webkit.org/show_bug.cgi?id=129301

        Reviewed by David Hyatt.

        Named flow fragments do not inherit the overflow property from the fragment container.
        When asked if the flow thread content should be clipped, the named flow fragments
        will respond using the overflow property of the named flow fragment container.

        When painting the flow thread layer inside the region, the scrolled content offset of
        the region must be used to offset the flow thread's layer.

        Tests: fast/regions/scrollable-last-region.html
               fast/regions/scrollable-single-region-bt.html
               fast/regions/scrollable-single-region-lr.html
               fast/regions/scrollable-single-region-relative-element.html
               fast/regions/scrollable-single-region-rl.html
               fast/regions/scrollable-single-region.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        (WebCore::RenderNamedFlowFragment::shouldClipFlowThreadContent):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::decorationsClipRectForBoxInNamedFlowFragment):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::shouldClipFlowThreadContent):
        * rendering/RenderRegion.h:

2014-03-05  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Device pixel round accumulated subpixel value when the RenderLayer with transform paints its content.
        https://bugs.webkit.org/show_bug.cgi?id=129079

        Reviewed by Simon Fraser.

        Snap the content to the device pixel position (as opposed to integral position) before
        applying the transform. Recalculate the remaining subpixels that need offsetting at painting time.

        Test: compositing/hidpi-absolute-subpixel-positioned-transformed-elements.html

        * platform/graphics/LayoutPoint.h:
        (WebCore::roundedForPainting):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):

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

        [iOS] Show external device name/type in placeholder
        https://bugs.webkit.org/show_bug.cgi?id=129723

        Reviewed by Jer Noble.

        Make the name and type of the external device available to the JS based controls.
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::externalDeviceDisplayName):
        (WebCore::MediaControlsHost::externalDeviceType):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): Display device type-specific infomation
            in the placeholder image.

        * WebCore.exp.in: Export new WebKitSystemInterface functions.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::wirelessPlaybackTargetName): Added.
        (WebCore::MediaPlayer::wirelessPlaybackTargetType): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): Added.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName): Ditto.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2014-03-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS] Rename the various VisibleExtent variations to exposedContentRect
        https://bugs.webkit.org/show_bug.cgi?id=129728

        Reviewed by Simon Fraser.

        Rename DocumentVisibleExtent and VisibleExtentContentRect to ExposedContentRect in a desperate
        attempt to make things a tiny little bit less confusing.

        The name is ExposedContentRect and not ExposedRect as that rect is exposed on ScrollView, while the
        rect is in document coordinates (which does not make any difference on WebKit1...).

        * WebCore.exp.in:
        * platform/ScrollView.h:
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::exposedContentRect):
        (WebCore::ScrollView::setExposedContentRect):
        * platform/ios/wak/WAKScrollView.h:
        * platform/ios/wak/WAKScrollView.mm:
        (-[WAKScrollView exposedContentRect]):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::didChangeVisibleRect):

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

        ObjC exception when dropping files into a WKView: drag and drop uses code from WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=129752

        Reviewed by Enrica Casucci.

        Add C functions for NSURL-related functionality required by WebKit2

        * WebCore.exp.in:
        * platform/mac/WebCoreNSURLExtras.h:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLByCanonicalizingURL):
        (WebCore::rangeOfURLScheme):
        (WebCore::looksLikeAbsoluteURL):

2014-03-05  Martin Hock  <mhock@apple.com>

        Add support for sessions to MemoryCache.
        https://bugs.webkit.org/show_bug.cgi?id=127794

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI): Initialize CachedImage with sessionID.
        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL): Remove URL from MemoryCache for all sessions.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource): Pass sessionID to MemoryCache.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::replayXHR): Ditto.
        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads): Ditto.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Initialize CachedImage with sessionID.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Pass sessionID to MemoryCache.
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet): Constructor takes sessionID.
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp: Ditto.
        (WebCore::CachedFont::CachedFont):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp: Ditto.
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp: Ditto.
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp: Ditto.
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource): Pass sessionID to MemoryCache.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::sessionID):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource): Constructors take sessionID.
        (WebCore::CachedResourceLoader::sessionID): Retrieve sessionID from page.
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet): Pass sessionID to MemoryCache.
        (WebCore::CachedResourceLoader::requestResource): Initialize CachedCSSStyleSheet with sessionID.
        (WebCore::CachedResourceLoader::revalidateResource): Initialize cached resource with sessionID.
        (WebCore::CachedResourceLoader::loadResource): Pass sessionID to MemoryCache and initialize cached resource with sessionID.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp: Constructor takes sessionID.
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.cpp: Ditto.
        (WebCore::CachedScript::CachedScript):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp: Ditto.
        (WebCore::CachedTextTrack::CachedTextTrack):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp: Ditto.
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getSessionMap): Retrieve CachedResourceMap based on sessionID.
        (WebCore::MemoryCache::add): Use sessionID from CachedResource parameter.
        (WebCore::MemoryCache::revalidationSucceeded): Add sessionID parameter.
        (WebCore::MemoryCache::resourceForURL): Ditto.
        (WebCore::MemoryCache::resourceForRequest): Ditto, also move impl into impl method.
        (WebCore::MemoryCache::resourceForRequestImpl): Add CachedResourceMap parameter.
        (WebCore::MemoryCache::addImageToCache): Use default sessionID.
        (WebCore::MemoryCache::removeImageFromCache): Ditto.
        (WebCore::MemoryCache::evict): Use sessionID from CachedResource parameter.
        (WebCore::MemoryCache::removeResourcesWithOrigin): Iterate through all CachedResourceMaps.
        (WebCore::MemoryCache::getOriginsWithCache): Ditto.
        (WebCore::MemoryCache::removeUrlFromCache): Add sessionID parameter.
        (WebCore::MemoryCache::removeRequestFromCache): Ditto.
        (WebCore::MemoryCache::removeRequestFromSessionCaches): Remove request from all CachedResourceMaps, with multithread support.
        (WebCore::MemoryCache::removeRequestFromCacheImpl): Add sessionID parameter.
        (WebCore::MemoryCache::removeRequestFromSessionCachesImpl): Iterate through all CachedResourceMaps.
        (WebCore::MemoryCache::crossThreadRemoveRequestFromCache): Add sessionID parameter.
        (WebCore::MemoryCache::crossThreadRemoveRequestFromSessionCaches): Pass on request to removeRequestFromSessionCachesImpl.
        (WebCore::MemoryCache::getStatistics): Iterate through all CachedResourceMaps.
        (WebCore::MemoryCache::setDisabled): Ditto.
        * loader/cache/MemoryCache.h: Create another level for cache.
        * platform/CrossThreadCopier.cpp: Allow copying SessionIDs across threads.
        (WebCore::SessionID>::copy):
        * platform/CrossThreadCopier.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest): Remove trailing whitespace.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot): Initialize CachedImage with sessionID.
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache): Pass sessionID to MemoryCache.

2014-03-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Generate documentation for the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=126211

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: Add some files to the GObjectDOMBindings build, so that the
        doc generation succeeds. Have the GObjectDOMBindings_INSTALLED_HEADERS variable contain
        all installed headers and use another variable for GIR generation. Create the configuration
        file for the gtkdoc generation.

2014-03-05  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Wrong cliprect on absolute positioned elements.
        https://bugs.webkit.org/show_bug.cgi?id=129656

        Reviewed by Simon Fraser.

        outlineBoundsForRepaint() is expected to return the outline repaint rect. Using enclosingIntRect()
        to calculate the outline boundaries breaks repaint logic in RenderElement::repaintAfterLayoutIfNeeded().
        Since enclosingIntRect() can return bigger rect than repaint rect, the old/new bounds' dimensions could end up
        being different which triggers the size change repaint code path.

        Test: fast/repaint/hidpi-absolute-positioned-element-wrong-cliprect-after-move.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::outlineBoundsForRepaint):

2014-03-05  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose missing functionalities of AtkTableCell to AT.
        https://bugs.webkit.org/show_bug.cgi?id=129492

        Reviewed by Mario Sanchez Prada.

        Implemented missing API of AtkTableCell.

        No new tests. Covered by existing ones.

        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        (webkitAccessibleTableCellGetColumnSpan):
        (webkitAccessibleTableCellGetRowSpan):
        (webkitAccessibleTableCellGetPosition):
        (webkitAccessibleTableCellGetTable):
        (webkitAccessibleTableCellInterfaceInit):

2014-03-05  Andres Gomez  <agomez@igalia.com>

        [GStreamer] WebSource doesn't need the "iradio-mode" property
        https://bugs.webkit.org/show_bug.cgi?id=129685

        Reviewed by Philippe Normand.

        Removed the "iradio-mode" property from the WK source element
        since this was only available for its modification from
        playbin/uridecodebin and, as discussed in GStreamer bug #725383,
        it was not being set and now is going to be removed.

        It is safe just to send always the "icy-metadata" header set and
        deal with returning "icy" headers as we were already doing.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):
        (webKitWebSrcStart):

2014-03-05  Chang Shu  <cshu@webkit.org>

        Copying wrapping text results in multiple spaces between wrapped lines stripped.
        https://bugs.webkit.org/show_bug.cgi?id=129609.

        Reviewed by Ryosuke Niwa.

        While checking the condition of restoring the missing space, the collapsed spaces
        may not be exactly one.

        editing/pasteboard/copy-text-with-wrapped-tag.html is enhanced to test this case.

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

2014-03-05  Ryosuke Niwa  <rniwa@webkit.org>

        appendChild shouldn't invalidate LiveNodeLists and HTMLCollections if they don't have valid caches
        https://bugs.webkit.org/show_bug.cgi?id=129727

        Reviewed by Andreas Kling.

        Before this patch, invalidateNodeListAndCollectionCachesInAncestors invalidated node lists and HTML
        collections on ancestors of a node whenever we're inserting or removing a child node. This patch
        makes HTMLCollections and LiveNodeLists register themselves with Document only when they have valid
        caches.

        Each user of CollectionIndexCache now implements willValidateIndexCache member function that gets
        called when CollectionIndexCache caches any state and necessitates the registration with document.

        * dom/ChildNodeList.h: Added an empty willValidateIndexCache since child node lists are never
        registered with document.

        * dom/CollectionIndexCache.h:
        (WebCore::CollectionIndexCache::hasValidCache): Added.
        (WebCore::CollectionIndexCache::nodeCount): Calls willValidateIndexCache when caching node count.
        (WebCore::CollectionIndexCache::nodeAfterCached): Ditto. Also assert that hasValidCache() true in
        the cases where we're simply updating our caches or adding more caches.
        (WebCore::CollectionIndexCache::nodeAt): Ditto. Also added a code to set the length cache when
        we've reached the end of the list. This should be a slight speed up on some cases.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initializes a variable used by assertions.
        (WebCore::Document::unregisterNodeList): Added an early exit for when m_listsInvalidatedAtDocument
        is empty since invalidateNodeListAndCollectionCaches swaps out the list.
        (WebCore::Document::registerCollection): Removed the boolean hasIdNameMap since we now explicitly
        call collectionCachedIdNameMap in HTMLCollection.
        (WebCore::Document::unregisterCollection): Ditto. Exit early if m_collectionsInvalidatedAtDocument
        is empty since invalidateNodeListAndCollectionCaches swaps out the list.
        * dom/Document.h:

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::invalidateCache): Unregister the node list with document if we had caches.
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList): Ditto.
        (WebCore::LiveNodeList::invalidateCache): Pass around document. This is necessary since document()
        had already moved to the new document inside NodeListsNodeData::invalidateCaches.
        (WebCore::LiveNodeList::willValidateIndexCache): Added. Registers itself with document.

        * dom/Node.cpp:
        (WebCore::Document::invalidateNodeListAndCollectionCaches): Swap the lists since invalidateCache
        tries to unregister node lists and HTML collections with document. Since this is the only case in
        which node lists and HTML collections being removed may not be in the lists in unregisterNodeList
        and unregisterCollection, assert this condition via m_inInvalidateNodeListAndCollectionCaches.
        (WebCore::NodeListsNodeData::invalidateCaches):

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument): Unregister node lists and HTML collections from old
        document via invalidateCache. We need to explicitly pass in oldDocument here since owner node's
        document had already been changed to newDocument at this point. Since we're invalidating caches,
        there is no need to register node lists and HTML collections with newDocument.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection): Unregister the node list with document if we had caches.
        (WebCore::HTMLCollection::invalidateCache): Ditto.
        (WebCore::HTMLCollection::invalidateNamedElementCache):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::invalidateCache): Pass around document as done in LiveNodeList.
        (WebCore::HTMLCollection::willValidateIndexCache): Ditto.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::invalidateCache): Ditto.
        * html/HTMLFormControlsCollection.h:

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::invalidateSelectedItems): Ditto.
        (WebCore::HTMLSelectElement::setRecalcListItems): Ditto.

2014-03-05  Jon Lee  <jonlee@apple.com>

        Fix linker error after r165087
        https://bugs.webkit.org/show_bug.cgi?id=129730

        Reviewed by Csaba Osztrogonác.

        * WebCore.exp.in: Remove undefined symbol __ZN7WebCore32WebVideoFullscreenChangeObserverD2Ev.

2014-03-04  Zalan Bujtas  <zalan@apple.com>

        Enable device pixel repaint rect tracking.
        https://bugs.webkit.org/show_bug.cgi?id=129712

        Reviewed by Simon Fraser.

        Tracked repaint rects are device pixel snapped now to support hiDPI test cases.

        Test: fast/repaint/hidpi-device-pixel-based-repaint-rect-tracking.html

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::addTrackedRepaintRect):
        (WebCore::FrameView::trackedRepaintRectsAsText): Print them as LayoutUnits to get
        trailing zeros cut off.
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Don't clamp scrolling node offsets when the offset is changed by delegated scrolling
        https://bugs.webkit.org/show_bug.cgi?id=129724

        Reviewed by Sam Weinig.
        
        Call setScrollPositionWithoutContentEdgeConstraints() from
        ScrollingTree::scrollPositionChangedViaDelegatedScrolling() so that
        layers are not clamped during rubber-banding.
        
        This requires making setScrollPositionWithoutContentEdgeConstraints()
        a pure virtual function on the base class.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:

2014-03-04  Jeremy Jones  <jeremyj@apple.com>

        WebVideoFullscreen, should make the hand off of the video layer explicit.
        https://bugs.webkit.org/show_bug.cgi?id=128844

        Reviewed by Simon Fraser.

        This change introduces a more explicit hand-off of the video layer.
        This describes the interactions between WebVideoFullscreenInterface and WebVideoFullscreenModel
        WebVideoFullscreenModel <-> WebVideoFullscreenInterface
              enterFullScreen(*) ->
                                <- borrowVideoLayer
              willLendVideoLayer ->
               didLendVideoLayer ->
                                <- didEnterFullscreen
                                ...
                                <- requestExitFullscreen
                  exitFullscreen ->
                                <- returnVideoLayer
                                <- didExitFullscreen
        (*) enterFullScreen actually comes from WebVideoFullscreenControllerAVKit.

        * WebCore.exp.in:
        Export new functions in WebVideoFullscreenInterfaceAVKit, WebVideoFullscreenModelMediaElement, etc.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        Add WebVideoFullscreenControllerChangeObserver to forward fullscreen callbacks to WebVideoFullscreenController

        (WebVideoFullscreenControllerChangeObserver::setTarget):
        Sets obj-c target of fullscreen change callbacks.

        (-[WebVideoFullscreenController init]):
        Point _changeObserver's target at self.

        (-[WebVideoFullscreenController dealloc]):
        Clear _changeObserver's target.

        (-[WebVideoFullscreenController enterFullscreen:]):
        Retain self to prevent dealloc during animation or while fullscreen.
        Connect _interface to _changeObserver.

        (-[WebVideoFullscreenController exitFullscreen]):
        Remove use of completion move cleanup to -didExitFullscreen.

        (-[WebVideoFullscreenController didEnterFullscreen]):
        Nothing to see here.

        (-[WebVideoFullscreenController didExitFullscreen]):
        Move clean up code that was in a completion to here.

        * platform/ios/WebVideoFullscreenInterface.h:
        Add delarations for more explicit hand-off of video layer.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        Add WebVideoFullscreenChangeObserver to notify when fullscreen animations complete.
        Add declarations for more explicit hand-off of video layer.
        Add WebAVPlayerLayer now always wraps the m_videoLayer to prevent default behavior
        of AVPlayerLayer.

        (WebCore::WebVideoFullscreenChangeObserver::~WebVideoFullscreenChangeObserver):
        Add empty virtual destructor.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        Include AVKit headers instead of declaring everything locally.
        AVPlayerLayer protocol renamed to AVVideoLayer per AVKit.

        (-[WebAVPlayerController dealloc]):
        Don't refer to self.

        (-[WebAVPlayerController playerViewController:shouldDismissWithReason:]):
        Pause before requesting exit fullscreen.

        (-[WebAVPlayerLayer setPlayerController:]):
        This is required by AVVideoLayer, but we don't need it.

        (WebVideoFullscreenInterfaceAVKit::playerController):
        White space.

        (WebVideoFullscreenInterfaceAVKit::setWebVideoFullscreenChangeObserver):
        Set observer to forward fullscreen changes to.

        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        Use more explicit video layer hand-off.

        (WebVideoFullscreenInterfaceAVKit::doEnterFullscreen):
        Move enterFullscreen logic here.
        AVPlayerViewController now takes the video layer at init time.
        Always provide a video layer wrapped in a WebAVPlayerLayer.

        (WebVideoFullscreenInterfaceAVKit::willLendVideoLayer):
        Use more explicit video layer hand-off.

        (WebVideoFullscreenInterfaceAVKit::didLendVideoLayer):
        Use more explicit video layer hand-off.

        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        Use more explicit video layer hand-off.

        * platform/ios/WebVideoFullscreenModel.h:
        Add functions for more explicit video layer hand-off.

        * platform/ios/WebVideoFullscreenModelMediaElement.h:
        Mark virtual functions as virtual.
        Add changes for WebVideoFullscreenModel.

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        Use more explicit video layer hand-off.

        (WebVideoFullscreenModelMediaElement::setMediaElement):
        Don't push the video layer. Wait for a request for it.

        (WebVideoFullscreenModelMediaElement::handleEvent):
        Make sure m_videoFullscreenInterface is valid.

        (WebVideoFullscreenModelMediaElement::borrowVideoLayer):
        Use more explicit video layer hand-off.
        Lend videoLayer in request to a request to borrow the videoLayer.
        Make sure to retain the video layer before it is removed from the layer tree.

        (WebVideoFullscreenModelMediaElement::returnVideoLayer):
        Use more explicit video layer hand-off.

        (WebVideoFullscreenModelMediaElement::requestExitFullscreen):
        Don't clear the mediaElement reference until completely exited from fullscreen.

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Get position:fixed working slightly better on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129714

        Reviewed by Benjamin Poulain.

        Send the scroll position as a FloatPoint, rather than an IntPoint.

        * WebCore.exp.in:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTree.h:

2014-03-04  Alex Christensen  <achristensen@webkit.org>

        Fixed Windows build without MEDIA_CONTROLS_SCRIPT enabled.
        https://bugs.webkit.org/show_bug.cgi?id=129701

        Reviewed by Jer Noble.

        * WebCore.vcxproj/WebCore.vcxproj:
        * DerivedSources.cpp:
        Moved UserAgentScriptsData.cpp to DerivedSources.cpp to only be built if MEDIA_CONTROLS_SCRIPT is enabled.
        * DerivedSources.make:
        Only generate UserAgentScripts.cpp/h when USER_AGENT_SCRIPTS is non-empty.
        * rendering/RenderThemeWin.cpp:
        Only include UserAgentScripts.h when MEDIA_CONTROLS_SCRIPT is enabled.

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Allow iOS DumpRenderTree crashes to show application-specific information
        https://bugs.webkit.org/show_bug.cgi?id=129705

        Reviewed by David Kilzer.

        Make the WKSI function SetCrashReportApplicationSpecificInformation available
        in iOS simulator builds.

        * WebCore.exp.in:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:

2014-03-04  Andreas Kling  <akling@apple.com>

        Spam static branch prediction hints on JS bindings.
        <https://webkit.org/b/129703>

        Add UNLIKELY hints to all !castedThis and exec->hadException() paths
        in the JS bindings since they are almost always going to get skipped.

        Reviewed by Geoff Garen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (GenerateConstructorDefinition):

2014-03-04  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Remove unused StdDeviation from Gaussian Blur effect
        https://bugs.webkit.org/show_bug.cgi?id=129693

        Reviewed by Simon Fraser.

        No new tests, no change on behavior.

        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FEGaussianBlur.h:

2014-03-04  Andreas Kling  <akling@apple.com>

        Add a Document::updateStyleIfNeededForNode(Node&).
        <https://webkit.org/b/129689>

        Generalize the mechanism that computed style uses to avoid doing full
        style updates when the node we're interested in isn't actually dirty.

        Reviewed by Antti Koivisto.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * dom/Document.cpp:
        (WebCore::nodeOrItsAncestorNeedsStyleRecalc):
        (WebCore::Document::updateStyleIfNeededForNode):
        * dom/Document.h:
        * editing/htmlediting.cpp:
        (WebCore::isEditablePosition):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):

2014-03-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Merge API shims and JSLock
        https://bugs.webkit.org/show_bug.cgi?id=129650

        Reviewed by Mark Lam.

        No new tests.

        JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
        to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.

        * bindings/js/DOMRequestState.h:
        (WebCore::DOMRequestState::Scope::Scope):
        * 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/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):

2014-03-04  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Overlay scrollbars that have grown are sometimes askew in the track
        https://bugs.webkit.org/show_bug.cgi?id=129691
        -and corresponding-
        <rdar://problem/15666846>

        Reviewed by Simon Fraser.

        This regression started happening after we adopted the setPresentationValue 
        ScrollbarPainter API which allows us to update the position of the scrollbar knob 
        from our secondary scrolling thread. The bug occurs when the scrollbar grows while 
        it still thinks it is in presentation-value mode. Whenever the scrollbar grows, it 
        should be in non-presentation value mode.

        If the wheel event has ended or been cancelled, we can switch out of presentation 
        value mode.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent):

        Sometimes we will grow the scrollbar before we have received a wheel event with 
        the end or cancelled phase, and so automatically switch out of presentation-value 
        mode whenever we start one of these animations.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):

2014-03-04  Zan Dobersek  <zdobersek@igalia.com>

        Move Source/WebCore/html/track/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129666

        Reviewed by Eric Carlson.

        Replace uses of OwnPtr and PassOwnPtr in code under Source/WebCore/html/track/ with std::unique_ptr.

        * html/track/AudioTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::parseWebVTTCueData):
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::cueLoadingCompleted):
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackRegion.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::createWebVTTNodeTree):
        (WebCore::VTTCue::markFutureAndPastNodes):
        * html/track/VTTCue.h:
        * html/track/VideoTrack.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::WebVTTParser):
        * html/track/WebVTTParser.h:
        * html/track/WebVTTTokenizer.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * loader/TextTrackLoader.h:

2014-03-04  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make border-radius painting device pixel aware.
        https://bugs.webkit.org/show_bug.cgi?id=129558

        Reviewed by Simon Fraser.

        Snap rounded rects to device pixels right before passing them to GraphicsContext.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::clipRoundedInnerRect):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Crashes and assertions running iOS compositing tests
        https://bugs.webkit.org/show_bug.cgi?id=129688

        Reviewed by Dean Jackson.
        
        When a layer is no longer composited, we need to unregister it
        from the scrolling coordinator, and remove it from m_scrollCoordinatedLayers.

        Tested by compositing tests on iOS.

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

2014-03-04  Antti Koivisto  <antti@apple.com>

        Update bindings test results after r165046.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_set_reflected_string_attr):
        (webkit_dom_test_obj_set_reflected_url_attr):
        (webkit_dom_test_obj_set_reflected_custom_url_attr):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj setReflectedStringAttr:]):
        (-[DOMTestObj setReflectedURLAttr:]):
        (-[DOMTestObj setReflectedCustomURLAttr:]):

2014-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Simplify the GObject DOM bindings API break check into one step
        https://bugs.webkit.org/show_bug.cgi?id=129571

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/GNUmakefile.am: We no longer generate the webkitdom.symbols file in the
        DerivedSources directory. All the logic is handled internally in the script now.
        * bindings/scripts/gobject-run-api-break-test: Removed.

2014-03-04  Zalan Bujtas  <zalan@apple.com>

        Build fix for iOS.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::addRoundedBorderClip):
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):

2014-03-04  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make GraphicsLayer::fillRect FloatRoundedRect based and cleanup dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=129557

        Reviewed by Simon Fraser.

        This is the preparation for snapping rounded rects to device pixel position. It enables
        device pixel aware border-radius painting.

        No change in functionality.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMediaSliderThumb):
        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::FloatRoundedRect):
        (WebCore::FloatRoundedRect::isRenderable):
        * platform/graphics/FloatRoundedRect.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipRoundedRect):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        * platform/graphics/Path.h:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::pixelSnappedRoundedRectForPainting):
        * platform/graphics/RoundedRect.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::borderRadiiFromStyle):
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaSliderThumb):
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderTrack):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::clipRoundedInnerRect):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::clipBorderSideForComplexInnerPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        (WebCore::RenderThemeIOS::paintTextFieldDecorations):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        (WebCore::RenderThemeIOS::paintSliderTrack):
        (WebCore::RenderThemeIOS::paintProgressBar):
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::buildDisplayPaths):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path):

2014-03-04  Andreas Kling  <akling@apple.com>

        Micro-optimize Strings in JS bindings.
        <https://webkit.org/b/129673>

        Tweaked for new jsStringWithWeakOwner signature. This patch removes
        36 bytes of code from every wrapper getter that returns a DOMString.

        Reviewed by Ryosuke Niwa.

        * bindings/js/JSDOMBinding.h:
        (WebCore::jsStringWithCache):

2014-03-03  David Kilzer  <ddkilzer@apple.com>

        SVGPropertyTearOffs should detachChildren before deleting its value.
        <http://webkit.org/b/129618>
        <rdar://problem/15661617>

        Reviewed by Maciej Stachowiak.

        Merged from Blink (patch by kouhei@chromium.org):
        https://src.chromium.org/viewvc/blink?revision=158563&view=revision
        http://crbug.com/296276

        Test: svg/transforms/svg-matrix-tearoff-crash.html

        NOTE: The test does not reproduce a crash on WebKit using
        JavaScriptCore.

        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::setValue):
        (WebCore::SVGPropertyTearOff::~SVGPropertyTearOff):
        - Call detachChildren() if m_value is a copy.  The original
          Blink patch did not modify the destructor code path, although
          that seems obvious via code inspection.

2014-03-04  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Incorrect repaint rect cuts off content's right edge after move.
        https://bugs.webkit.org/show_bug.cgi?id=129652

        Reviewed by Simon Fraser.

        When repaint rect is adjusted in order to take the distance from renderer into account,
        the accumulated fraction value need to be added too. This is always a positive value.

        Test: fast/borders/hidpi-border-clipping-right-after-move.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):

2014-03-04  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove unused member variable of NetworkInfoController
        https://bugs.webkit.org/show_bug.cgi?id=129674

        Reviewed by Gyuyoung Kim.

        * Modules/networkinfo/NetworkInfoController.cpp:
        (WebCore::NetworkInfoController::NetworkInfoController):
        (WebCore::NetworkInfoController::create):
        (WebCore::provideNetworkInfoTo):
        * Modules/networkinfo/NetworkInfoController.h: Removed m_page which is not really used.

2014-02-07  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Percentages of indefinite sizes should compute to auto
        https://bugs.webkit.org/show_bug.cgi?id=128173

        Reviewed by Darin Adler.

        We should treat percentages of indefinite sizes as auto as
        mandated by the spec. Otherwise we would end up calculating a
        percentage of -1, the value we use to represent infinite.

        Added some test cases to the current tests.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridTrackSize):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::isPercentage):

2014-03-04  Ryosuke Niwa  <rniwa@webkit.org>

        Don't synchronize attributes in reflect setters when we don't need to
        https://bugs.webkit.org/show_bug.cgi?id=129662

        Reviewed by Andreas Kling.

        The vast majority of attributes don't need synchronization. Avoid calling synchronizeAttribute in setters
        for those content attributes generated by "Reflect" keyword in IDL.

        * bindings/scripts/CodeGenerator.pm:
        (SetterExpression):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeWithoutSynchronization): Added.
        * dom/Element.h:

2014-03-04  Andreas Kling  <akling@apple.com>

        Remove Document::idAttributeName().
        <https://webkit.org/b/129663>

        Reviewed by Ryosuke "DYEB" Niwa.

        This abstraction is not actually used and causes unnecessary indirection
        in some pretty hot code paths.

        Replace it with hard-coded HTMLNames::idAttr instead which is a compile
        time constant pointer. We can revisit this in the future if we wish to
        implement support for custom id attributes.

        * dom/Attr.cpp:
        (WebCore::Attr::isId):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::willModifyAttribute):
        * dom/Element.h:
        (WebCore::Element::getIdAttribute):
        (WebCore::Element::getNameAttribute):
        (WebCore::Element::setIdAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseAttribute):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):
        (WebCore::SVGElement::isKnownAttribute):
        (WebCore::SVGElement::svgAttributeChanged):

2014-03-04  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r164856): Use after free in WebCore::QualifiedName::operator== / WebCore::StyledElement::attributeChanged
        https://bugs.webkit.org/show_bug.cgi?id=129550

        Reviewed by Andreas Kling.

        We can't store a reference to QualifiedName here because ensureUniqueElementData could delete QualifiedName inside Attribute.

        Test: fast/dom/uniquing-attributes-via-setAttribute.html

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

2014-03-04  Hyowon Kim  <hw1008.kim@samsung.com>

        Move EvasGLContext and EvasGLSurface files into the efl common directory.
        https://bugs.webkit.org/show_bug.cgi?id=129603

        Reviewed by Gyuyoung Kim.

        EFL port will use EvasGLContext and EvasGLSurface files in both WK1 and WK2.

        No new tests, just refactorings.

        * PlatformEfl.cmake:
        * platform/graphics/efl/EvasGLContext.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/EvasGLContext.cpp.
        (WebKit::EvasGLContext::EvasGLContext):
        (WebKit::EvasGLContext::~EvasGLContext):
        * platform/graphics/efl/EvasGLContext.h: Renamed from Source/WebKit2/UIProcess/API/efl/EvasGLContext.h.
        (WebKit::EvasGLContext::create):
        (WebKit::EvasGLContext::context):
        * platform/graphics/efl/EvasGLSurface.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/EvasGLSurface.cpp.
        (WebKit::EvasGLSurface::EvasGLSurface):
        (WebKit::EvasGLSurface::~EvasGLSurface):
        * platform/graphics/efl/EvasGLSurface.h: Renamed from Source/WebKit2/UIProcess/API/efl/EvasGLSurface.h.
        (WebKit::EvasGLSurface::create):
        (WebKit::EvasGLSurface::surface):

2014-03-03  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ CMake build

        * PlatformGTK.cmake: Add a missing file to the source list.

2014-03-03  Sanghyup Lee  <sh53.lee@samsung.com>

        :active style is not cleared when its display property is set to none before mouse released.
        https://bugs.webkit.org/show_bug.cgi?id=129465

        Reviewed by Antonio Gomes.

        Source/WebCore:

        We currently clearing the :active style when element has a renderer.
        This patch makes elements clear its active style regardless of renderer. 

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

        LayoutTests:

        * fast/css/active-display-none-expected.txt: Added.
        * fast/css/active-display-none.html: Added.


2014-03-03  Andreas Kling  <akling@apple.com>

        Remove 2 unnecessary includes from JSDOMBinding.h
        <https://webkit.org/b/129619>

        Reviewed by Antti Koivisto.

        * bindings/js/JSDOMBinding.h:

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

        GraphicsContext::drawLineForText needs to be exported from WebCore.dylib for iOS builds
        https://bugs.webkit.org/show_bug.cgi?id=129647

        Reviewed by NOBODY (This is a build fix).

        Fixing after r165025 and r165016.

        No new tests as this is a build fix.

        * WebCore.exp.in:

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

        [iOS] Start playback button misplaced
        https://bugs.webkit.org/show_bug.cgi?id=129628

        Reviewed by Simon Fraser.

        On YouTube embeds, while the video is loading it is placed into the DOM with a 0x0 size.
        This causes the start playback button to be visible in the upper-left corner of the embed
        area. The button wasn't visible previously (in plugin mode) because the plugin clipped its
        drawing to its bounds, and so the <video> shadow should do the same.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls):

2014-03-03  Enrica Casucci  <enrica@apple.com>

        Build fix for iOS simulator.

        * WebCore.exp.in:

2014-03-03  Jeremy Jones  <jeremyj@apple.com>

        Forward application suspend resume notifications to the web process.
        https://bugs.webkit.org/show_bug.cgi?id=129356

        Reviewed by Eric Carlson.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):
        Observe UIApplicationDidBecomeActiveNotification,
        WebUIApplicationDidBecomeActiveNotification,
        WebUIApplicationWillEnterForegroundNotification, and
        WebUIApplicationWillResignActiveNotification
        
        (-[WebMediaSessionHelper applicationDidBecomeActive:]):
        Resume session.

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

        Unreviewed, rolling out r165013.
        http://trac.webkit.org/changeset/165013
        https://bugs.webkit.org/show_bug.cgi?id=129646

        New code is not thread safe, asserting on a worker test
        (Requested by ap on #webkit).

        * WebCore.exp.in:
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::replayXHR):
        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::CachedTextTrack):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::resourceForURL):
        (WebCore::MemoryCache::resourceForRequest):
        (WebCore::MemoryCache::addImageToCache):
        (WebCore::MemoryCache::removeImageFromCache):
        (WebCore::MemoryCache::evict):
        (WebCore::MemoryCache::removeResourcesWithOrigin):
        (WebCore::MemoryCache::getOriginsWithCache):
        (WebCore::MemoryCache::removeUrlFromCache):
        (WebCore::MemoryCache::removeRequestFromCache):
        (WebCore::MemoryCache::removeRequestFromCacheImpl):
        (WebCore::MemoryCache::crossThreadRemoveRequestFromCache):
        (WebCore::MemoryCache::getStatistics):
        (WebCore::MemoryCache::setDisabled):
        * loader/cache/MemoryCache.h:
        * platform/CrossThreadCopier.cpp:
        * platform/CrossThreadCopier.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot):
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):

2014-03-03  Sam Weinig  <sam@webkit.org>

        Fix the iOS Simulator build.

        * WebCore.exp.in:

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

        Space between double underlines does not scale with font size
        https://bugs.webkit.org/show_bug.cgi?id=129521

        Reviewed by Simon Fraser.

        This patch moves the logic about how far to draw the second underline (when text-decoration-style: double
        is specified) from InlineTextBox to GraphicsContext, because GraphicsContext is the authoritative source
        about how thick underlines should be. The space between the two underlines is set to the thickness of
        each of the underlines.

        This patch also deletes some unused code in InlineTextBox that was never getting triggered, in addition
        to unifying drawLineForText with drawLinesForText. This didn't have any performance impact in my testing.

        Test: fast/css3-text/css3-text-decoration/text-decoration-style-double-space-scales.html

        * platform/graphics/GraphicsContext.h: drawLineForText takes a boolean for if we should draw double
        underlines.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLinesForText):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * rendering/InlineTextBox.cpp: Use new boolean argument
        (WebCore::drawSkipInkUnderline):
        (WebCore::InlineTextBox::paintDecoration):

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

        AX: Support IOS Accessibility in WK2
        https://bugs.webkit.org/show_bug.cgi?id=129527

        Reviewed by Sam Weinig.

        Update the iOS wrapper so that it can convert points to screen space in WebKit2.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]):

2014-03-03  Martin Hock  <mhock@apple.com>

        Add support for sessions to MemoryCache.
        https://bugs.webkit.org/show_bug.cgi?id=127794

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI): Initialize CachedImage with sessionID.
        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL): Remove URL from MemoryCache for all sessions.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource): Pass sessionID to MemoryCache.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::replayXHR): Ditto.
        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads): Ditto.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Initialize CachedImage with sessionID.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Pass sessionID to MemoryCache.
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet): Constructor takes sessionID.
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp: Ditto.
        (WebCore::CachedFont::CachedFont):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp: Ditto.
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp: Ditto.
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp: Ditto.
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource): Pass sessionID to MemoryCache.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::sessionID):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource): Constructors take sessionID.
        (WebCore::CachedResourceLoader::sessionID): Retrieve sessionID from page.
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet): Pass sessionID to MemoryCache.
        (WebCore::CachedResourceLoader::requestResource): Initialize CachedCSSStyleSheet with sessionID.
        (WebCore::CachedResourceLoader::revalidateResource): Initialize cached resource with sessionID.
        (WebCore::CachedResourceLoader::loadResource): Pass sessionID to MemoryCache and initialize cached resource with sessionID.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp: Constructor takes sessionID.
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.cpp: Ditto.
        (WebCore::CachedScript::CachedScript):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp: Ditto.
        (WebCore::CachedTextTrack::CachedTextTrack):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp: Ditto.
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getSessionMap): Retrieve CachedResourceMap based on sessionID.
        (WebCore::MemoryCache::add): Use sessionID from CachedResource parameter.
        (WebCore::MemoryCache::revalidationSucceeded): Add sessionID parameter.
        (WebCore::MemoryCache::resourceForURL): Ditto.
        (WebCore::MemoryCache::resourceForRequest): Ditto, also move impl into impl method.
        (WebCore::MemoryCache::resourceForRequestImpl): Add CachedResourceMap parameter.
        (WebCore::MemoryCache::addImageToCache): Use default sessionID.
        (WebCore::MemoryCache::removeImageFromCache): Ditto.
        (WebCore::MemoryCache::evict): Use sessionID from CachedResource parameter.
        (WebCore::MemoryCache::removeResourcesWithOrigin): Iterate through all CachedResourceMaps.
        (WebCore::MemoryCache::getOriginsWithCache): Ditto.
        (WebCore::MemoryCache::removeUrlFromCache): Add sessionID parameter.
        (WebCore::MemoryCache::removeRequestFromCache): Ditto.
        (WebCore::MemoryCache::removeRequestFromCacheImpl): Ditto.
        (WebCore::MemoryCache::removeRequestFromSessionCaches): Iterate through all CachedResourceMaps.
        (WebCore::MemoryCache::crossThreadRemoveRequestFromCache): Add sessionID parameter.
        (WebCore::MemoryCache::getStatistics): Iterate through all CachedResourceMaps.
        (WebCore::MemoryCache::setDisabled): Ditto.
        * loader/cache/MemoryCache.h: Create another level for cache.
        * platform/CrossThreadCopier.cpp: Allow copying SessionIDs across threads.
        (WebCore::SessionID>::copy):
        * platform/CrossThreadCopier.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest): Remove trailing whitespace.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot): Initialize CachedImage with sessionID.
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache): Pass sessionID to MemoryCache.

2014-03-03  Andreas Kling  <akling@apple.com>

        Remove unused DataView code from JSDOMBinding.h
        <https://webkit.org/b/129616>

        Reviewed by Antti Koivisto.

        * bindings/js/JSDOMBinding.h:

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

        Allow overflow-scroll to be one-finger scrolled until we hook up UIScrollViews
        https://bugs.webkit.org/show_bug.cgi?id=129621

        Reviewed by Benjamin Poulain.

        Temporary change to allow overflow:scroll to be scrolled in iOS WK2.

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

2014-03-03  Antti Koivisto  <antti@apple.com>

        Find results on simple lines are not marked correctly
        https://bugs.webkit.org/show_bug.cgi?id=129586

        Reviewed by Andreas Kling.

        Tests: editing/text-iterator/count-mark-lineboxes.html
               editing/text-iterator/count-mark-simple-lines.html
               
        TextIterator operating on simple lines failed to take the end of the range into account.
        This also causes performance issues on long documents as range traversals would miss the end
        node and end up going through the entire document.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        
            Stop when hitting the range end on simple text nodes.

        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        
            Use hasRenderedText test instead of linebox-only firstTextBox.

        * testing/Internals.cpp:
        (WebCore::Internals::countMatchesForText):
        * testing/Internals.h:
        * testing/Internals.idl:
        
            Add testing interface for counting and marking matches.

2014-03-03  Benjamin Poulain  <benjamin@webkit.org>

        SelectorQuery failing RightMostWithIdMatch are compiling their selectors for each execution
        https://bugs.webkit.org/show_bug.cgi?id=129601

        Reviewed by Andreas Kling.

        This caused a regression after r164924 for documents in quirks mode. Since those always fail
        selectorForIdLookup(), they ended up compiling the selector every time they were called.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::execute):

2014-03-01  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash in MediaPlayer::rateChanged()
        https://bugs.webkit.org/show_bug.cgi?id=129548

        Reviewed by Darin Adler.

        WTF::bind will automatically ref the parameters added to it. But MediaPlayerPrivate-
        AVFoundation and -MediaSOurceAVFObjC are not RefCounted, so by the time the bound
        function is called, the underlying objects may have been freed.

        Replace or augment callOnMainThread arguments with lambdas and weakPtrs so that
        if the argument has been destroyed, its methods will not be called.

        Make the MediaPlayerPrivateAVFoundation::Notification function type a std::function:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::function):

        Make createWeakPtr() public so that it can be called from non-class methods:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createWeakPtr): 
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::createWeakPtr): 

        Use a weakPtr to abort callOnMainThread() if the object has been destroyed:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::CMTimebaseEffectiveRateChangedCallback):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):

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

        [MSE] YouTube videos fail to play
        https://bugs.webkit.org/show_bug.cgi?id=129525

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-fudge-factor.html

        Add a very simple playability metric to SourceBuffer. Track the number of seconds buffered
        and use that metric to determine whether the MediaSource has buffered enough data to play
        through.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::currentTime): Added simple accessor.
        (WebCore::MediaSource::monitorSourceBuffers): Replace the functor-based iterators with lambdas.
        (WebCore::MediaSource::addSourceBuffer): Drive-by fix; only add new source buffers to the
            activeSourceBuffers list if those buffers are actually active.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer): Initialize new ivars.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Measure the number of seconds buffered.
        (WebCore::SourceBuffer::monitorBufferingRate): Use a simple Exponential moving average to
            track the buffering rate.
        (WebCore::SourceBuffer::hasCurrentTime): Return true if the current time is within 1/24 s
            of a buffered range.
        (WebCore::SourceBuffer::hasFutureTime): Moved from MediaSource.
        (WebCore::SourceBuffer::canPlayThrough): Return true if the buffering rate is > 1s per
            second, or if the rate is sufficient to keep up over the remaining time.
        * Modules/mediasource/SourceBuffer.h:

2014-03-03  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Serialize circle positions
        https://bugs.webkit.org/show_bug.cgi?id=129404

        Reviewed by Dirk Schulze.

        Circle positions should always be present when serialized, and should
        only have the 2 or 4-valued form. Keywords are converted to percentages
        and simplified where possible. This patch adds some additional processing
        that converts the parsed position into the serialized format, before
        converting it to text. See http://dev.w3.org/csswg/css-shapes/#basic-shape-serialization.

        Updated existing parsing tests.

        * css/CSSBasicShapes.cpp:
        (WebCore::serializePositionOffset): Convert a position offset to a serialized string.
        The offset must be a pair, as generated by buildSerializablePositionOffset.
        (WebCore::buildSerializablePositionOffset): Generates a keyword + offset pair for each
        position offset. The keywords may later be dropped during serialization.
        (WebCore::CSSBasicShapeCircle::cssText): Use the new serialization methods.

2014-03-03  Lorenzo Tilve  <ltilve@igalia.com>

        Optimize StylePropertiesSet::findPropertyIndex() to improve CSS properties performance
        https://bugs.webkit.org/show_bug.cgi?id=129605

        Reviewed by Andreas Kling.

        Merged from Blink (patch by Mikhail Pozdnyakov):
        https://src.chromium.org/viewvc/blink?view=revision&revision=167325

        Avoid checking whether 'StylePropertiesSet' is mutable and accesing directly to its
        data members to achieve performance improvements

        Before the optimization applied:
            mean: 3064.8337171934063 runs/s
            median: 3097.5899379343855 runs/s
            stdev: 66.89274074044187 runs/s
            min: 2891.7479324362585 runs/s
            max: 3113.288683440125 runs/s

        After the optimization applied:
            mean: 3343.8356114138105 runs/s
            median: 3356.25682957446 runs/s
            stdev: 36.297533087489036 runs/s
            min: 3238.5468032264243 runs/s
            max: 3368.664837531425 runs/s

        Performance gain for the average value is approx. 9.1%, in the
        range of the 10% - 8.2% for the min and max measured
        values (Linux desktop x64).

        * css/StyleProperties.cpp:
        (WebCore::ImmutableStyleProperties::findPropertyIndex):
        (WebCore::MutableStyleProperties::findPropertyIndex):
        * css/StyleProperties.h:
        (WebCore::toMutableStyleProperties):
        (WebCore::toImmutableStyleProperties):
        (WebCore::StyleProperties::findPropertyIndex):

2014-03-03  Brian Burg  <bburg@apple.com>

        Unreviewed build fix for Windows after r164986.

        * WebCore.vcxproj/build-generated-files.sh: Export WebReplayScripts
        so that the build system knows how to find CodeGeneratorReplayInputs.py.

2014-03-03  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Overset computation is incorrect in some cases
        https://bugs.webkit.org/show_bug.cgi?id=129032

        Reviewed by Mihnea Ovidenie.

        This patch reworks the way overset is computed for regions and named flows.

        1. Regions overflow no longer trigger an overset changed event. This is because
        the overflow of a box is contained within the region range of the box. The content
        edge should be considered the logical bottom position of the content inside the
        flow thread.

        2. The regions events logic was moved from RenderFlowThread to RenderNamedFlowThread
        and from RenderRegion to RenderNamedFlowFragment (including the regionOverset property).

        3. The overset value of the named flow is no longer stored in the named flow. It is
        extracted from the overset of the last region in the chain.

        4. The regions overset is not computed every time the flow thread is laid out which
        should improve performance for flows with many regions. With the patch, each region
        computes the overset value during its layout when the flow thread is in the overflow
        or the final layout phase.

        5. The overset changed event is dispatched only at the end of the layout of the named flows,
        after all the region overset changes have been considered. This means that the overset
        event can't be dispatched in the middle of the auto-height processing algorithm that
        requires multiple layout passes for the flow threads.

        However, the region layout update event dispatch timing was not changed, it is dispatched
        every time the flow thread has a layout. This preserves the current behavior of the event.

        Tests: The old tests were modified to take into account the change.

        * dom/Element.cpp:
        (WebCore::Element::webkitRegionOverset):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::overset):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateFlowThreadsIntoMeasureContentPhase):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::layout):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::layoutBlock):
        (WebCore::RenderNamedFlowFragment::setRegionOversetState):
        (WebCore::RenderNamedFlowFragment::regionOversetState):
        (WebCore::RenderNamedFlowFragment::updateOversetState):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::computeOverflow):
        (WebCore::RenderNamedFlowThread::layout):
        (WebCore::RenderNamedFlowThread::dispatchNamedFlowEvents):
        (WebCore::RenderNamedFlowThread::dispatchRegionLayoutUpdateEventIfNeeded):
        (WebCore::RenderNamedFlowThread::dispatchRegionOversetChangeEventIfNeeded):
        * rendering/RenderNamedFlowThread.h:
        There's a new field called m_flowContentBottom that tracks the content bottom of the flow thread
        after layout. This value is used to compute the overset value of the regions because it's not
        affected by relative positioning or visual overflow such as shadows.
        * rendering/RenderRegion.cpp:
        * rendering/RenderRegion.h:

2014-03-03  Tomas Popela  <tpopela@redhat.com>

        [GTK] CodeGeneratorGObject.pm remove usage of undefined variable
        https://bugs.webkit.org/show_bug.cgi?id=129602

        Reviewed by Martin Robinson.

        Remove usage of undefined variable hdrPropIncludes in CodeGeneratorGObject.pm

        * bindings/scripts/CodeGeneratorGObject.pm:
        (WriteData):

2014-03-03  Brian Burg  <bburg@apple.com>

        Web Replay: upstream input storage, capture/replay machinery, and inspector domain
        https://bugs.webkit.org/show_bug.cgi?id=128782

        Reviewed by Timothy Hatcher, Joseph Pecoraro, and Andreas Kling.

        No new tests yet, as they rely on infrastructure tracked in https://webkit.org/b/129190.

        Replayable executions are organized into ReplaySessions, which can
        contain several ReplaySessionSegments that divide overall execution
        at main frame navigation boundaries. NondeterministicInput subclasses
        are stored in SegmentedInputStorage according to the input's InputQueue.

        Capture and playback are controlled at the page granularity by the Page's
        ReplayController. The controller knows how to create new segments, replay to
        arbitrary positions in the ReplaySession, and track the active InputCursor.

        The capturing and replaying input cursor subclasses encapsulate state for
        storing new inputs and loading/dispatching saved inputs, respectively.

        The ReplayAgent and associated inspector protocol domain is the friendly
        public API for programmatically capturing and replaying sessions.

        * DerivedSources.make: Add replay inputs code generation target. Add the
        replay domain specification to the list of inspector domains.

        * ForwardingHeaders/replay/EncodedValue.h: Added.
        * WebCore.xcodeproj/project.pbxproj: Add many files, and export
        `WebReplayScripts` environment variable to DerivedSources.make.

        * inspector/InspectorController.cpp: Add the replay agent.
        (WebCore::InspectorController::InspectorController):

        * inspector/InspectorInstrumentation.cpp:
        Add events for segment lifecycle events, and loading/unloading of sessions
        and segments, and capture/replay progress events. The replay controller
        also needs to know about detached and committed frames.

        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::sessionCreatedImpl):
        (WebCore::InspectorInstrumentation::sessionLoadedImpl):
        (WebCore::InspectorInstrumentation::sessionModifiedImpl):
        (WebCore::InspectorInstrumentation::segmentCreatedImpl):
        (WebCore::InspectorInstrumentation::segmentCompletedImpl):
        (WebCore::InspectorInstrumentation::segmentLoadedImpl):
        (WebCore::InspectorInstrumentation::segmentUnloadedImpl):
        (WebCore::InspectorInstrumentation::captureStartedImpl):
        (WebCore::InspectorInstrumentation::captureStoppedImpl):
        (WebCore::InspectorInstrumentation::playbackStartedImpl):
        (WebCore::InspectorInstrumentation::playbackPausedImpl):
        (WebCore::InspectorInstrumentation::playbackHitPositionImpl):
        (WebCore::InspectorInstrumentation::replayAgentEnabled):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::replayAgentEnabled):
        (WebCore::InspectorInstrumentation::sessionCreated):
        (WebCore::InspectorInstrumentation::sessionLoaded):
        (WebCore::InspectorInstrumentation::sessionModified):
        (WebCore::InspectorInstrumentation::segmentCreated):
        (WebCore::InspectorInstrumentation::segmentCompleted):
        (WebCore::InspectorInstrumentation::segmentLoaded):
        (WebCore::InspectorInstrumentation::segmentUnloaded):
        (WebCore::InspectorInstrumentation::captureStarted):
        (WebCore::InspectorInstrumentation::captureStopped):
        (WebCore::InspectorInstrumentation::playbackStarted):
        (WebCore::InspectorInstrumentation::playbackPaused):
        (WebCore::InspectorInstrumentation::playbackHitPosition):

        * inspector/InspectorReplayAgent.cpp: Added.
        (WebCore::buildInspectorObjectForPosition):
        (WebCore::buildInspectorObjectForInput):
        (WebCore::buildInspectorObjectForSession):
        (WebCore::SerializeInputToJSONFunctor::SerializeInputToJSONFunctor):
        (WebCore::SerializeInputToJSONFunctor::~SerializeInputToJSONFunctor):
        (WebCore::SerializeInputToJSONFunctor::operator()):
        (WebCore::SerializeInputToJSONFunctor::returnValue):
        (WebCore::buildInspectorObjectForSegment):
        (WebCore::InspectorReplayAgent::InspectorReplayAgent):
        (WebCore::InspectorReplayAgent::~InspectorReplayAgent):
        (WebCore::InspectorReplayAgent::sessionState):
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorReplayAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorReplayAgent::frameNavigated):
        (WebCore::InspectorReplayAgent::frameDetached):
        (WebCore::InspectorReplayAgent::sessionCreated):
        (WebCore::InspectorReplayAgent::sessionModified):
        (WebCore::InspectorReplayAgent::sessionLoaded):
        (WebCore::InspectorReplayAgent::segmentCreated):
        (WebCore::InspectorReplayAgent::segmentCompleted):
        (WebCore::InspectorReplayAgent::segmentLoaded):
        (WebCore::InspectorReplayAgent::segmentUnloaded):
        (WebCore::InspectorReplayAgent::captureStarted):
        (WebCore::InspectorReplayAgent::captureStopped):
        (WebCore::InspectorReplayAgent::playbackStarted):
        (WebCore::InspectorReplayAgent::playbackPaused):
        (WebCore::InspectorReplayAgent::playbackHitPosition):
        (WebCore::InspectorReplayAgent::startCapturing):
        (WebCore::InspectorReplayAgent::stopCapturing):
        (WebCore::InspectorReplayAgent::replayToPosition):
        (WebCore::InspectorReplayAgent::replayToCompletion):
        (WebCore::InspectorReplayAgent::pausePlayback):
        (WebCore::InspectorReplayAgent::cancelPlayback):
        (WebCore::InspectorReplayAgent::switchSession):
        (WebCore::InspectorReplayAgent::insertSessionSegment):
        (WebCore::InspectorReplayAgent::removeSessionSegment):
        Provide a public API for modifying sessions. This is the backend support
        for user editing of replay sessions to add/remove specific segments.

        (WebCore::InspectorReplayAgent::findSession):
        (WebCore::InspectorReplayAgent::findSegment):
        (WebCore::InspectorReplayAgent::getAvailableSessions):
        (WebCore::InspectorReplayAgent::getSerializedSession):
        (WebCore::InspectorReplayAgent::getSerializedSegment):
        Most of the replay protocol domain speaks in terms of sesssion and
        segment identifiers. These functions return the actual data associated
        with these identifiers.

        * inspector/InspectorReplayAgent.h: Added.
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorReplayAgent): Added.
        (WebCore::InstrumentingAgents::setInspectorReplayAgent): Added.
        * inspector/protocol/Replay.json: Added.

        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::replayController): Added.
        * platform/Logging.h: Add WebReplay logging channel.
        * replay/AllReplayInputs.h: Added. Simplifies importing all input definitions.

        * replay/CapturingInputCursor.cpp: Added.
        (WebCore::CapturingInputCursor::CapturingInputCursor):
        (WebCore::CapturingInputCursor::~CapturingInputCursor):
        (WebCore::CapturingInputCursor::create):
        (WebCore::CapturingInputCursor::storeInput):
        (WebCore::CapturingInputCursor::loadInput):
        (WebCore::CapturingInputCursor::uncheckedLoadInput):
        * replay/CapturingInputCursor.h: Added.

        * replay/EventLoopInput.h:
        (WebCore::EventLoopInputBase::EventLoopInputBase):
        (WebCore::EventLoopInputBase::timestamp):
        (WebCore::EventLoopInputBase::setTimestamp): Support deserialization.

        * replay/EventLoopInputDispatcher.cpp: Added. This class encapsulates the timers
        and measurements used to dispatch event loop inputs during replay.

        (WebCore::EventLoopInputDispatcher::EventLoopInputDispatcher):
        (WebCore::EventLoopInputDispatcher::run):
        (WebCore::EventLoopInputDispatcher::pause):
        (WebCore::EventLoopInputDispatcher::timerFired):
        (WebCore::EventLoopInputDispatcher::dispatchInputSoon):
        (WebCore::EventLoopInputDispatcher::dispatchInput):
        * replay/EventLoopInputDispatcher.h: Added.
        (WebCore::EventLoopInputDispatcherClient::EventLoopInputDispatcherClient):
        (WebCore::EventLoopInputDispatcherClient::~EventLoopInputDispatcherClient):

        * replay/FunctorInputCursor.h: Added.
        (WebCore::FunctorInputCursor::~FunctorInputCursor):
        (WebCore::FunctorInputCursor::forEachInputInQueue):
        (WebCore::FunctorInputCursor::FunctorInputCursor):
        (WebCore::FunctorInputCursor::storeInput):
        (WebCore::FunctorInputCursor::loadInput):
        (WebCore::FunctorInputCursor::uncheckedLoadInput):

        * replay/ReplayController.cpp: Added.
        (WebCore::ReplayController::ReplayController):
        (WebCore::ReplayController::switchSession):
        (WebCore::ReplayController::createSegment):
        (WebCore::ReplayController::completeSegment):
        (WebCore::ReplayController::loadSegment):
        (WebCore::ReplayController::unloadSegment):
        (WebCore::ReplayController::startCapturing):
        (WebCore::ReplayController::stopCapturing):
        (WebCore::ReplayController::startPlayback):
        (WebCore::ReplayController::pausePlayback):
        (WebCore::ReplayController::cancelPlayback):
        (WebCore::ReplayController::replayToPosition):
        (WebCore::ReplayController::frameDetached):
        (WebCore::ReplayController::frameNavigated):
        (WebCore::ReplayController::loadedSession):
        (WebCore::ReplayController::loadedSegment):
        (WebCore::ReplayController::activeInputCursor):
        (WebCore::ReplayController::dispatcher):
        (WebCore::ReplayController::willDispatchInput):
        (WebCore::ReplayController::didDispatchInput):
        (WebCore::ReplayController::didDispatchFinalInput):
        * replay/ReplayController.h: Added.
        (WebCore::ReplayPosition::ReplayPosition):
        (WebCore::ReplayPosition::operator<):
        (WebCore::ReplayPosition::operator==):

        * replay/ReplayInputCreationMethods.cpp: Added.
        Static factory implementations for inputs belong here.
        (WebCore::InitialNavigation::createFromPage):

        * replay/ReplayInputDispatchMethods.cpp: Added.
        All dispatch() implementations for generated replay inputs belong here.
        (WebCore::BeginSegmentSentinel::dispatch):
        (WebCore::EndSegmentSentinel::dispatch):
        (WebCore::InitialNavigation::dispatch):

        * replay/ReplayInputTypes.cpp:
        (WebCore::ReplayInputTypes::ReplayInputTypes):
        * replay/ReplayInputTypes.h: Define strings for WebCore inputs.

        * replay/ReplaySession.cpp: Added.
        (WebCore::ReplaySession::create):
        (WebCore::ReplaySession::ReplaySession):
        (WebCore::ReplaySession::~ReplaySession):
        (WebCore::ReplaySession::appendSegment):
        (WebCore::ReplaySession::insertSegment):
        (WebCore::ReplaySession::removeSegment):
        * replay/ReplaySession.h: Added.
        (WebCore::ReplaySession::identifier):
        (WebCore::ReplaySession::timestamp):
        (WebCore::ReplaySession::size):
        (WebCore::ReplaySession::at):
        (WebCore::ReplaySession::begin):
        (WebCore::ReplaySession::end):

        * replay/ReplaySessionSegment.cpp: Added.
        (WebCore::ReplaySessionSegment::create):
        (WebCore::ReplaySessionSegment::ReplaySessionSegment):
        (WebCore::ReplaySessionSegment::~ReplaySessionSegment):
        (WebCore::ReplaySessionSegment::createCapturingCursor):
        (WebCore::ReplaySessionSegment::createReplayingCursor):
        (WebCore::ReplaySessionSegment::createFunctorCursor):
        * replay/ReplaySessionSegment.h: Added.
        (WebCore::ReplaySessionSegment::identifier):
        (WebCore::ReplaySessionSegment::timestamp):

        * replay/ReplayingInputCursor.cpp: Added.
        (WebCore::ReplayingInputCursor::ReplayingInputCursor):
        (WebCore::ReplayingInputCursor::~ReplayingInputCursor):
        (WebCore::ReplayingInputCursor::create):
        (WebCore::ReplayingInputCursor::storeInput):
        (WebCore::ReplayingInputCursor::loadInput):
        (WebCore::ReplayingInputCursor::uncheckedLoadInput):
        * replay/ReplayingInputCursor.h: Added.

        * replay/SegmentedInputStorage.cpp: Added.
        (WebCore::queueTypeToLogPrefix):
        (WebCore::jsonStringForInput):
        (WebCore::offsetForInputQueue):
        (WebCore::SegmentedInputStorage::SegmentedInputStorage):
        (WebCore::SegmentedInputStorage::~SegmentedInputStorage):
        (WebCore::SegmentedInputStorage::load):
        (WebCore::SegmentedInputStorage::store):
        (WebCore::SegmentedInputStorage::queueSize):
        * replay/SegmentedInputStorage.h: Added.

        * replay/SerializationMethods.cpp: Added.
        Specializations of EncodingTraits for WebCore types belong here.

        (JSC::EncodingTraits<NondeterministicInputBase>::encodeValue):
        (JSC::EncodingTraits<NondeterministicInputBase>::decodeValue):
        (JSC::EncodingTraits<SecurityOrigin>::encodeValue):
        (JSC::EncodingTraits<SecurityOrigin>::decodeValue):
        (JSC::EncodingTraits<URL>::encodeValue):
        (JSC::EncodingTraits<URL>::decodeValue):
        * replay/SerializationMethods.h: Added.
        * replay/WebInputs.json: Added.
        In this inital patch, we define BeginSegmentSentinel,
        EndSegmentSentinel, and InitialNavigation inputs.

2014-03-03  Antoine Quint  <graouts@webkit.org>

        Respect SVG fragment identifiers in <img> src attribute
        https://bugs.webkit.org/show_bug.cgi?id=129387

        Reviewed by Dirk Schulze.

        Following Dirk Schulze's suggestion, we set the URL on the SVGImage itself and handle the URL's
        fragment identifier at draw time in the SVGImage itself, which will provide a sounder base for
        handling of fragment identifier in SVG resource URLs in CSS properties, and should also deal
        with the crasher reported in http://webkit.org/b/129498 since there is a guaranteed Frame at the
        time we call SVGImage::draw().

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        * svg/graphics/SVGImageForContainer.h:

2014-03-03  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Move function calls outside loop in dom
        https://bugs.webkit.org/show_bug.cgi?id=126525

        Reviewed by Csaba Osztrogonác.

        Store the result of length() in a local variable and use it in each iteration.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isXMLMIMEType):
        * dom/ElementData.cpp:
        (WebCore::UniqueElementData::UniqueElementData):
        * dom/EventContext.cpp:
        (WebCore::TouchEventContext::checkReachability):

2014-03-03  Tomas Popela  <tpopela@redhat.com>

        [GTK] webkit_dom_range_compare_boundary_points fails when 0 is passed as how parameter
        https://bugs.webkit.org/show_bug.cgi?id=129145

        Reviewed by Carlos Garcia Campos.

        While generating GObject DOM API the generator should skip non pointer
        types while generating the g_return_val_if_fail macro.
        This will avoid the situation when Range.START_TO_START is defined as 0,
        thus the webkit_dom_range_compare_boundary_points function will fail
        everytime it is called with 0 as how value.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):

2014-03-03  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        [cmake] *Names.cpp file should be regenerated after touching StaticString.pm
        https://bugs.webkit.org/show_bug.cgi?id=129031

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt: Added make_names.pl dependencies: bindings/scripts/Hasher.pm and bindings/scripts/StaticString.pm

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

        [GTK] Multimedia controls captions icon needs its own metaphor
        https://bugs.webkit.org/show_bug.cgi?id=129091

        Reviewed by Martin Robinson.

        As we got the new icon created, we used it with a fallback to the
        old icon to keep run-time compatibility.

        No new tests, current ones suffice.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaToggleClosedCaptionsButton):
        Replicated RenderThemeGtk::paintMediaButton to check for the
        necessary icon first and do the fallback to the old and stock
        icons.
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::getStockIconForWidgetType): Added ASSERT for non-empty
        icon name.
        (WebCore::getStockSymbolicIconForWidgetType): Check for non empty
        icon name before calling getStockIconForWidgetType. Fixed coding
        style.
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::getStockIconForWidgetType): Added ASSERT for non-empty
        icon name.
        (WebCore::getStockSymbolicIconForWidgetType): Check for non empty
        icon name before calling getStockIconForWidgetType. Fixed coding
        style.

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

        Add a fallback path for compiling the remaining attribute checkers
        https://bugs.webkit.org/show_bug.cgi?id=129580

        Reviewed by Darin Adler.

        The remaining attribute checkers appear to be less common than the simple value match.
        This patch adds them to SelectorCompiler for completeness but no attempt is made at optimizing them,
        they all default to function calls.

        If the assumption that those selectors are not common turn out to be incorrect, we should see
        the function calls in profiles and optimize them as needed.

        * css/SelectorChecker.cpp:
        (WebCore::attributeValueMatches):
        If we get anything but attribute match here, something has gone horribly wrong. Update the code
        to fail if that were to happen.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        Add the missing match type to the selector fragment.

        Begin, End, Contain cannot match an empty value per specification. We can test that at compile time
        and fail immediately. See http://www.w3.org/TR/css3-selectors/#attribute-substrings

        List has the extra requirement that a value containing a space does not match anything. It also cannot
        match with an empty string. See http://www.w3.org/TR/css3-selectors/#attribute-representation

        (WebCore::SelectorCompiler::attributeValueBeginsWith):
        (WebCore::SelectorCompiler::attributeValueContains):
        (WebCore::SelectorCompiler::attributeValueEndsWith):
        (WebCore::SelectorCompiler::attributeValueMatchHyphenRule):
        (WebCore::SelectorCompiler::attributeValueSpaceSeparetedListContains):
        The slow fallbacks.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):
        A generic code generator making function call to match an attribute value.

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

        JSDOMWindow::commonVM() should return a reference.
        <https://webkit.org/b/129293>

        Since this function always returns a VM and never null, make it
        return a reference instead. There are more VM getters that never
        return null, but I tried to keep the patch from snowballing.

        Reviewed by Geoff Garen.

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

        Remove ASSERT in ~IDBRequest since it is firing during legitimate uses in Web Inspector.

        Adding the ASSERT back is tracked by https://webkit.org/b/129593.

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

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::~IDBRequest):

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

        Unreviewed, rolling out r164961.
        http://trac.webkit.org/changeset/164961
        https://bugs.webkit.org/show_bug.cgi?id=129596

        Caused many assertion failures (Requested by ap on #webkit).

        * css/SelectorChecker.cpp:
        (WebCore::attributeValueMatches):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueMatching):

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

        Streamline use of TextIterator, cutting down includes and use of soon-to-be-deleted functions
        https://bugs.webkit.org/show_bug.cgi?id=129592

        Reviewed by Sam Weinig.

        * WebCore.exp.in: Re-sorted this file. Not sure how it got unsorted.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::stringForVisiblePositionRange): Call TextIterator::text
        instead of TextIterator::length. Also removed unneeded special case for empty string
        and exception code.
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange): Ditto.

        * accessibility/AccessibilityObject.h: Include TextIteratorBehavior.h instead of
        TextIterator.h.

        * accessibility/AccessibilityRenderObject.cpp: Include TextIterator.h.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm: Removed unneeded
        TextIterator.h include.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): Call
        TextIterator::text instead of TextIterator::length.

        * dom/Element.cpp: Include TextIterator.h.

        * dom/Node.cpp: Include Range.h.

        * dom/Position.cpp:
        (WebCore::Position::isCandidate): Cast to RenderBlockFlow since that's what the
        type check above does. Use a return statement instead of an else for better flow.
        (WebCore::Position::leadingWhitespacePosition): Call
        deprecatedIsCollapsibleWhitespace by its new name (newly deprecated).
        (WebCore::Position::trailingWhitespacePosition): Ditto.

        * dom/Range.cpp:
        (WebCore::Range::firstNode): Added a FIXME about code that clearly does not
        belong. This is something we really need to fix.

        * editing/AlternativeTextController.cpp: Include TextIterator.h.
        * editing/ApplyStyleCommand.cpp: Ditto.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit): Call
        deprecatedIsCollapsibleWhitespace by its new name (newly deprecated).

        * editing/Editor.h: Include TextIteratorBehavior.h instead of TextIterator.h.

        * editing/HTMLInterchange.cpp:
        (WebCore::convertHTMLTextToInterchangeFormat): Call
        deprecatedIsCollapsibleWhitespace by its new name (newly deprecated).

        * editing/SpellingCorrectionCommand.cpp: Include TextIterator.h.

        * editing/TextIterator.h: Moved isCollapsibleWhitespace from here into
        htmlediting.h and renamed it deprecatedIsCollapsibleWhitespace.

        * editing/TextIterator.cpp: Call
        deprecatedIsCollapsibleWhitespace by its new name (newly deprecated).

        * editing/TypingCommand.cpp: Include TextIterator.h.

        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary): Call TextIterator::text instead of
        TextIterator::length.
        (WebCore::nextBoundary): Ditto.

        * editing/htmlediting.cpp: Include TextIterator.h.

        * editing/htmlediting.h: Removed non-helpful section comments.
        Added FIXME about isWhitespace. Added deprecatedIsCollapsibleWhitespace,
        formerly not deprecated and in TextIterator.h.

        * editing/markup.cpp: Include TextIterator.h.

        * html/HTMLTextAreaElement.cpp: Include TextIterator.h.

        * page/ContextMenuController.cpp:
        (WebCore::selectionContainsPossibleWord): Call TextIterator::text
        instead of TextIterator::length and TextIterator::characterAt.

        * page/EventHandler.cpp: Sorted conditional includes alphabetically by condition.

        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]): Call TextIterator::text
        instead of TextIterator::length.

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

        Add a fallback path for compiling the remaining attribute checkers
        https://bugs.webkit.org/show_bug.cgi?id=129580

        Reviewed by Darin Adler.

        The remaining attribute checkers appear to be less common than the simple value match.
        This patch adds them to SelectorCompiler for completeness but no attempt is made at optimizing them,
        they all default to function calls.

        If the assumption that those selectors are not common turn out to be incorrect, we should see
        the function calls in profiles and optimize them as needed.

        * css/SelectorChecker.cpp:
        (WebCore::attributeValueMatches):
        If we get anything but attribute match here, something has gone horribly wrong. Update the code
        to fail if that were to happen.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        Add the missing match type to the selector fragment.

        Begin, End, Contain cannot match an empty value per specification. We can test that at compile time
        and fail immediately. See http://www.w3.org/TR/css3-selectors/#attribute-substrings

        List has the extra requirement that a value containing a space does not match anything. It also cannot
        match with an empty string. See http://www.w3.org/TR/css3-selectors/#attribute-representation

        (WebCore::SelectorCompiler::attributeValueBeginsWith):
        (WebCore::SelectorCompiler::attributeValueContains):
        (WebCore::SelectorCompiler::attributeValueEndsWith):
        (WebCore::SelectorCompiler::attributeValueMatchHyphenRule):
        (WebCore::SelectorCompiler::attributeValueSpaceSeparetedListContains):
        The slow fallbacks.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):
        A generic code generator making function call to match an attribute value.

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

        Fix build for case-sensitive file systems.

        * platform/UserActivity.h: Runloop -> RunLoop.

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

        HysteresisTimer should use WebCore::Timer
        https://bugs.webkit.org/show_bug.cgi?id=129587

        Reviewed by Sam Weinig.

        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::HysteresisActivity):
        (WebCore::HysteresisActivity::hysteresisTimerFired):
            - RunLoop::Timer -> WebCore::Timer.
        * platform/UserActivity.h:

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

        Split TextIteratorBehavior into a separate header
        https://bugs.webkit.org/show_bug.cgi?id=129578

        Reviewed by Sam Weinig.

        This is in preparation to greatly cut down on includes of TextIterator.h.

        * GNUmakefile.list.am: Added new header.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

         * editing/FindOptions.h: Changed typedef to unsigned char;
        there is no reason to store these in a 32-bit integer.

         * editing/TextIterator.h: Added include of TextIteratorBehavior.h
        and moved comments about the meanings of flag bits to their definition.

        * editing/TextIteratorBehavior.h: Added.

        * WebCore.exp.in: Updated for type changes.

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

        [iOS WebKit2] Form controls handling
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16053643>

        Reviewed by Simon Fraser.

        Updates localizable strings and adds some exports.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

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

        [iOS][WK2] Pages using tiled compositing layers allocate too many tiles on zoom
        https://bugs.webkit.org/show_bug.cgi?id=129471

        Reviewed by Simon Fraser.

        A few issues with TileController were causing sublayers of the root layers
        to tile incorrect surfaces on zoom.

        First, the exposedRect API was not updating the sublayers. The layers go correctly
        into tiling mode, but the tiles cover the full document instead of the visible area.

        The other major issue was the margins being applied to the coverage size in document
        coordinates. Since each margin is 512px, the total coverage size after zoom was
        gigantic.

        To solve this, this patch switch from the exposedRect API to the generic concept
        of VisibleExtentContentRect introduced for iOS WebKit1.

        * WebCore.exp.in:
        * platform/ScrollView.h:
        Define a VisibleExtentContentRect on the scrollview itself when there is no
        platformWidget().
        The case with inside frame is untested due to stability issues :(.
        (see <rdar://problem/16199219>)

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::computeTileCoverageRect):
        Remove the margin from the tile coverage.

        On iOS, m_tileCoverage is always zero at the moment. Previously, the tile coverage
        was artificially extended by the margins. With the margins removed, I temporarily added
        a factor of 1.5.
        ViewUpdateDispatcher has all the information to compute a great tile coverage, I will need
        a follow up patch to fix that.

        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::visibleExtentContentRect):
        (WebCore::ScrollView::setVisibleExtentContentRect):

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

        Sort Mac platform export files so they merge better
        https://bugs.webkit.org/show_bug.cgi?id=129581

        Reviewed by Sam Weinig.

        * WebCore.exp.in: Ran the new sort-export-file on this.

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

        Add protected casting to FilterOperation classes.
        https://bugs.webkit.org/show_bug.cgi?id=124062

        Reviewed by Sam Weinig.

        Use the type cast macro generators to produce some toFilterOperation-style
        functions, and then use them in our PlatformCA filter code.

        Test: css3/filters/animation-from-initial-values-with-color-matrix.html

        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Use the toFilterOperation methods, in
        some cases removing the unnecessary double cast.
        (PlatformCAFilters::filterValueForOperation):
        (PlatformCAFilters::colorMatrixValueForFilter):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::blend):
        (WebCore::BasicColorMatrixFilterOperation::operator==): Move this to the .cpp file so it can use the casting methods.
        (WebCore::BasicComponentTransferFilterOperation::blend):
        (WebCore::BasicComponentTransferFilterOperation::operator==): Ditto.
        * platform/graphics/filters/FilterOperation.h: Add the casting macros.

2014-03-02  Yoav Weiss  <yoav@yoav.ws>

        Fix srcset related bugs
        https://bugs.webkit.org/show_bug.cgi?id=129539

        Fixed a bug reported against Blink's srcset implementation at https://code.google.com/p/chromium/issues/detail?id=347998
        When both src and srcset had only 1x descriptors and the DPR was higher than 1, the src's resource was picked.

        Also fixed the invalid descriptor handling, which wasn't aligned with the spec, and therefore was not as forward compatible as it should be.
        Invalid descriptors caused the entire resource to be ignored, rather than just the descriptors themselves.

        Reviewed by Andreas Kling.

        Tests: fast/hidpi/image-srcset-invalid-descriptor.html
               fast/hidpi/image-srcset-src-selection-1x-both.html

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseDescriptors):
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        (WebCore::bestFitSourceForImageAttributes):

2014-03-01  Gavin Barraclough  <barraclough@apple.com>

        Split UserActivity, simplify PageThrottler
        https://bugs.webkit.org/show_bug.cgi?id=129551

        Reviewed by Darin Adler.

        The class UserActivity currently implements two things – a hysteresis mechanism, and
        an abstraction of NSActivity controlled by that mechanism. PageThrottler implements
        its own hysteresis mechanism, which directly controls DOM timer throttling and also
        controls a couple of UserActivities, giving a total of 3 separate hysteresis mechanisms,
        layered two deep.

        Split UserActivity into three, with HysteresisActivity implementing an abstract hysteresis
        mechanism, UserActivity::Impl controlling the NSActivity, and then UserActivity combining
        these two back together. The interface to UserActivity is unchanged.

        Remove PageThrottler's bespoke hysteresis, replacing it with a use of HysteresisActivity.
        Replace the two UserActivities with a single UserActivity::Impl, so there are no longer
        layered hysteresis mechanisms.

        * WebCore.exp.in:
            - exports changed.
        * WebCore.xcodeproj/project.pbxproj:
            - added HysteresisActivity.h.
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - if the page starts visible, begin activity. If it starts hidden throttle DOM timers.
        (WebCore::PageThrottler::hiddenPageDOMTimerThrottlingStateChanged):
            - when the DOM timer throttling setting changes, make sure we update.
        (WebCore::PageThrottler::incrementActivityCount):
        (WebCore::PageThrottler::decrementActivityCount):
            - when m_activityCount changes update the hysteresis state.
        (WebCore::PageThrottler::updateHysteresis):
        (WebCore::PageThrottler::setViewState):
            - when IsVisuallyIdle changes update the hysteresis state.
        (WebCore::PageThrottler::started):
        (WebCore::PageThrottler::stopped):
            - callbacks from HysteresisActivity, these control m_activity and DOM timer throttling.
        * page/PageThrottler.h:
        (WebCore::PageThrottler::didReceiveUserInput):
        (WebCore::PageThrottler::pluginDidEvaluate):
            - call impulse to temporarily enable the activity.
        * platform/HysteresisActivity.h: Copied from Source/WebCore/platform/UserActivity.h.
        (WebCore::HysteresisActivity::HysteresisActivity):
            - constructor takes a delegate optionally a timeout.
        (WebCore::HysteresisActivity::start):
            - start activity immediately. If stopped, call started method on delegate. If in timeout period, cancel the timer.
        (WebCore::HysteresisActivity::stop):
            - stop activity after hysteresis. If started, initiate timeout period.
        (WebCore::HysteresisActivity::impulse):
            - ensure activity for at least the timeout period.
        (WebCore::HysteresisActivity::hysteresisTimerFired):
            - delayed stop - when the timer fires call stopped on the delegate.
        * platform/UserActivity.cpp:
        (WebCore::UserActivity::Impl::Impl):
        (WebCore::UserActivity::Impl::beginActivity):
        (WebCore::UserActivity::Impl::endActivity):
            - nop implementation.
        (WebCore::UserActivity::UserActivity):
            - UserActivity maintains existing interface with hysteresis.
        (WebCore::UserActivity::started):
        (WebCore::UserActivity::stopped):
            - callbacks from HysteresisTimer; forward to Impl.
        * platform/UserActivity.h:
        * platform/mac/UserActivityMac.mm:
        (WebCore::UserActivity::Impl::Impl):
            - UserActivity::Impl, abstraction for NSActivity without added hysteresis.
        (WebCore::UserActivity::Impl::beginActivity):
            - allocate NSActivity.
        (WebCore::UserActivity::Impl::endActivity):
            - release NSActivity.

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

        DocumentLoader should keep maps of ResourceLoaders instead of sets
        https://bugs.webkit.org/show_bug.cgi?id=129388

        Reviewed by Darin Adler.

        For web replay, we need to be able to pull a ResourceLoader instance by
        identifier from the DocumentLoader. This is easy to do if we convert
        ResourceLoaderSet to ResourceLoaderMap, keyed by the loader's identifier.

        Added assertions whenever adding or removing from the map to ensure
        that we don't try to add duplicates or resources with zero identifiers.

        No new tests required. No functionality was added.

        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll):
        (WebCore::setAllDefersLoading):
        (WebCore::areAllLoadersPageCacheAcceptable):
        (WebCore::DocumentLoader::addSubresourceLoader):
        (WebCore::DocumentLoader::removeSubresourceLoader):
        (WebCore::DocumentLoader::addPlugInStreamLoader):
        (WebCore::DocumentLoader::removePlugInStreamLoader):
        (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart):
        * loader/DocumentLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create): Only add the loader
        to the document loader's map if it initialized successfully.
        The old code was probably leaking resource loaders that failed to
        initialize.

        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::scheduleAll):
        (WebCore::unscheduleAll):

2014-03-02  Dirkjan Ochtman  <d.ochtman@activevideo.com>

        Support ENABLE_ENCRYPTED_MEDIA in cmake builds
        https://bugs.webkit.org/show_bug.cgi?id=129575

        Reviewed by Philippe Normand.

        No new tests, only fixes the build.

        * CMakeLists.txt:
        Add support for ENABLE_ENCRYPTED_MEDIA.
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::close):
        Assign nullptr instead of 0 to OwnPtr to appease gcc-4.7.

2014-03-01  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Smart Magnification): Support for iOS
        https://bugs.webkit.org/show_bug.cgi?id=129146
        <rdar://problem/16032668>

        Reviewed by Benjamin Poulain.

        * WebCore.exp.in:
        Add an export.

2014-03-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164929 and r164934.
        http://trac.webkit.org/changeset/164929
        http://trac.webkit.org/changeset/164934
        https://bugs.webkit.org/show_bug.cgi?id=129570

        Caused assertions on two srcset tests (Requested by ap on
        #webkit).

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::isHTMLSpaceOrComma):
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        (WebCore::bestFitSourceForImageAttributes):

2014-03-01  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * html/parser/HTMLParserIdioms.cpp: Removed an unused function.

2014-03-01  David Kilzer  <ddkilzer@apple.com>

        Ensure keySplines is valid in SMIL animations
        <http://webkit.org/b/129547>
        <rdar://problem/15676128>

        Reviewed by Darin Adler.

        Merged from Blink (patch by Philip Rogers):
        https://src.chromium.org/viewvc/blink?revision=156452&view=revision
        http://crbug.com/276111

            This patch fixes a crash in SMIL animations when keySplines are not
            specified. The SMIL spec is clear on this:
            http://www.w3.org/TR/2001/REC-smil-animation-20010904/#AnimFuncCalcMode
            "If there are any errors in the keyTimes specification (bad values,
            too many or too few values), the animation will have no effect."

            This patch simply checks that keyTimes is not empty. Previously,
            splinesCount was set to be m_keySplines.size() + 1 in
            SVGAnimationElement.cpp; this patch changes splinesCount to be equal
            to m_keySplines.size() to make the logic easier to follow and to
            match other checks in SVGAnimationElement::startedActiveInterval.

        Test: svg/animations/animate-keysplines-crash.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::startedActiveInterval):

2014-03-01  Benjamin Poulain  <benjamin@webkit.org>

        Tighten minimumRegisterRequirements()
        https://bugs.webkit.org/show_bug.cgi?id=129538

        Reviewed by Andreas Kling.

        Fix small things that made minimumRegisterRequirements() a little optimistic
        when dealing with attributes.

        Test: fast/selectors/adjacent-descendant-tail-register-requirement.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        Attribute Set does not do value matching, the case sensitive value matching is irrelevant
        The problem is that flag is also used by minimumRegisterRequirements()
        to find if one more register is needed.

        Set the flag to case sensitive to avoid reserving one extra register.

        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        Use a new backtrackingFlag to know if there is a descendant tail, thus a backtracking register
        reserved.
        This is better than using the backtracking action because the backtracking chain could be
        an adjacent chain inside a descendant chain.

        The flags are designed for that, just set one for minimumRegisterRequirements().

        The 2 extra registers for the attribute count and address become limited to all attributes
        except the last one. We don't keep a copy for the last matching, those registers were not needed.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):

2014-03-01  Pratik Solanki  <psolanki@apple.com>

        [iOS] selectionImageForcingBlackText should return autoreleased object
        https://bugs.webkit.org/show_bug.cgi?id=129437
        <rdar://problem/15810384>

        Reviewed by Darin Adler.

        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):

2014-03-01  Yoav Weiss  <yoav@yoav.ws>

        Fix srcset related bugs
        https://bugs.webkit.org/show_bug.cgi?id=129539

        Fixed a bug reported against Blink's srcset implementation at https://code.google.com/p/chromium/issues/detail?id=347998
        When both src and srcset had only 1x descriptors and the DPR was higher than 1, the src's resource was picked.

        Also fixed the invalid descriptor handling, which wasn't aligned with the spec, and therefore was not as forward compatible as it should be.
        Invalid descriptors caused the entire resource to be ignored, rather than just the descriptors themselves.

        Reviewed by Andreas Kling.

        Tests: fast/hidpi/image-srcset-invalid-descriptor.html
               fast/hidpi/image-srcset-src-selection-1x-both.html

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseDescriptors):
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        (WebCore::bestFitSourceForImageAttributes):

2014-03-01  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.

        My previous fix for this problem was incomplete. This continuation of that fix addresses
        the flaw in the original and adds additional lifetime checking so problems can be seen in
        debug builds without a memory debugger.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::assertNotDeleted): Added. Poor man's memory debugging helper.
        (WebCore::InlineBox::~InlineBox): Refactored body into a new function named
        invalidateParentChildList. Added code to update the deletion sentinel to record
        that this object is deleted.
        (WebCore::InlineBox::setHasBadParent): Moved here from header since this debug-only
        feature does not need to be inlined. Added a call to assertNotDeleted.
        (WebCore::InlineBox::invalidateParentChildList): Added. Refactored from the destructor,
        this is used by RenderTextLineBoxes.

        * rendering/InlineBox.h: Added the deletion sentinel, and called it in the parent
        function. Also changed the expansion/setExpansion functions to use the type name "int",
        since we don't use the type name "signed" in the WebKit coding style.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::~InlineFlowBox): Call setHasBadChildList rather than doing the
        setHasBadParent work on children directly, to avoid code duplication.
        (WebCore::InlineFlowBox::setHasBadChildList): Moved here from header. Added code to set
        "has bad parent" on all children, something we previously did only on destruction. Also
        added assertNotDeleted.
        (WebCore::InlineFlowBox::checkConsistency): Added call to assertNotDeleted. Also tweaked
        code style and variable names a little bit.

        * rendering/InlineFlowBox.h: Moved setHasBadChildList out of the header when it's on.
        The empty version for ASSERT_WITH_SECURITY_IMPLICATION_DISABLED is still in the header.

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::invalidateParentChildLists): Call the new
        InlineBox::invalidateParentChildList function instead of calling setHasBadChildList directly.
        The new function checks m_hasBadParent, something we couldn't do here.

2014-03-01  Benjamin Poulain  <benjamin@webkit.org>

        Optimized querySelector(All) when selector contains #id
        https://bugs.webkit.org/show_bug.cgi?id=116502

        Reviewed by Andreas Kling.

        Test: fast/selectors/querySelector-id-filtering.html

        The idea of this patch is to perform querySelector on a subtree
        rooted at the last element with #id matching. For example, if we have the selector
        "#foobar div a", we start by looking for the element with ID foobar in the TreeScope
        cache, and start matching the children from there.

        The idea comes from Rune for
        https://chromium.googlesource.com/chromium/blink/+/1cd83d3588973a02ab15d94b1b05a28620853624
        but the code as diverged too much so it had to be reimplemented specifically for WebKit.

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore::CSSSelectorList::operator=):
        * css/CSSSelectorList.h:
        (WebCore::CSSSelectorList::~CSSSelectorList):
        * css/StyleRule.h:
        (WebCore::StyleRule::wrapperAdoptSelectorList):
        (WebCore::StyleRulePage::wrapperAdoptSelectorList):
        * dom/SelectorQuery.cpp:
        (WebCore::isSingleTagNameSelector):
        (WebCore::isSingleClassNameSelector):
        (WebCore::findIdMatchingType):
        (WebCore::SelectorDataList::SelectorDataList):
        (WebCore::filterRootById):
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::execute):
        (WebCore::SelectorQuery::SelectorQuery):
        (WebCore::SelectorQueryCache::add):
        * dom/SelectorQuery.h:
        (WebCore::SelectorDataList::SelectorData::SelectorData):

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

        Node::compareDocumentPosition leaks memory structure
        https://bugs.webkit.org/show_bug.cgi?id=120244

        Reviewed by Ryosuke Niwa.

        * dom/Node.cpp: (WebCore::Node::compareDocumentPosition): Don't do it.

2014-03-01  David Kilzer  <ddkilzer@apple.com>

        Fix lifetime handling of SVGPropertyTearOffs
        <http://webkit.org/b/129211>
        <rdar://problem/15696025>

        Reviewed by Maciej Stachowiak.

        Merged from Blink (patch by Ojan Vafai):
        https://src.chromium.org/viewvc/blink?revision=157801&view=revision
        http://crbug.com/288771

            -Replace SVGStaticPropertyWithParentTearOff with SVGMatrixTearOff
            since it's only used in that one place. This means we can get rid
            of the templatizing and the method pointer.
            -Change SVGPropertyTearOff to keep track of it's child tearoffs
            and call detachWrapper on its child tearoffs when it's destroyed
            or when it's wrapper is detached.
            -Have SVGPropertyTearOff hold WeakPtrs to the child tearoffs
            to avoid having a cycle.

        Test: svg/transforms/svg-matrix-tearoff-crash.html

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValue):
        * svg/properties/SVGMatrixTearOff.h: Renamed from Source/WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h.
        (WebCore::SVGMatrixTearOff::create):
        (WebCore::SVGMatrixTearOff::commitChange):
        (WebCore::SVGMatrixTearOff::SVGMatrixTearOff):
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::addChild):
        (WebCore::SVGPropertyTearOff::detachChildren):

2014-03-01  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix after r164913.

        * platform/CountedUserActivity.h: Some ports don't (yet) support forwarding headers for WebCore,
        so UserActivity.h should be included as non-forwarding.

2014-03-01  Gavin Barraclough  <barraclough@apple.com>

        Change PageActivityAssertionToken to use a WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=129526

        Reviewed by Sam Weinig.

        PageThrottler effectively implements a bespoke weak pointer mechanism; remove this & just use WeakPtr.

        * page/PageActivityAssertionToken.cpp:
        (WebCore::PageActivityAssertionToken::PageActivityAssertionToken):
        (WebCore::PageActivityAssertionToken::~PageActivityAssertionToken):
            - addActivityToken->incrementActivityCount, removeActivityToken->decrementActivityCount
        * page/PageActivityAssertionToken.h:
            - removed invalidate, made m_throttler a WeakPtr
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - initialize m_weakPtrFactory, m_activityCount.
        (WebCore::PageThrottler::~PageThrottler):
            - removed called to invalidate.
        (WebCore::PageThrottler::startThrottleHysteresisTimer):
            - m_activityTokens.size()->m_activityCount
        (WebCore::PageThrottler::throttleHysteresisTimerFired):
            - m_activityTokens.size()->m_activityCount
        (WebCore::PageThrottler::incrementActivityCount):
            - m_activityTokens.add->++
        (WebCore::PageThrottler::decrementActivityCount):
            - m_activityTokens.remove->--
        * page/PageThrottler.h:
        (WebCore::PageThrottler::weakPtr):
            - replaced HashSet with WeakPtrFactory & count.

2014-03-01  Gavin Barraclough  <barraclough@apple.com>

        Split UserActivity/CountedUserActivity
        https://bugs.webkit.org/show_bug.cgi?id=129520

        Reviewed by Sam Weinig.

        UserActivity currently provides an interface allowing counted, nested calls to enable/disable.
        In some cases it would be easier to use if it were a simpler boolean enabled/disabled interface.

        * WebCore.exp.in:
            - beginActivity->start, endActivity->stop.
        * WebCore.xcodeproj/project.pbxproj:
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
        (WebCore::PageThrottler::~PageThrottler):
        (WebCore::PageThrottler::throttlePage):
        (WebCore::PageThrottler::unthrottlePage):
        (WebCore::PageThrottler::setIsVisuallyIdle):
            - beginActivity->increment, endActivity->decrement.
        * page/PageThrottler.h:
            - UserActivity->CountedUserActivity for m_pageActivity
        * platform/CountedUserActivity.h: Copied from Source/WebCore/platform/UserActivity.h.
        (WebCore::CountedUserActivity::CountedUserActivity):
        (WebCore::CountedUserActivity::increment):
        (WebCore::CountedUserActivity::decrement):
            - Added, provides counted interface to UserActivity.
        * platform/UserActivity.cpp:
        (WebCore::UserActivity::UserActivity):
            - m_count removed
        (WebCore::UserActivity::start):
        (WebCore::UserActivity::stop):
            - beginActivity->start, endActivity->stop, implentation now empty.
        * platform/UserActivity.h:
            - beginActivity->start, endActivity->stop, m_count moved to HAVE(NS_ACTIVITY)
        * platform/mac/UserActivityMac.mm:
        (WebCore::UserActivity::UserActivity):
            - m_count->m_started
        (WebCore::UserActivity::isValid):
            - m_count->m_started
        (WebCore::UserActivity::start):
        (WebCore::UserActivity::stop):
            - beginActivity->start, endActivity->stop, no longer nest


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

        Caller saved registers can be accidentally discarded when clearing the local stack
        https://bugs.webkit.org/show_bug.cgi?id=129532

        Reviewed by Andreas Kling.

        Tests: fast/selectors/tree-modifying-case-insensitive-selectors.html
               fast/selectors/tree-modifying-selectors.html

        StackAllocator::discard() no longer make sense now that we can use caller saved regsiter.
        We should instead discard everything up to the beginning of the local stack.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::popAndDiscardUpTo):

2014-02-28  Andy Estes  <aestes@apple.com>

        [iOS] FrameLoader has a NULL m_progressTracker when initialized with initForSynthesizedDocument()
        https://bugs.webkit.org/show_bug.cgi?id=129534

        Reviewed by Simon Fraser.

        No new tests because TestWebKitAPI does not yet support iOS. See <http://webkit.org/b/129535>.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::initForSynthesizedDocument): Create a FrameProgressTracker.

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

        ASSERT(isMainThread()) hit under platformUserPreferredLanguages() with WebKit1 and WebKit2 in the same process
        https://bugs.webkit.org/show_bug.cgi?id=129528

        Reviewed by Andreas Kling.

        * platform/mac/Language.mm:
        (WebCore::preferredLanguagesMutex):
        (WebCore::preferredLanguages):
        (+[WebLanguageChangeObserver languagePreferencesDidChange:]):
        (WebCore::httpStyleLanguageCode):
        (WebCore::platformUserPreferredLanguages):
        Add a mutex and do an isolated copy of the strings to allow this function to be called from multiple threads.

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

        Crash at ebay.com when viewing auction items at com.apple.WebCore: WebCore::GraphicsContext3D::getExtensions + 10
        https://bugs.webkit.org/show_bug.cgi?id=129523

        Reviewed by Simon Fraser.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Early return if the
        context is pending policy resolution.

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

        Micro-optimize JSNodeOwner::isReachableFromOpaqueRoots().
        <https://webkit.org/b/129518>

        Only do image and audio element specific checks for element nodes.
        Time spent in here goes from 0.8% to 0.5% on DYEB.

        Reviewed by Benjamin Poulain.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):

2014-02-28  Geoffrey Garen  <ggaren@apple.com>

        JSC Assertion failure every time I start Safari (r164846)
        https://bugs.webkit.org/show_bug.cgi?id=129510

        Reviewed by Mark Hahnenberg.

        Take the lock before allocating objects because afterward is too late.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):

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

        Web Inspector: ASSERT in WebCore::JSDOMWindowBase::supportsRichSourceInfo inspecting iOS
        https://bugs.webkit.org/show_bug.cgi?id=129512

        Reviewed by Simon Fraser.

        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):

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

        VisitedLinkStore should be able to invalidate link styles for associated pages
        https://bugs.webkit.org/show_bug.cgi?id=129515

        Reviewed by Dan Bernstein.

        * page/Page.cpp:
        (WebCore::Page::Page):
        Add the VisitedLinkStore if we have one.

        (WebCore::Page::~Page):
        Remove the VisitedLinkStore if we have one.

        * page/VisitedLinkStore.cpp:
        (WebCore::VisitedLinkStore::~VisitedLinkStore):
        Assert that we don't have any pages.

        (WebCore::VisitedLinkStore::addPage):
        Add the page to the set.

        (WebCore::VisitedLinkStore::removePage):
        Remove the page from the set.

        (WebCore::VisitedLinkStore::invalidateStylesForAllLinks):
        Traverse all the pages and invalidate the style for all links.

        (WebCore::VisitedLinkStore::invalidateStylesForLink):
        Traverse all the pages and invalidate the style for a given link.

        * page/VisitedLinkStore.h:
        Add new members.

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

        [iOS][WK2] highlight rects should never big bigger than the view
        https://bugs.webkit.org/show_bug.cgi?id=129472

        Reviewed by Enrica Casucci.

        * WebCore.exp.in:

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

        Turn off margin tiles on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129509
        -and corresponding-
        <rdar://problem/16200383>

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::needsExtendedBackgroundRectForPainting):

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

        Subpixel rendering: Add subpixel support to border type of double, groove, ridge, inset and outset.
        https://bugs.webkit.org/show_bug.cgi?id=129226

        Reviewed by Simon Fraser.

        This is the conversion of double, inset, outset, groove and ridge border type
        painting to support device pixel precision width/height.

        Regression is covered by existing tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/RenderObject.h:

2014-02-28  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Filters should test for area instead of single dimension
        https://bugs.webkit.org/show_bug.cgi?id=123716

        Reviewed by Dirk Schulze.

        A filtered SVG element with a sigle dimension bigger than 5000
        (counting the margin/border) will fail to render. So an element
        with 4000x4000 will render fine, while another with 5000x10
        won't. This patch instead tests against the total element area,
        which fixes such cases.

        It also fixes some layer violations where FilterEffectRenderer and
        RenderSVGResourceFilter were directly accessing the maximum filter
        size in FilterEffect. Since before a somewhat bigger filter would
        be aborted, it required to change the maximum kernel size
        for blur filter (some filters are slower to run than others for
        bigger SVGs).

        Tests: svg/filters/big-height-filter-expected.svg
               svg/filters/big-height-filter.svg
               svg/filters/big-width-filter-expected.svg
               svg/filters/big-width-filter.svg

        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::maxFilterArea): New function, returns the
        maximum allowed element area (currently is 4096 x 4096).
        (WebCore::FilterEffect::isFilterSizeValid): Now it tests for
        element area instead of a single dimension. This code is reused by
        FilterEffectRenderer.
        * platform/graphics/filters/FilterEffect.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::updateBackingStoreRect): Uses the
        new function in FilterEffect to test for valid sizes.
        (WebCore::FilterEffectRendererHelper::beginFilterEffect): Same case.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::fitsInMaximumImageSize): Test
        for maximum area and properly changes the scale of transformed
        element to fit.

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

        [Mac, iOS] Incorrect ordering of construction arguments for out-of-band text elements
        https://bugs.webkit.org/show_bug.cgi?id=129501
        <rdar://problem/16198587>

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Correct order of arguments
        to PlatformTextTrack.

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

        Properly clear m_logicallyLastRun to remove use-after-free possibility
        https://bugs.webkit.org/show_bug.cgi?id=129489

        Reviewed by David Hyatt.

        A use-after-free issue was caught in Blink because m_logicallyLastRun
        is not cleared when the item it points to is deleted. Clearing it
        turns the use-after-free into a segfault, and prevents any future
        use-after-frees from happening.

        * platform/text/BidiRunList.h:
        (WebCore::BidiRunList<Run>::deleteRuns):

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

        [Mac] Disambiguate calls to [[window contentView] layer] and [... setLayer:]
        https://bugs.webkit.org/show_bug.cgi?id=129491

        Reviewed by Alexey Proskuryakov.

        -[NSWindow contentView] returns a bare id, leading to ambiguity when calling
        certain methods, including -layer and -setLayer:. Resolve the ambiguity by
        explicitly casting the -contentView call to a NSView*.

        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController setupVideoOverlay:]):
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController windowDidExitFullscreen]):

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

        MouseEvent.offsetX/Y should just return 0,0 for simulated clicks.
        <https://webkit.org/b/129477>

        There's no need to compute the exact target-relative coordinates for
        simulated mouse events, e.g those fired by HTMLElement.click().

        The offsetX/Y properties are not supported by Firefox.

        Test: fast/events/relative-offset-of-simulated-click.html

        Reviewed by Alexey Proskuryakov.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::offsetX):
        (WebCore::MouseRelatedEvent::offsetY):

2014-02-27  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix positioning grid items using named grid lines/areas
        https://bugs.webkit.org/show_bug.cgi?id=129372

        Reviewed by Darin Adler.

        Our code was assuming that a <custom-ident> in
        -webkit-grid-{column|row}-{start|end} and
        -webkit-grid-{column|row} was always a grid area name. That's
        wrong because the <custom-ident> could be also a explicitly named
        grid line or the an implicitly named grid line created by a grid
        area definition.

        The style resolution code was not correct either. This patch fixes
        it so it now matches the spec, which means that:
        - first we try to match any existing grid area.
        - then if there is a named grid line with the name
        <custom-ident>-{start|end} for -webkit-grid-{column|row}-{start|end}
        defined before the grid area then we use it instead of the grid
        area.
        - otherwise if there is a named grid line we resolve to the first such line.
        - otherwise we treat it as 'auto'.

        Fixing this uncovered a bug in GridPosition, we were not using the
        name of the stored grid area to check if two GridPositions were
        the same.

        Tests: fast/css-grid-layout/grid-item-position-changed-dynamic.html
               fast/css-grid-layout/named-grid-lines-with-named-grid-areas-resolution.html

        * css/StyleResolver.cpp:
        (WebCore::gridLineDefinedBeforeGridArea): New function to check if
        a given named grid line was defined before an implicit named grid
        line created by a grid area definition.
        (WebCore::StyleResolver::adjustNamedGridItemPosition): New
        function that adjusts the position of a GridPosition parsed as a
        grid area.
        (WebCore::StyleResolver::adjustGridItemPosition): Use the new
        function adjustNamedGridItemPosition to adjust the positions of
        named grid lines.
        * css/StyleResolver.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveNamedGridLinePositionFromStyle): Use GridPosition:: namespace.
        (WebCore::RenderGrid::resolveGridPositionFromStyle): Ditto.
        (WebCore::RenderGrid::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition): Ditto.
        * rendering/RenderGrid.h:
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::adjustGridPositionForRowEndColumnEndSide): Moved from RenderGrid.cpp.
        (WebCore::GridPosition::adjustGridPositionForSide): Ditto.
        (WebCore::GridPosition::operator==): Use the named grid line to check equality.

2014-02-28  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Update line segments for ShapeInside only if the new line is wide enough
        https://bugs.webkit.org/show_bug.cgi?id=129461

        Reviewed by David Hyatt.

        Shape-inside can make a line only narrower than the original line width, thus we don't need
        to update the line/shape segments in fitBelowFloats for every single line inside shape-inside.
        This patch adds a helper function, which updates the line segments, furthermore it updates the
        line segments only when the content would fit without the shape.

        No new tests, no behavior change.

        * rendering/line/BreakingContextInlineHeaders.h: Use new helper.
        (WebCore::updateSegmentsForShapes):
        * rendering/line/LineWidth.cpp: Use new helper.
        (WebCore::LineWidth::updateLineSegment): Add new helper.
        (WebCore::LineWidth::fitBelowFloats):

2014-02-28  Mario Sanchez Prada  <mario.prada@samsung.com>

        paragraphs with different directionality in textarea with unicode-bidi: plaintext are aligned the same
        https://bugs.webkit.org/show_bug.cgi?id=71194

        Reviewed by David Hyatt.

        Merged from Blink r157263 by <igor.o@sisa.samsung.com>
        <https://src.chromium.org/viewvc/blink?revision=157263&view=revision>

        In the css3-text spec (http://www.w3.org/TR/css3-text/#bidi-linebox):

        The start and end edges of a line box are determined by the inline
        base direction of the line box. In most cases, this is given by
        its containing block's computed ‘direction’. However if its
        containing block has ‘unicode-bidi: plaintext’, the inline base
        direction the line box must be determined by the base direction of
        the bidi paragraph to which it belongs: that is, the bidi
        paragraph for which the line box holds content.

        This patch just implements the behavior described above modifying
        updateLogicalWidthForAlignment and setting the bidi level of the
        RootInlineBox.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::deleteEllipsisLineBoxes):
        (WebCore::RenderBlockFlow::checkLinesForTextOverflow):
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):

2014-02-28  Jochen Eisinger  <jochen@chromium.org>

        Update meta-referrer behavior for invalid policies
        https://bugs.webkit.org/show_bug.cgi?id=129475

        This patch aligns the behavior with the CSP 1.1 referrer directive,
        where the fallback for an invalid value is the "never" policy.

        Original patch from Mike West: https://src.chromium.org/viewvc/blink?view=rev&revision=165627

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/security/referrer-policy-invalid.html

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

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

        SubresourceLoader::didFinishLoading() should not assert when a decode error occurs
        https://bugs.webkit.org/show_bug.cgi?id=127029

        Reviewed by Darin Adler.

        SubresourceLoader::didFinishLoading() can be called for a resource (e.g. an image) that
        failed to be decoded or, in the case of an image, whose estimated decoded size exceeds
        the maximum decoded size (Settings::maximumDecodedImageSize()).

        Test: fast/images/decoded-size-exceeds-max-decoded-size.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):

2014-02-28  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        ASSERTION FAILED: roundedIntPoint(rendererMappedResult) == roundedIntPoint(result) in WebCore::RenderGeometryMap::mapToContainer
        https://bugs.webkit.org/show_bug.cgi?id=119626

        SVGRenderSupport::mapLocalToContainer() was trying to apply transforms
        in the incorrect order. Specifically, it would attempt to apply its
        localToParentTransform before its localToBorderBoxTransform. This
        was causing an ASSERT to fail when the computed transforms didn't
        match up to those computed by RenderGeometryMap.

        Backported from Blink: https://codereview.chromium.org/143363004

        Reviewed by Simon Fraser.

        Test: svg/transforms/svg-geometry-crash.html

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):

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

        [CSSRegions] ASSERTION FAILED: !m_regionsInvalidated in RenderFlowThread::regionAtBlockOffset
        https://bugs.webkit.org/show_bug.cgi?id=129371

        Reviewed by Andrei Bucur.

        regionAtBlockOffset method is meant to be used after the flow thread validated
        its region chain, otherwise we cannot rely on regionAtBlockOffset to determine correctly
        the target region based on the offset in flow thread coordinates.

        When the video element is collected in a named flow and displayed in a region, we ensure
        that the region's decorations are taken into account to properly position the video.
        However, we have to do that only if the named flow regions are validated.

        I changed the method cachedRegionForCompositedLayer to check only the "cached" region
        for a layer and not update the layer to region mappings before returning the region.
        Because method cachedRegionForCompositedLayer does not update the region - layer mappings,
        the code does not call regionAtBlockOffset in situations where the region chain is not validated yet.

        Test: compositing/regions/video-in-overflow-region.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::getLayerListForRegion): Make it a getter that relies on
        cached information and refrain from updating the mappings. Make it const too.
        (WebCore::RenderFlowThread::cachedRegionForCompositedLayer):
        * rendering/RenderFlowThread.h:

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

        [GTK] Finetune captions menu as per design team
        https://bugs.webkit.org/show_bug.cgi?id=129432

        Reviewed by Eric Carlson.

        Some design fine tuning of the captions dialog was required.
        
        No new tests, current suffice.

        * Modules/mediacontrols/mediaControlsApple.js:
        Added out class.
        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.buildCaptionMenu): Setting out class when
        menu is going to show overlap the panel right border.
        * css/mediaControlsGtk.css:
        (video::-webkit-media-controls-closed-captions-container.out):
        Setting all borders to 5px;
        (video::-webkit-media-controls-closed-captions-container h3):
        Reduced font size and increasing top padding.
        (video::-webkit-media-controls-closed-captions-container ul):
        Increased top padding.

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

        Element::attributeChanged shouldn't do any work when attribute value didn't change
        https://bugs.webkit.org/show_bug.cgi?id=129467

        Reviewed by Geoffrey Garen.

        Exit early in childrenChanged when the attribute value didn't change.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::didAddAttribute):
        (WebCore::Element::didModifyAttribute):
        (WebCore::Element::didRemoveAttribute):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * dom/StyledElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::attributeChanged):
        * mathml/MathMLElement.h:
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::attributeChanged):
        * mathml/MathMLSelectElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElement.h:

2014-02-27  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Remove duplicated keyboard string key from keyMap
        https://bugs.webkit.org/show_bug.cgi?id=129469

        Reviewed by Gyuyoung Kim.

        "Down" key is duplicated in keyMap().

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::createKeyMap):

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

        Unify the three call sites of SelectorQueryCache
        https://bugs.webkit.org/show_bug.cgi?id=129249

        Reviewed by Andreas Kling.

        The three call sites of SelectorQueryCache were doing the exact same thing.
        That code is mvoed to a new function Document::selectorQueryForString().

        Also use String instead of AtomicString for querySelector() and querySelectorAll().
        This prevent the call sites from creating AtomicString just for the time of the call.
        This causes a tiny slow down on microbenchmarks that continuously query the same string
        but has no negative impact on realistic/good test cases (and the bindings are simplified).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::querySelector):
        (WebCore::ContainerNode::querySelectorAll):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::selectorQueryForString):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::webkitMatchesSelector):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQueryCache::add):
        * dom/SelectorQuery.h:

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

        JSC ignores the extra memory cost of HTMLCollection after a major GC
        https://bugs.webkit.org/show_bug.cgi?id=129450

        Reviewed by Andreas Kling.

        Report the extra memory cost of HTMLCollection to JSC.

        Unfortunately, the existing mechanism to report the extra memory cost in toJS is insufficient for
        HTMLCollection since collection caches are populated later when HTMLCollection is accessed. Also,
        the extra memory cost reported by Heap::reportExtraMemoryCost will be thrown away after a major GC.

        To work around this limitation, added a visitor.reportExtraMemoryUsage call inside visitChildren
        for interfaces with a newly added ReportExtraMemoryCost IDL extension flag to report the extra cost.

        Since we may need to generate visitChildren when this flag is set, we can't automatically detect
        and generate calls using C++ template as done in r148648.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webaudio/AudioBuffer.idl:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceNeedsVisitChildren):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::toJS):
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.cpp: Added.
        (WebCore::reportExtraMemoryCostForCollectionIndexCache):
        * dom/CollectionIndexCache.h:
        (WebCore::CollectionIndexCache::memoryCost):
        (WebCore::NodeType>::CollectionIndexCache):
        (WebCore::NodeType>::nodeCount):
        (WebCore::NodeType>::computeNodeCountUpdatingListCache):
        (WebCore::NodeType>::nodeAt):
        (WebCore::NodeType>::invalidate):
        * dom/DOMAllInOne.cpp:
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::memoryCost):
        * dom/LiveNodeList.h:
        * dom/NodeList.h:
        (WebCore::NodeList::memoryCost):
        * dom/NodeList.idl:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::updateNamedElementCache):
        * html/HTMLCollection.h:
        (WebCore::CollectionNamedElementCache::didPopulate):
        (WebCore::CollectionNamedElementCache::memoryCost):
        (WebCore::CollectionNamedElementCache::find):
        (WebCore::HTMLCollection::memoryCost):
        * html/HTMLCollection.idl:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache):

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

        Compile attribute value matching
        https://bugs.webkit.org/show_bug.cgi?id=129228

        Reviewed by Geoffrey Garen.

        Add support for compiling value matching when matching attributes in Selector.
        This patch only adds exact matching, the other cases will follow.

        There is a little infrastructure changes since FunctionCall now needs to support
        calls taking 2 arguments. The fun begins when the arguments are not in the right
        registers and need to be moved to the right place. Otherwise the code is straightforward.

        In SelectorCompiler, it is necessary to handle two different cases of matching: case sensitive
        and case insensitive. The choice is done in part at compilation time by asking HTMLDocument
        if the name filter can include case insensitive attribute. The other part is done at runtime
        by querying the element for its type and document.

        Test: fast/selectors/case-insensitive-value-matching.html

        * css/SelectorChecker.cpp:
        (WebCore::attributeValueMatches): Null values matching should never happen, when an attribute
        has no value, its value is empty.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::FunctionCall):
        Add support for calls with two arguments.
        (WebCore::FunctionCall::setOneArgument):
        (WebCore::FunctionCall::setTwoArguments):
        (WebCore::FunctionCall::swapArguments):
        Here we need to swap two registers, but we cannot allocate a new register (because the context
        of the function call may have taken all the available registers already).

        On x86, the solution is simple, we can swap the two registers without side effects.

        On other platforms, it is a little more complex. If there is any available register, we can just
        use it as a temporary to make the swap.
        If there are no available registers, we know that all the registers are taken. Since swapArguments()
        was called after pushing all the arguments on the stack, we can safely trash the value of any of those.
        We take the first available register that is not a function argument and use it as a temporary.

        (WebCore::FunctionCall::prepareAndCall):
        This is the fun part, we have two registers where the values must go before the function call. The values
        can be in any combination of the allocated registers. The code here needs to move the two values to
        their target register while avoiding conflicts.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::AttributeMatchingInfo::AttributeMatchingInfo):
        (WebCore::SelectorCompiler::AttributeMatchingInfo::canDefaultToCaseSensitiveValueMatch):
        (WebCore::SelectorCompiler::AttributeMatchingInfo::selector):
        The value of HTMLDocument::isCaseSensitiveAttribute is needed at compilation time to compute the number
        of required registers. As a result, we need to keep it along in the selector fragment.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::attributeNameTestingRequiresNamespaceRegister):
        (WebCore::SelectorCompiler::attributeValueTestingRequiresExtraRegister):
        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle):
        (WebCore::SelectorCompiler::canMatchStyleAttribute):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSynchronizeStyleAttribute):
        (WebCore::SelectorCompiler::canMatchAnimatableSVGAttribute):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSynchronizeAllAnimatedSVGAttribute):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeMatching):
        The matching code is moved in a local scope. This is done to recover the register of qualifiedNameImpl
        before doing any value matching. That register can then be used to store the expected value when matching
        an attribute value.
        It is unfortunate there is so much register pressure in this part.

        Value matching is done outside the loop. The idea is to keep the loop really small since in the vast majority
        of cases, name matching fails.
        If the value matching fails, we jump back into the tight loop.

        This is not ideal in all situation. For example trivial name matching with trivial value matching should
        be done in loop. There is a FIXME to improve those cases later.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueMatching):
        (WebCore::SelectorCompiler::testIsHTMLClassOnDocument):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):
        In the case sensitive branch, things are really simple. We have to AtomicStringImpl pointers, if they
        don't match, it is a failure.

        The case sensitive branch start by comparing the pointers in case the values are equal. This is a common
        case and it simplifies the cases for SVG, XHTML, etc.
        If the two values are not equal, we must first find if the context requires case insensitive comparison
        (HTMLElement in HTMLDocument). If the conditions require case insensitive matching, we then fall back
        to a function call.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest):
        * dom/Attribute.h:
        (WebCore::Attribute::valueMemoryOffset):
        * dom/Document.h:
        (WebCore::Document::documentClassesMemoryOffset):
        (WebCore::Document::isHTMLDocumentClassFlag):
        * dom/Node.h:
        (WebCore::Node::treeScopeMemoryOffset):
        * dom/TreeScope.h:
        (WebCore::TreeScope::documentScopeMemoryOffset):

2014-02-27  Ryuan Choi  <ryuan.choi@samsung.com>

        Build break when disabled CSS_GRID_LAYOUT
        https://bugs.webkit.org/show_bug.cgi?id=129459

        Reviewed by Gyuyoung Kim.

        * css/CSSValue.h: Added guards of CSS_GRID_LAYOUT for GridTemplateAreasClass.

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

        text-decoration-skip: ink does not skip over SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=128936

        Reviewed by Darin Adler.

        When drawing glyphs in an SVG font, the glyphs are converted to paths and then filled. This patch moves
        the glyph -> path conversion into a helper class, GlyphToPathTranslator, and creates an implementation
        for the SVG drawing code. Once this helper class is created, it can be used to trace paths in order
        to make underlines skip over SVG glyphs. This helper class also has an implementation for non-SVG glyphs,
        which allows for the glyph tracing code to be paramaterized over the implementation of the helper class
        rather than if the FontData itself is SVG or not.

        Tests: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-svg.html

        * platform/graphics/Font.h:
        (WebCore::GlyphToPathTranslator::~GlyphToPathTranslator): Virtual implementation of helper class
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::Path): Created constructor that takes a RefPtr<CGMutablePathRef>
        * platform/graphics/Path.h:
        * platform/graphics/TextRun.h: Give RenderingContext a factory function to create the helper class
        instance
        * platform/graphics/mac/FontMac.mm: Implementation of helper class used for skipping underlines on
        regular (CoreText) glyphs
        (WebCore::MacGlyphToPathTranslator::MacGlyphToPathTranslator):
        (WebCore::MacGlyphToPathTranslator::moveToNextValidGlyph):
        (WebCore::MacGlyphToPathTranslator::incrementIndex):
        (WebCore::Font::dashesForIntersectionsWithRect): Call the relevant factory function, and use it
        to successively generate Paths
        * rendering/svg/SVGTextRunRenderingContext.cpp: Implementation of helper class used for SVG fonts
        (WebCore::SVGGlyphToPathTranslator::SVGGlyphToPathTranslator):
        (WebCore::SVGGlyphToPathTranslator::moveToNextValidGlyph):
        (WebCore::SVGGlyphToPathTranslator::incrementIndex):
        (WebCore::SVGTextRunRenderingContext::createGlyphToPathTranslator):
        (WebCore::SVGTextRunRenderingContext::drawSVGGlyphs): Use the above implementation
        * rendering/svg/SVGTextRunRenderingContext.h: Factory function declaration

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

        [WebRTC] Removing MediaConstraints argument from RTCPeerConnection addStream, updateIce methods and constructor
        https://bugs.webkit.org/show_bug.cgi?id=129449

        Reviewed by Eric Carlson.

        According to WebRTC editor's draft, MediaConstraints will no longer be an argument of those methods and
        constructor.

        Existing tests were updated.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::updateIce):
        (WebCore::RTCPeerConnection::addStream):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * bindings/js/JSRTCPeerConnectionCustom.cpp:
        (WebCore::JSRTCPeerConnectionConstructor::constructJSRTCPeerConnection):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::initialize):
        (WebCore::RTCPeerConnectionHandlerMock::updateIce):
        (WebCore::RTCPeerConnectionHandlerMock::addStream):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

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

        [CSS Regions] Move named-flow specific method decorationsClipRectForBoxInRegion to RenderNamedFlowThread
        https://bugs.webkit.org/show_bug.cgi?id=129428

        Reviewed by Andreas Kling.

        Since the decorationsClipRectForBoxInRegion method is a named flow specific method, it makes
        sense to be in the named flow specific class, RenderNamedFlowThread, instead of the more
        generic RenderFlowThread.

        No new tests required. No new functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderFlowThread.cpp:
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::decorationsClipRectForBoxInNamedFlowFragment):
        * rendering/RenderNamedFlowThread.h:

2014-02-27  Zoltan Horvath  <zoltan@webkit.org>

        Avoid calling logicalLeftOffsetForLine 2 times in LineWidth::fitBelowFloats
        https://bugs.webkit.org/show_bug.cgi?id=129433

        Reviewed by Darin Adler.

        This change updates fitBelowFloats and its helpers to call RenderBlock::logicalLeftOffsetForLine only once.

        No new tests, no behavior change.

        * rendering/line/LineWidth.cpp:
        (WebCore::availableWidthAtOffset):
        (WebCore::LineWidth::updateLineDimension):
        (WebCore::LineWidth::wrapNextToShapeOutside):
        (WebCore::LineWidth::fitBelowFloats):
        * rendering/line/LineWidth.h:

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

        Micro-optimize elementAffectsDirectionality().
        <https://webkit.org/b/129444>

        Tweak this function to skip an unnecessary bit check and use
        fastHasAttribute() instead of hasAttribute() for looking up dirAttr.

        ~1% speedup on DYEB/AngularJS.

        Reviewed by Ryosuke Niwa.

        * html/HTMLElement.cpp:
        (WebCore::elementAffectsDirectionality):

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

        Web Inspector: model tests should use a special Test.html inspector page
        https://bugs.webkit.org/show_bug.cgi?id=129190

        Reviewed by Timothy Hatcher.

        Convert InspectorController::isUnderTest() into a flag, and expose an
        Internals method so it can be set by the test before opening the inspector.

        Test: inspector/test-harness-trivially-works.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::evaluateForTestInFrontend):
        * inspector/InspectorController.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setInspectorIsUnderTest): Added.
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Unreviewed build fix after r164824.

        Accidentally re-added some code that was removed.

        * page/ContentSecurityPolicy.cpp:

2014-02-26  Alex Christensen  <achristensen@webkit.org>

        Compile fix when not using TEXTURE_MAPPER_GL.
        https://bugs.webkit.org/show_bug.cgi?id=129417

        Reviewed by Darin Adler.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        Protect platformCreateAccelerated with USE(TEXTURE_MAPPER_GL).

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

        Web Inspector: JSContext inspection should report exceptions in the console
        https://bugs.webkit.org/show_bug.cgi?id=128776

        Reviewed by Timothy Hatcher.

        Include some clean up of ConsoleMessage and ScriptCallStack construction.

        Covered by existing tests.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        Simplify code now that createStackTraceFromException handles it.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
        ScriptCallStack can give us the first non-native callframe.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

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

        Remove FeatureObserver.
        <https://webkit.org/b/129439>

        This code was only used by the Chromium port and nobody else is
        making use of it.

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/EventTarget.h:
        * html/ColorInputType.cpp:
        * html/ColorInputType.h:
        * html/DateInputType.cpp:
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        * html/DateTimeLocalInputType.h:
        * html/EmailInputType.cpp:
        * html/EmailInputType.h:
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::create):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::parseAttribute):
        * html/InputType.cpp:
        * html/InputType.h:
        * html/MonthInputType.cpp:
        * html/MonthInputType.h:
        * html/NumberInputType.cpp:
        * html/NumberInputType.h:
        * html/RangeInputType.cpp:
        * html/RangeInputType.h:
        * html/SearchInputType.cpp:
        * html/SearchInputType.h:
        * html/TelephoneInputType.cpp:
        * html/TelephoneInputType.h:
        * html/TextInputType.cpp:
        * html/TextInputType.h:
        * html/TimeInputType.cpp:
        * html/TimeInputType.h:
        * html/URLInputType.cpp:
        * html/URLInputType.h:
        * html/WeekInputType.cpp:
        * html/WeekInputType.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * page/FeatureObserver.cpp: Removed.
        * page/FeatureObserver.h: Removed.
        * page/Page.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):

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

        speechSynthesis.speak of a zero length utterance kills future speech
        https://bugs.webkit.org/show_bug.cgi?id=129403

        Reviewed by Mario Sanchez Prada.

        Empty length strings may choke a synthesizer and result in didFinishSpeaking not being called. 
        The WebKit code should be proactive about screening out empty length strings.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-speak-empty-string.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::startSpeakingImmediately):

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

        Unreviewed, rolling out r164783.
        http://trac.webkit.org/changeset/164783
        https://bugs.webkit.org/show_bug.cgi?id=129425

        Broke number of multicol tests (Requested by anttik on
        #webkit).

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

2014-02-27  Antoine Quint  <graouts@webkit.org>

        Respect SVG fragment identifiers in <img> src attribute
        https://bugs.webkit.org/show_bug.cgi?id=129387

        Reviewed by Antti Koivisto.

        Test: svg/css/svg-resource-fragment-identifier-img-src.html

        When providing an SVG image for a given renderer, check that the URL used to load
        that image is taken into account in case it featured a fragment identifier, ensuring
        that the CSS :target pseudo-class is correctly handled for SVG resources. This patch
        is specific to <img> elements, specific support will also need to be added for various
        CSS properties that support SVG images.

        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageForRenderer):
        Check if the provided renderer is attached to an <img> element and, if so, pass the
        resolved <img> source URL, taking into account srcset, to the SVGImageForContainer.

        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::setURL):
        Trigger the FrameView machinery to ensure that the :target pseudo-class is respected
        should the provided URL feature a fragment identifier.

        * svg/graphics/SVGImageForContainer.h:
        Declare the new setURL() method.

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

        [ATK] Fix style errors in enum members
        https://bugs.webkit.org/show_bug.cgi?id=129421

        Reviewed by Mario Sanchez Prada.

        No new tests. No new functionality.

        Enum members should use InterCaps with an initial capital letter.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getInterfaceMaskFromObject):

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

        [CSS Blending] Parse and implement the -webkit-isolation CSS property.

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

        Reviewed by Dirk Schulze.

        Parse and implement -webkit-isolation, part of the CSS Blending and Compositing spec.
        This patch adds functionality for HTML and SVG.
        -webkit-isolation: isolate restricts any child elements from blending with any of the content outside the isolated parent element.

        Tests: css3/compositing/isolation-isolate-blended-child.html
               css3/compositing/isolation-parsing.html
               css3/compositing/svg-isolation-default.html
               css3/compositing/svg-isolation-isolated-group.html
               css3/compositing/svg-isolation-simple.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 Isolation):
        * css/CSSPropertyNames.in: Add -webkit-isolation.
        * css/CSSValueKeywords.in: Add the isolate value.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Explicitly set isolation:isolate to create a stacking context.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayerRepaint): Changing isolation should trigger a repaint.
        * rendering/style/RenderStyle.h: Setters and getters for isolation.
        * rendering/style/RenderStyleConstants.h: Add Isolation enum.
        * rendering/style/StyleRareNonInheritedData.cpp: Add m_isolation.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent): If isolated, paint in a transparency layer.

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

        [ATK] Utilize AtkTableCell to expose directly AccessibilityTableCell to AT
        https://bugs.webkit.org/show_bug.cgi?id=129250

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/table-scope.html

        Exposing AtkTableCell to AT. Implementing possibility to get column headers and row headers
        as an array of cells.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp: Added.
        (convertToGPtrArray):
        (core):
        (webkitAccessibleTableCellGetColumnHeaderCells):
        (webkitAccessibleTableCellGetRowHeaderCells):
        (webkitAccessibleTableCellInterfaceInit):
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.h: Added.
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getInterfaceMaskFromObject):

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

        Improving containing column block determination
        https://bugs.webkit.org/show_bug.cgi?id=125449

        Reviewed by Darin Adler.

        Making sure that the containing column block of any elements
        can not be oneself.

        Test: fast/css/crash-on-column-splitting.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::containingColumnsBlock):
        (WebCore::RenderBlock::splitFlow):

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

        [GTK] Improve JavaScript multimedia controls
        https://bugs.webkit.org/show_bug.cgi?id=129044

        Reviewed by Jer Noble.

        After webkit.org/b/123097 a follow up was needed to improve
        accessibily and some other cosmetic problems, like cleaner CSS and
        new missing baselines.

        No new tests because of no new functionality.

        * Modules/mediacontrols/mediaControlsApple.js:
        Added hiding class name.
        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.createControls): Set remaining time as
        hidden by default and turned volumebox hidden into hiding.
        (ControllerGtk.prototype.updateTime): Simplified the hiding and
        showing by removing the show class and using hidden only.
        (ControllerGtk.prototype.handleMuteButtonMouseOver):
        (ControllerGtk.prototype.handleVolumeBoxMouseOut): Turned hidden
        into hiding.
        (ControllerGtk.prototype.updateReadyState): Changed coding style
        and added down class for the panel too.
        (ControllerGtk.prototype.updatePlaying): Change for coding style
        coherence.
        (ControllerGtk.prototype.handleCaptionButtonClicked): Call
        handleCaptionButtonShowMenu.
        (ControllerGtk.prototype.handleCaptionButtonMouseOver): Call
        handleCaptionButtonShowMenu.
        (ControllerGtk.prototype.handleCaptionButtonShowMenu): Created
        with the former behavior of handleCaptionButtonMouseOver.
        * css/mediaControlsGtk.css:
        (.hidden): Set display none for all objects with hidden class.
        (audio::-webkit-media-controls-panel *:focus):
        (audio::-webkit-media-controls-panel.down *:focus): Added gradient
        for the active and focus status.
        (audio::-webkit-media-controls-time-remaining-display)
        (video::-webkit-media-controls-time-remaining-display): Set
        display block.
        (audio::-webkit-media-controls-volume-slider-container)
        (video::-webkit-media-controls-volume-slider-container): Set
        display flex.
        (video::-webkit-media-controls-volume-slider-container.hiding):
        Changed from hidden.
        (video::-webkit-media-controls-panel .hiding.down): Changed from
        hidden.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaButton): Returning true to
        allow CSS painting the gradient.

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

        Unreviewed. Fixing the GTK build fix after r164757.

        * platform/network/NetworkStateNotifier.cpp: r164757 introduced a layering violation by including
        the Settings.h header. The use of that class is guarded by PLATFORM(IOS), so the header inclusion
        should be guarded as well.

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

        Extract named items caches in HTMLCollection as a class
        https://bugs.webkit.org/show_bug.cgi?id=129365

        Reviewed by Antti Koivisto.

        Extracted CollectionNamedElementCache, like CollectionIndexCache, out of HTMLCollection.
        We can move more named item related functions into this class in the future.

        HTMLCollection's member variables m_isNameCacheValid, m_idCache, and m_nameCache were replaced by
        a single unique_ptr that holds an instance of CollectionNamedElementCache since this object rarely
        exists in most HTMLCollections.

        Also removed m_isItemRefElementsCacheValid since it was only used by Microdata API removed in r153772
        and renamed a whole bunch of member functions and variables for consistency.

        * dom/Document.cpp:
        (WebCore::Document::collectionCachedIdNameMap):
        (WebCore::Document::collectionWillClearIdNameMap):
        * dom/Document.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedItemWithIndex):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::invalidateNamedElementCache): Renamed from invalidateIdNameCacheMaps.
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNamedElementCache): Renamed from updateNameCache.
        (WebCore::HTMLCollection::namedItems):

        * html/HTMLCollection.h:
        (WebCore::CollectionNamedElementCache::findElementsWithId): Renamed from HTMLCollection::idCache.
        (WebCore::CollectionNamedElementCache::findElementsWithName): Renamed from HTMLCollection::nameCache.
        (WebCore::CollectionNamedElementCache::appendIdCache): Moved from HTMLCollection.
        (WebCore::CollectionNamedElementCache::appendNameCache): Ditto.
        (WebCore::CollectionNamedElementCache::find): Ditto.
        (WebCore::CollectionNamedElementCache::append): Ditto.

        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::hasNamedElementCache): Renamed from hasIdNameCache.
        (WebCore::HTMLCollection::createNameItemCache): Added.
        (WebCore::HTMLCollection::namedItemCaches): Added.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache):
        * html/HTMLFormControlsCollection.h:

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

        Indenting an indented image element resulted in an extra indentation
        https://bugs.webkit.org/show_bug.cgi?id=129201

        Reviewed by Enrica Casucci.

        The bug was caused by endOfParagraph returning a position at the beginning of a block when the position
        passed into the function was at the beginning of the block. Consider the following DOM:
        <blockquote><img></blockquote>

        When endOfParagraph is called on (blockquote, 0), the condition r->isBR() || isBlock(n) in endOfParagraph
        matches immediately on startNode and it returns (blockquote, 0) again.

        This resulted in moveParagraphWithClones invoked by indentIntoBlockquote to erroneously clone the inner
        blockquote. Worked around this bug in ApplyBlockElementCommand::formatSelection by checking this specific
        condition and moving the position to the end of the block. Unfortunately, a lot of existing code depends
        on the current behavior of endOfParagraph so fixing the function itself was not possible.

        There was another bug in indentIntoBlockquote to incorrectly insert a new blockquote into the existing
        blockquote due to the code introduced in r99594 to avoid inserting before the root editable element.
        Since this happens only if outerBlock is the root editable element, which is nodeToSplitTo or an ancestor
        of nodeToSplitTo, explicitly look for this condition.

        Test: editing/execCommand/indent-img-twice.html

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection):
        (WebCore::isNewLineAtPosition):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):
        * editing/VisibleUnits.cpp:
        (WebCore::endOfParagraph): Added a FIXME.

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

        Fix two assertions/crashes in compositing code
        https://bugs.webkit.org/show_bug.cgi?id=129414

        Reviewed by Dean Jackson.

        Fix two issues introduced in r164759.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers): Don't call
        ourselves recursively!
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer): We call this
        function unconditionally on layer teardown, so this assertion is bogus.

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

        Fix the build with some compiler configurations.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):

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

        Ranges given to createMarkupInternal might not be canonicalized
        https://bugs.webkit.org/show_bug.cgi?id=129408

        Reviewed by Ryosuke Niwa.

        When WebKit clients (such as Mail) call WKWebArchiveCreateFromRange() with a range,
        that range is not necessarily canonicalized. Therefore, comparing it for equality
        with a canonicalized range might return a false negative. Instead, we should compare
        canonicalized ranges.

        No new tests because this codepath will only be reached via SPI.

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

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

        [iOS WebKit2] Form controls handling: implement date and time controls.
        https://bugs.webkit.org/show_bug.cgi?id=129344

        Reviewed by Simon Fraser and Joseph Pecoraro.

        Adding one localizable string.

        * English.lproj/Localizable.strings:

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

        Prepare for overflow scrolling nodes in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=129398

        Reviewed by Tim Horton.

        Lay some groundwork for overflow:scrolling nodes in the scrolling tree.
        Change terminology to refer to "scroll-coordinatored" layers now, not just viewport-constrained
        layers.
        
        A given layer can be both viewport-constrained and overflow-scrolling (e.g. position:fixed,
        overflow:scroll), so handle that in RenderLayerBacking, and use some "reason" flags
        in RenderLayerCompositor.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollLayerID): Rename
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode): Remove invalid assertion.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateScrollingLayers): Simplify the logic with
        an early return.
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        Allow a layer to play both viewport-constrained and scrolling roles
        in the scrolling tree.
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::viewportConstrainedNodeID):
        (WebCore::RenderLayerBacking::setViewportConstrainedNodeID):
        (WebCore::RenderLayerBacking::scrollingNodeID):
        (WebCore::RenderLayerBacking::setScrollingNodeID):
        (WebCore::RenderLayerBacking::scrollingNodeIDForChildren):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged):
        (WebCore::RenderLayerCompositor::clearBackingForLayerIncludingDescendants):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore):
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::requiresCompositingForScrolling):
        (WebCore::isViewportConstrainedFixedOrStickyLayer):
        (WebCore::isMainFrameScrollingOrOverflowScrolling):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):
        (WebCore::nearestScrollCoordinatedAncestor):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayer):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        * rendering/RenderLayerCompositor.h:

2014-02-26  Andy Estes  <aestes@apple.com>

        [iOS] Support network state notification using CPNetworkObserver
        https://bugs.webkit.org/show_bug.cgi?id=129358

        Reviewed by Dan Bernstein.

        Add iOS support for navigator.onLine and online/offline events. Since
        it can be expensive to query CPNetworkObserver, wait to do so until
        someone calls NetworkStateObserver::onLine() or
        NetworkStateObserver::addNetworkStateChangeListener(). For clients that
        don't wish to observe network reachability at all, add a global opt-out.
        These clients will only pay the cost of CPNetworkObserver if they load
        a page that explicitly accesses navigator.onLine.

        No new tests. Covered by existing tests.

        * WebCore.exp.in: Stopped exporting NetworkStateNotifier::setIsOnLine()
        and started exporting Settings::gShouldOptOutOfNetworkStateObservation.
        * WebCore.xcodeproj/project.pbxproj: Renamed NetworkStateNotifierIOS.cpp
        to NetworkStateNotifierIOS.mm.
        * page/Settings.cpp: Defaulted gShouldOptOutOfNetworkStateObservation
        to false.
        * page/Settings.h:
        (WebCore::Settings::setShouldOptOutOfNetworkStateObservation):
        (WebCore::Settings::shouldOptOutOfNetworkStateObservation):
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::addNetworkStateChangeListener): Ignored
        the listener if Settings::shouldOptOutOfNetworkStateObservation().
        Called registerObserverIfNecessary() and added the listener otherwise.
        (WebCore::NetworkStateNotifier::notifyNetworkStateChange): Const qualified.
        * platform/network/NetworkStateNotifier.h
        (NetworkStateNotifier::onLine):
        * platform/network/ios/NetworkStateNotifierIOS.cpp: Removed.
        * platform/network/ios/NetworkStateNotifierIOS.mm: Added.
        (-[NetworkStateObserver initWithNotifier:WebCore::]): Registered self
        as a network reachable observer on CPNetworkObserver.
        (-[NetworkStateObserver dealloc]): Removed self as a network reachable
        observer.
        (-[NetworkStateObserver networkStateChanged:]): Called setOnLine() on
        the web thread, passing the reachability value from the notification.
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::~NetworkStateNotifier): Cleared
        m_observer's pointer back to us.
        (WebCore::NetworkStateNotifier::registerObserverIfNecessary): Initialized
        m_observer if necessary.
        (WebCore::NetworkStateNotifier::onLine): Called
        registerObserverIfNecessary() and set an initial value for m_isOnLine
        if m_isOnLineInitialized is false. Returned m_isOnLine.
        (WebCore::setOnLine): Set m_isOnLine and called
        notifyNetworkStateChange() if needed. Unconditionally set
        m_isOnLineInitialized to true.

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

        Unreviewed build fix for !ENABLE(CONTEXT_MENUS).

        I forgot to add guards to handleContextMenuEvent().

        * replay/UserInputBridge.cpp:
        * replay/UserInputBridge.h:

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

        [WebGL] Only skip context error retrieval if a pending context
        https://bugs.webkit.org/show_bug.cgi?id=129397

        Reviewed by Tim Horton.

        A lost context should still ask the GC3D what the error is. Only
        a pending context should return early.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getError):

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

        Web Replay: route through UserInputBridge when delivering user inputs to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=128150

        Reviewed by Timothy Hatcher.

        Add an UserInputBridge instance to each Page. WebKit2 routes a page's user inputs through
        the WebCore page's user input bridge so that the inputs can be selectively captured, filtered,
        and replayed using instrumentation inside the UserInputBridge.

        For now, the routing methods of UserInputBridge have no replay-specific code paths, and just
        put the input delivery code inside WebCore rather than its external clients. Replay-specific
        code paths will be added once https://bugs.webkit.org/show_bug.cgi?id=128782 is fixed. However,
        once complete the code will work as follows:

        - When neither capturing or replaying, behavior is unchanged.

        - When capturing user inputs, each external input is saved into a replay log as it crosses
        the bridge from outside WebCore.

        - When replaying, the bridge closes and user inputs from WebKit2 are not accepted. Instead,
        the saved inputs from the replay log are re-dispatched as if they had crossed the bridge.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.exp.in: Add symbols for input routing methods.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize the owned UserInputBridge in the Page constructor.
        * page/Page.h:
        (WebCore::Page::inputBridge): Added a by-reference getter.
        * replay/UserInputBridge.cpp: Added.
        (WebCore::UserInputBridge::UserInputBridge):
        (WebCore::UserInputBridge::~UserInputBridge):
        (WebCore::UserInputBridge::handleContextMenuEvent):
        (WebCore::UserInputBridge::handleMousePressEvent):
        (WebCore::UserInputBridge::handleMouseReleaseEvent):
        (WebCore::UserInputBridge::handleMouseMoveEvent):
        (WebCore::UserInputBridge::handleMouseMoveOnScrollbarEvent):
        (WebCore::UserInputBridge::handleKeyEvent):
        (WebCore::UserInputBridge::handleAccessKeyEvent):
        (WebCore::UserInputBridge::handleWheelEvent):
        (WebCore::UserInputBridge::focusSetActive):
        (WebCore::UserInputBridge::focusSetFocused):
        (WebCore::UserInputBridge::scrollRecursively):
        (WebCore::UserInputBridge::logicalScrollRecursively):
        (WebCore::UserInputBridge::loadRequest):
        (WebCore::UserInputBridge::reloadFrame):
        (WebCore::UserInputBridge::stopLoadingFrame):
        (WebCore::UserInputBridge::tryClosePage):
        * replay/UserInputBridge.h: Added.

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

        [WebGL] Protect more WebGL entry points for pending contexts
        https://bugs.webkit.org/show_bug.cgi?id=129386

        Reviewed by Tim Horton.

        There are entry points into a WebGLRenderingContext that don't
        come from the web-exposed API directly, such as drawImage with
        the WebGL canvas. Protect these by returning early if we're
        a pending context.

        Also a bunch of drive-by 0 -> nullptr changes.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markLayerComposited):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToImageData):
        (WebCore::WebGLRenderingContext::reshape):
        (WebCore::WebGLRenderingContext::createBuffer):
        (WebCore::WebGLRenderingContext::createFramebuffer):
        (WebCore::WebGLRenderingContext::createTexture):
        (WebCore::WebGLRenderingContext::createProgram):
        (WebCore::WebGLRenderingContext::createRenderbuffer):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getContextAttributes):
        (WebCore::WebGLRenderingContext::getError):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getShaderPrecisionFormat):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::drawImageIntoBuffer):
        (WebCore::WebGLRenderingContext::videoFrameToImage):
        (WebCore::WebGLRenderingContext::validateBufferDataParameters):
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::imageBuffer):

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

        [CSS Shapes] inset and inset-rectangle trigger assert with replaced element and large percentage dimension
        https://bugs.webkit.org/show_bug.cgi?id=129060

        Reviewed by Simon Fraser.

        A bounds check was omitted when computing the width and height for inset
        rectangles, making it possible for the width or height to end up being
        negative. This patch adds in that check for both. It seems that only
        replaced elements like iframe and img trigger this problem.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-img-inset-negative-width-crash.html
               fast/shapes/shape-outside-floats/shape-outside-floats-img-inset-rectangle-negative-width-crash.html

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):

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

        Underlines are too thick when zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=129352

        Reviewed by Dean Jackson.

        The input to the underline drawing code is in user-space, not device-space.
        The underlines were getting scaled twice, once in InlineTextBox and the other
        in GraphicsContext.

        Test: fast/css3-text/css3-text-decoration/text-decoration-scaled.html

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

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

        Remove unused InspectorCounters.
        <https://webkit.org/b/129367>

        The InspectorCounters code was only used to implement two layout test
        APIs (window.internals.numberOfLive{Nodes,Documents}) yet it had hooks
        in crazy places like Node construction and destruction.

        Rewrote the internals APIs to iterate over all live Documents instead,
        totaling up their referencing Node count. Added a process-global
        Document::allDocuments() HashSet to make this whole thing possible.

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventListener.cpp:
        * dom/Document.cpp:
        (WebCore::Document::allDocuments):
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCounters.cpp: Removed.
        * inspector/InspectorCounters.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/protocol/Timeline.json:
        * platform/ThreadGlobalData.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfLiveNodes):
        (WebCore::Internals::numberOfLiveDocuments):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Web Inspector: Remove console.profiles from window.console API
        https://bugs.webkit.org/show_bug.cgi?id=116883

        Reviewed by Timothy Hatcher.

        console.profiles has been removed or never implemented by other
        browsers. We should remove it as well. However, since tests
        rely on it, keep it as window.internals.consoleProfiles.

        * WebCore.exp.in:
        * page/Console.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::consoleProfiles):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-02-26  Martin Hock  <mhock@apple.com>

        Create SessionID value-style class for session IDs.
        https://bugs.webkit.org/show_bug.cgi?id=129141

        Reviewed by Sam Weinig.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp: Add SessionID member.
        (WebCore::Page::Page):
        (WebCore::Page::sessionID): Retrieve sessionID or use settings if not set.
        * page/Page.h:
        (WebCore::Page::isSessionIDSet):
        (WebCore::Page::setSessionID):
        * page/SessionID.h: Session ID class consisting solely of its uint64_t session ID.
        (WebCore::SessionID::SessionID):
        (WebCore::SessionID::isValid): Not empty.
        (WebCore::SessionID::isEphemeral):
        (WebCore::SessionID::sessionID):
        (WebCore::SessionID::operator==): Value-based equality.
        (WebCore::SessionID::operator!=):
        (WebCore::SessionID::emptySessionID): Zero value also used for HashTraits emptyValue.
        (WebCore::SessionID::defaultSessionID):
        (WebCore::SessionID::legacyPrivateSessionID):
        * page/SessionIDHash.h:
        (WTF::SessionIDHash::hash): Just the casted session ID (low order bytes)
        (WTF::SessionIDHash::equal):
        (WTF::HashTraits<WebCore::SessionID>::emptyValue): Equal to emptySessionID.
        (WTF::HashTraits<WebCore::SessionID>::constructDeletedValue): -1 value.
        (WTF::HashTraits<WebCore::SessionID>::isDeletedValue):

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

        Fix builds that don't define IMAGE_CONTROLS.

        * page/ContextMenuContext.cpp:
        (WebCore::ContextMenuContext::ContextMenuContext):

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

        Build fix for OS X after r164720.

        * page/ContextMenuContext.cpp:

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

        Pipe experimental image controls menu up to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129339

        Reviewed by Simon Fraser.

        Handle events for the image control, starting down the context menu code path if appropriate:
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::ImageControlsRootElementMac::defaultEventHandler):
        * html/shadow/mac/ImageControlsRootElementMac.h:

        Add a class to hold a HitTestResult and addition info about the current ContextMenu invocation:
        * page/ContextMenuContext.cpp: Added.
        (WebCore::ContextMenuContext::ContextMenuContext):
        * page/ContextMenuContext.h: Added.
        (WebCore::ContextMenuContext::hitTestResult):
        (WebCore::ContextMenuContext::isImageControl):

        Update ContextMenuController to work with ContextMenuContext instead of HitTestResult directly:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::createContextMenu):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::addInspectElementItem):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
        (WebCore::ContextMenuController::showImageControlsMenu):
        * page/ContextMenuController.h:
        (WebCore::ContextMenuController::contextMenu):
        (WebCore::ContextMenuController::setContextMenuContext):
        (WebCore::ContextMenuController::context):
        (WebCore::ContextMenuController::hitTestResult):

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:

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

        REGRESSION(r162947): Document::topDocument() returns an incorrect reference for cached Documents
        https://bugs.webkit.org/show_bug.cgi?id=128175

        Reviewed by Antti Koivisto.

        * dom/Document.cpp:
        (WebCore::Document::topDocument): Fall back to pre-r162947 way of determining the top document
        when the Document is in page cache or is in the middle of having its render tree destroyed.
        In the first case, the determined top document is actually the document currently loaded in the
        Frame to which the cached document is still connected, which is obviously not desired. In the
        second case the top document is similarly incorrectly deduced, leading to non-deletion of the
        proper top document's AXObjectCache. Because of this AccessibilityRenderObjects are not detached
        which results in assertions in RenderObject destructor where the objects are found to be still
        flagged as in use by the AX cache.

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

        [CSSRegions] Remove unused method RenderFlowThread::updateLayerToRegionMappings()
        https://bugs.webkit.org/show_bug.cgi?id=129368

        Reviewed by Andrei Bucur.

        Remove unused code, no new tests.

        * rendering/RenderFlowThread.h:

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

        [GTK] Regression when showing the captions menu
        https://bugs.webkit.org/show_bug.cgi?id=129106

        Reviewed by Martin Robinson.

        In some cases, when clicking the captions button the menu was not
        shown.

        Updated test: media/video-controls-captions-trackmenu.html

        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.buildCaptionMenu):
        (ControllerGtk.prototype.showCaptionMenu): Specify sizes in
        pixels.

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

        Avoid unnecessary HTML Collection invalidations for id and name attribute changes
        https://bugs.webkit.org/show_bug.cgi?id=129361

        Reviewed by Benjamin Poulain.

        Before this patch, setting id and name attributes resulted in traversing all the ancestors to invalidate
        HTML collections on those nodes whenever we had more than one HTMLCollection alive.

        Avoid the traversal when HTMLCollections don't have any valid id and name map caches by making each
        HTMLCollection explicitly call collectionCachedIdNameMap and collectionWillClearIdNameMap when it caches
        or clears the id and name map.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/5b06b91b79098f7d42e480f85be32198315d2440

        * dom/Document.cpp:
        (WebCore::Document::registerCollection): Takes a boolean to indicate whether collection has a valid cache
        for the id and name map.
        (WebCore::Document::unregisterCollection): Ditto.
        (WebCore::Document::collectionCachedIdNameMap): Added.
        (WebCore::Document::collectionWillClearIdNameMap): Added.
        * dom/Document.h:

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument): Call invalidateCache on HTML collections after, not before,
        calling unregisterCollection and registerCollection since collections' owner nodes have already been
        moved to the new document here and invalidateCache uses owner node's document to call
        collectionWillClearIdNameMap. So calling invalidateCache before calling unregister/registerCollection
        would result in collectionWillClearIdNameMap getting called on a wrong document.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::invalidateIdNameCacheMaps): Added the code to uncount itself from the number
        of live node lists and HTML collections that need to be invalidated upon id and name attribute changes.
        (WebCore::HTMLCollection::updateNameCache):

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::hasIdNameCache): Renamed from hasNameCache.
        (WebCore::HTMLCollection::setHasIdNameCache): Renamed from setHasIdNameCache.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::updateNameCache):

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

        Add support for minsize/maxsize attributes.
        https://bugs.webkit.org/show_bug.cgi?id=122567

        Reviewed by Chris Fleizach.

        This change implements the minsize/maxsize attributes of the mo element.
        We also switch stretch sizes from int to LayoutUnit to improve accuracy.

        Tests: mathml/presentation/stretchy-minsize-maxsize-dynamic.html
               mathml/presentation/stretchy-minsize-maxsize.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::SetOperatorProperties):
        (WebCore::RenderMathMLOperator::stretchTo):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):

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

        [CSSRegions] Small clean-up of flow threads accelerated compositing code
        https://bugs.webkit.org/show_bug.cgi?id=129312

        Reviewed by Andrei Bucur.

        Some clean-up for the code used for regions in accelerated compositing functionality:
        1. Rename updateRenderFlowThreadLayersIfNeeded -> updateFlowThreadsLayerToRegionMappingsIfNeeded
        as the function updates the mapping between the flow threads layers and their corresponding regions
        2. Remove RenderLayerCompositor::updateRenderFlowThreadLayersIfNeeded and move the code in place
        at call site since the function body does not require a dedicated function.

        No new functionality, no new tests.

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateFlowThreadsLayerToRegionMappingsIfNeeded):
        Now that the regions are always layers, we do not need to iterate backwards.
        * rendering/FlowThreadController.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:

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

        Subpixel rendering: Ensure consistent border painting width.
        https://bugs.webkit.org/show_bug.cgi?id=129259

        Reviewed by Simon Fraser.

        Border edges are painted as (semi)independent rectangles. When snapping an edge rectangle
        to device pixels, its painted dimensions depend on its size and its fractional position.
        Specific combination of position and border width can result in painting edges sized differently.
        Using device snapped border width to calculate inner/outer rectangles helps to maintain
        uniform border width.

        Currently not testable.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::shouldRender):
        (WebCore::BorderEdge::presentButInvisible):
        (WebCore::BorderEdge::widthForPainting):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::calculateSideRect):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::calculateSideRectIncludingInner):

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

        Subpixel layout: Remove explicit static_cast<LayoutUnit> conversions.
        https://bugs.webkit.org/show_bug.cgi?id=129359

        Reviewed by Simon Fraser.

        No testable change in behavior.

        * css/LengthFunctions.cpp:
        (WebCore::minimumValueForLength):
        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::logicalLeftVisualOverflow):
        (WebCore::InlineFlowBox::logicalRightVisualOverflow):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeColumnCountAndWidth):
        (WebCore::getBPMWidth):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::borderSpacingInRowDirection):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::preferredContentLogicalWidth):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::resolveLengthAttributeForSVG):

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

        Build fixes.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

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

        Build fix for OS X after r164690

        * WebCore.exp.in:

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

        Rename WebCore::VisitedLinkProvider to WebCore::VisitedLinkStore
        https://bugs.webkit.org/show_bug.cgi?id=129357

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * loader/HistoryController.cpp:
        (WebCore::addVisitedLink):
        * page/DefaultVisitedLinkStore.cpp: Renamed from Source/WebCore/page/DefaultVisitedLinkProvider.cpp.
        (WebCore::DefaultVisitedLinkStore::create):
        (WebCore::DefaultVisitedLinkStore::DefaultVisitedLinkStore):
        (WebCore::DefaultVisitedLinkStore::~DefaultVisitedLinkStore):
        (WebCore::DefaultVisitedLinkStore::isLinkVisited):
        (WebCore::DefaultVisitedLinkStore::addVisitedLink):
        * page/DefaultVisitedLinkStore.h: Renamed from Source/WebCore/page/DefaultVisitedLinkProvider.h.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::visitedLinkStore):
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::visitedLinkStore):
        * page/PageGroup.h:
        * page/VisitedLinkStore.cpp: Renamed from Source/WebCore/page/VisitedLinkProvider.cpp.
        (WebCore::VisitedLinkStore::VisitedLinkStore):
        (WebCore::VisitedLinkStore::~VisitedLinkStore):
        * page/VisitedLinkStore.h: Renamed from Source/WebCore/page/VisitedLinkProvider.h.

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

        [WebKit2] Form controls handling.
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16053643>

        Reviewed by Simon Fraser and Joseph Pecoraro.

        Adding some exports.
        
        * WebCore.exp.in:

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

        Add accessibility search predicate support for AXOutlines
        https://bugs.webkit.org/show_bug.cgi?id=123748

        Reviewed by Chris Fleizach.

        Added new AXOutlineSearchKey to support finding elements with aria role=tree.

        No new tests, updated existing search-predicate.html test to cover AXOutlineSearchKey.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilitySearchKeyMap):

2014-02-25  Mark Lam  <mark.lam@apple.com>

        Need to initialize VM stack data even when the VM is on an exclusive thread.
        <https://webkit.org/b/129265>

        Not reviewed.

        No new tests.

        Relanding r164627 now that <https://webkit.org/b/129341> is fixed.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

2014-02-25  Mark Lam  <mark.lam@apple.com>

        JSDOMPromise methods should acquire VM lock before calling into JS.
        <https://webkit.org/b/129341>

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        (WebCore::DeferredWrapper::resolve<String>):
        (WebCore::DeferredWrapper::resolve<bool>):
        (WebCore::char>>):
        (WebCore::DeferredWrapper::reject<String>):

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

        Simplify visited link style invalidation
        https://bugs.webkit.org/show_bug.cgi?id=129340

        Reviewed by Dan Bernstein.

        Get rid of the static Page::allVisitedStateChanged and Page::visitedStateChanged
        member functions and add functions to invalidate all styles on a single page or the style
        for a single link hash on a single page.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::invalidateStylesForAllLinks):
        (WebCore::Page::invalidateStylesForLink):
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addVisitedLink):
        (WebCore::PageGroup::removeVisitedLink):
        (WebCore::PageGroup::removeVisitedLinks):

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

        Remove unused ThreadSpecificInspectorCounters.
        <https://webkit.org/b/129337>

        We were keeping count of all the JS event listeners in every thread
        to support an old Chromium feature that's no longer relevant.

        Removing this gets rid of expensive thread-local storage lookups.

        Reviewed by Anders Carlsson.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        * inspector/InspectorCounters.cpp:
        * inspector/InspectorCounters.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        * inspector/protocol/Timeline.json:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        * platform/ThreadGlobalData.h:

2014-02-25  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        display:table with padding and/or borders in border-box calculates height incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=126576

        Reviewed by David Hyatt.

        Based on blink issue https://codereview.chromium.org/25206002/

        Tests: fast/box-sizing/css-table-collapse.html
               fast/box-sizing/css-table-no-collapse.html
               fast/box-sizing/table-collapse.html
               fast/box-sizing/table-no-collapse.html

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

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

        Get rid of VisitedLinkStrategy
        https://bugs.webkit.org/show_bug.cgi?id=129324

        Reviewed by Dan Bernstein.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::PlatformStrategies):
        * platform/VisitedLinkStrategy.h: Removed.

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

        Rolling out http://trac.webkit.org/changeset/164611, because it broke
        WebKit2.PrivateBrowsingPushStateNoHistoryCallback API test

        The change was for:

        https://bugs.webkit.org/show_bug.cgi?id=129141
        Create SessionID class

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

        Unreviewed, rolling out r164627.
        http://trac.webkit.org/changeset/164627
        https://bugs.webkit.org/show_bug.cgi?id=129325

        Broke SubtleCrypto tests (Requested by ap on #webkit).

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

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

        DefaultVisitedLinkProvider can just call into the page group directly
        https://bugs.webkit.org/show_bug.cgi?id=129320

        Reviewed by Andreas Kling.

        * page/DefaultVisitedLinkProvider.cpp:
        (WebCore::DefaultVisitedLinkProvider::isLinkVisited):
        (WebCore::DefaultVisitedLinkProvider::addVisitedLink):

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

        Unreviewed, rolling out r164638.
        http://trac.webkit.org/changeset/164638
        https://bugs.webkit.org/show_bug.cgi?id=129321

        Broke Windows build. (Requested by bfulgham on #webkit).

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::takeSnapshot):
        (WebCore::ChildNodesLazySnapshot::hasSnapshot):
        * dom/Element.cpp:
        (WebCore::ensureAttrNodeListForElement):
        (WebCore::Element::attributes):
        * dom/ElementIteratorAssertions.h:
        (WebCore::ElementIteratorAssertions::ElementIteratorAssertions):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::create):
        (WebCore::ElementRareData::setAttributeMap):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::create):
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet):
        * dom/MutationObserverRegistration.h:
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::create):
        (WebCore::NamedNodeMap::NamedNodeMap):
        * dom/Node.cpp:
        (WebCore::Node::ensureRareData):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::create):
        (WebCore::NodeListsNodeData::NodeListsNodeData):
        (WebCore::NodeMutationObserverData::create):
        (WebCore::NodeMutationObserverData::NodeMutationObserverData):
        (WebCore::NodeRareData::create):
        (WebCore::NodeRareData::clearNodeLists):
        (WebCore::NodeRareData::ensureNodeLists):
        (WebCore::NodeRareData::ensureMutationObserverData):
        (WebCore::NodeRareData::NodeRareData):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):

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

        [iOS] Show status image when playing video to external device
        https://bugs.webkit.org/show_bug.cgi?id=129277

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleEvent): Restructure the code so it is possible to handle events
            that target the video element which aren't in the HandledVideoEvents array.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.currentPlaybackTargetIsWireless): webkitCurrentPlaybackTargetIsWireless
            is an attribute, not a function.
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): Fix style.
        (ControllerIOS.prototype.updateWirelessTargetAvailable): Ditto.
        (ControllerIOS.prototype.updateProgress): Ditto.
        (ControllerIOS.prototype.handleWrapperTouchStart): Show the controls if the wireless status
            display is touched.
        (ControllerIOS.prototype.handleFullscreenButtonClicked): Fix style
        (ControllerIOS.prototype.handleWirelessPlaybackChange): Ditto.
        (ControllerIOS.prototype.handleWirelessTargetAvailableChange):
        (ControllerIOS.prototype.handleWirelessPickerButtonClicked): Ditto. Stop even propagation.

        Move "playback target" logic into HTMLMediaSession.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call media session.
        (WebCore::HTMLMediaElement::loadResource): Tell media session to apply media player
            restrictions now that it has a url.
        (WebCore::HTMLMediaElement::invalidateCachedTime): Only log when cached time is not 
            already invalie.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Call media session.
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Ditto.
        (WebCore::HTMLMediaElement::addEventListener): Ditto.
        (WebCore::HTMLMediaElement::removeEventListen): Ditto.
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Ditto.
        (WebCore::HTMLMediaElement::createMediaPlayer): Ditto.

        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): Log new WirelessVideoPlaybackDisabled restriction.
        (WebCore::HTMLMediaSession::showingPlaybackTargetPickerPermitted): Return false if there
            is no page, or if wireless playback is disabled.
        (WebCore::HTMLMediaSession::currentPlaybackTargetIsWireless): New, logic from HTMLMediaElement.
        (WebCore::HTMLMediaSession::showPlaybackTargetPicker): Ditto.
        (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): Ditto.
        (WebCore::HTMLMediaSession::wirelessVideoPlaybackDisabled): Ditto.
        (WebCore::HTMLMediaSession::setWirelessVideoPlaybackDisabled): Ditto.
        (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): Ditto.
        (WebCore::HTMLMediaSession::applyMediaPlayerRestrictions): New, apply media player specific
            restriction.
        * html/HTMLMediaSession.h:

        Move "playback target" logic into HTMLMediaSession.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute): Call media session.
        (WebCore::HTMLVideoElement::webkitWirelessVideoPlaybackDisabled): Call media session.

        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::showPlaybackTargetPicker): New method, does nothing in base class.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::showPlaybackTargetPicker): Add non-functional stub.

        Implement wireless playback control and status API.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Dispatch TargetIsWirelessChanged.
        (WebCore::MediaPlayerPrivateAVFoundation::playbackTargetIsWirelessChanged): Pass through to
            media element.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_allowsWirelessVideoPlayback.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Remove "externalPlaybackActive" observer.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer): Fix broken logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Add "externalPlaybackActive" observer,
            set initial wireless playback.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createPixelBuffer):  Fix broken logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): New.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): New.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): New.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackTargetIsWirelessDidChange): New.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Deal with 
            externalPlaybackActive.

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

        [Win] Gracefully recover from missing 'naturalSize' parameter for media
        https://bugs.webkit.org/show_bug.cgi?id=129278

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/cf/AVFoundationCFSoftLinking.h: Add declaration for
        missing function call.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::assetStatus): Don't treat missing 'naturalSize'
        as a fatal error.
        (WebCore::MediaPlayerPrivateAVFoundationCF::tracksChanged): Handle case of asset track
        not being available yet. 
        (WebCore::MediaPlayerPrivateAVFoundationCF::sizeChanged): If the 'naturalSize' is empty,
        use the Player Item's 'presentationSize' instead.
        (WebCore::AVFWrapper::processNotification): Add missing handler for duration changed.

2014-02-25  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add ENABLE flag
        https://bugs.webkit.org/show_bug.cgi?id=129153

        Reviewed by Simon Fraser.

        Added ENABLE_CSS_GRID_LAYOUT feature flag.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSGridTemplateAreasValue.cpp:
        * css/CSSGridTemplateAreasValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPropertyNames.in:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StyleResolver.cpp:
        (WebCore::equivalentBlockDisplay):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderGrid.cpp:
        * rendering/RenderGrid.h:
        * rendering/style/GridCoordinate.h:
        * rendering/style/GridLength.h:
        * rendering/style/GridPosition.h:
        * rendering/style/GridTrackSize.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleAllInOne.cpp:
        * rendering/style/StyleGridData.cpp:
        * rendering/style/StyleGridData.h:
        * rendering/style/StyleGridItemData.cpp:
        * rendering/style/StyleGridItemData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

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

        [EME][Mac] Fix a few issues in CDMSessionMediaSourceAVFObjC.
        https://bugs.webkit.org/show_bug.cgi?id=129310

        Reviewed by Eric Carlson.

        Only send a 'keyerror' event if an actual error code was returned, not just
        when no key was added:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::addKeyTimerFired):

        The 'length' parameter to a typed ArrayBufferView is the number of entries
        in the array, not the byte length:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyRequest):

        The return value of streamingContentKeyRequestDataForApp:contentIdentifier:trackId:options:error
        is autoreleased; do not wrap it in an adoptNS:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::update):

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

        [MediaStream] Adding mock implementation of UserMediaClient
        https://bugs.webkit.org/show_bug.cgi?id=129274

        Reviewed by Eric Carlson.

        * platform/mock/UserMediaClientMock.h: Added.
        (WebCore::UserMediaClientRequestNotifier::UserMediaClientRequestNotifier):
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):

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

        Tighten bitfields in live NodeLists and HTMLCollections
        https://bugs.webkit.org/show_bug.cgi?id=129300

        Reviewed by Geoffrey Garen.

        Reduce the number of bits used for m_rootType and m_type in LiveNodeList.
        Also use enum class for LiveNodeList types. We keep "Type" suffix not to
        confuse old-ish compilers.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::collectionFirst):
        (WebCore::LiveNodeList::collectionTraverseForward):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::create):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::namedNodeListKey):
        * dom/TagNodeList.cpp:
        (WebCore::HTMLTagNodeList::HTMLTagNodeList):
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create):
        (WebCore::HTMLTagNodeList::create):
        * html/HTMLCollection.h:
        * 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):

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

        Make it possible to set the visited link provider on a per page basis
        https://bugs.webkit.org/show_bug.cgi?id=129288

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        Export symbols needed by WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        Make VisitedLinkProvider a private header.

        * page/Page.cpp:
        (WebCore::Page::Page):
        Take the visited link provider from the PageClients object.

        (WebCore::Page::visitedLinkProvider):
        If the page has a visited link provider set, return it.

        * page/Page.h:
        Add VisitedLinkProvider to Page and PageClients.

2014-02-25  Morten Stenshorne  <mstensho@opera.com>

        [New Multicolumn] -webkit-column-break-inside:avoid doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=129299

        Reviewed by Andrei Bucur.

        adjustForUnsplittableChild() simply forgot to check whether we
        were inside flow thread based multicol.

        Test: fast/multicol/newmulticol/avoid-column-break-inside.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild):

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

        [CSSRegions] Remove unused function RenderFlowThread::regionForCompositedLayer
        https://bugs.webkit.org/show_bug.cgi?id=129303

        Reviewed by Andrei Bucur.

        Cleanup, no funtionality change, no new tests.

        * rendering/RenderFlowThread.h:

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

        [CSS Blending] -webkit-mix-blend-mode should force transform-style: flat.
        https://bugs.webkit.org/show_bug.cgi?id=126158

        Reviewed by Mihnea Ovidenie.

        As stated in the http://www.w3.org/TR/css3-transforms/#propdef-transform-style, an element with blending
        should force transform-style: flat.

        Test: css3/compositing/blend-mode-transform-style.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): If blending is detected, set transform-style to flat.

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

        Move to using std::unique_ptr for Element, Node and related classes
        https://bugs.webkit.org/show_bug.cgi?id=129058

        Reviewed by Anders Carlsson.

        Replace uses of OwnPtr and PassOwnPtr in Element, Node and the related
        classes with std::unique_ptr and move semantics.

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::takeSnapshot):
        (WebCore::ChildNodesLazySnapshot::hasSnapshot):
        * dom/Element.cpp:
        (WebCore::ensureAttrNodeListForElement):
        (WebCore::Element::attributes):
        * dom/ElementIteratorAssertions.h:
        (WebCore::ElementIteratorAssertions::ElementIteratorAssertions):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setAttributeMap):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet):
        * dom/MutationObserverRegistration.h:
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::NamedNodeMap):
        * dom/Node.cpp:
        (WebCore::Node::ensureRareData):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListsNodeData):
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::clearNodeLists):
        (WebCore::NodeRareData::ensureNodeLists):
        (WebCore::NodeRareData::ensureMutationObserverData):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):

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

        Prune dead code for Web Inspector memory instrumentation.
        <https://webkit.org/b/129286>

        This was leftover code from Chromium's inspector. It's not used by
        today's WebKit inspector.

        Reviewed by Sam Weinig.

        * 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:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorMemoryAgent.cpp: Removed.
        * inspector/InspectorMemoryAgent.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/protocol/Memory.json: Removed.

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

        AX: Support abbr, acronym
        https://bugs.webkit.org/show_bug.cgi?id=128860

        Reviewed by Mario Sanchez Prada.

        Expose the data in <abbr>, <acronym> and <th abbr=""> as an 
        alternateTextValue() parameter.

        Test: platform/mac/accessibility/abbr-acronym-tags.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasTagName):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::alternateTextValue):
        (WebCore::AccessibilityObject::supportsAlternateTextValue):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::alternateTextValue):
        (WebCore::AccessibilityRenderObject::supportsAlternateTextValue):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::alternateTextValue):
        (WebCore::AccessibilityTableCell::supportsAlternateTextValue):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetAlternateTextValue):
        (AXAttributedStringAppendText):
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2014-02-24  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should not generate documentation for source files for unbuilt source files
        https://bugs.webkit.org/show_bug.cgi?id=128417

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/GNUmakefile.am: Generate a config file for webkitdom documentation generation.

2014-02-24  Mark Lam  <mark.lam@apple.com>

        Need to initialize VM stack data even when the VM is on an exclusive thread.
        <https://webkit.org/b/129265>

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        - Added an assertion to ensure that we are holding the JSLock.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):
        - Updated to use the new VM::setExclusiveThread().

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

        Add a DefaultVisitedLinkProvider and route visited link actions through it
        https://bugs.webkit.org/show_bug.cgi?id=129285

        Reviewed by Dan Bernstein.

        DefaultVisitedLinkProvider currently just forwards everything to the visited link strategy,
        but will soon take over the responsibilities of visited link handling from PageGroup.
        
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * loader/HistoryController.cpp:
        (WebCore::addVisitedLink):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForClientRedirect):
        (WebCore::HistoryController::updateForSameDocumentNavigation):
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * page/DefaultVisitedLinkProvider.cpp: Copied from Source/WebCore/page/VisitedLinkProvider.h.
        (WebCore::DefaultVisitedLinkProvider::create):
        (WebCore::DefaultVisitedLinkProvider::DefaultVisitedLinkProvider):
        (WebCore::DefaultVisitedLinkProvider::~DefaultVisitedLinkProvider):
        (WebCore::DefaultVisitedLinkProvider::isLinkVisited):
        (WebCore::DefaultVisitedLinkProvider::addVisitedLink):
        * page/DefaultVisitedLinkProvider.h: Copied from Source/WebCore/page/VisitedLinkProvider.h.
        * page/Page.cpp:
        (WebCore::Page::visitedLinkProvider):
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::visitedLinkProvider):
        * page/PageGroup.h:
        * page/VisitedLinkProvider.h:

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

        WK2 AVKit fullscreen doesn't display video.
        https://bugs.webkit.org/show_bug.cgi?id=128564

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export WebCore::PlatformCALayer::platformCALayer()

        * platform/ios/WebVideoFullscreenInterface.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        Remove SetVideoLayerID(). 

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setVideoLayer):
        Wrap make video layer look like an AVAVPlayerLayer with WebAVPlayerLayer

        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
        (WebVideoFullscreenModelMediaElement::setMediaElement):
        Pass along the videoLayer before borrowing it so the interface will be ready to
        catch the transaction that removes it.

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

        AX: AccessibilityObject::findMatchingObjects should never include 'this' in results.
        https://bugs.webkit.org/show_bug.cgi?id=129243

        Reviewed by Chris Fleizach.

        Fix removes the container object from the search results when searching backwards. This
        makes backwards & forwards search results consistent with each other.

        Test: platform/mac/accessibility/search-predicate-container-not-included.html

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

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

        AX: findMatchingObjects backwards start position inconsistent with forwards start position when startObject == nullptr.
        https://bugs.webkit.org/show_bug.cgi?id=129266

        Reviewed by Chris Fleizach.

        When searching forward with no start object, the first thing considered is the first child of
        the container. However, when searching backwards with no start object nothing in the container
        is considered; this basically negates the search. This patch makes backwards searching without
        a start object start from the last child of the container to match forward search expectations.

        Test: platform/mac/accessibility/search-predicate-start-not-specified.html

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

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

        Prune dead code for Web Inspector canvas instrumentation.
        <https://webkit.org/b/129269>

        This was leftover code from Chromium's inspector. It's not used by
        today's WebKit inspector.

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * inspector/InjectedScriptCanvasModule.cpp: Removed.
        * inspector/InjectedScriptCanvasModule.h: Removed.
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCanvasAgent.cpp: Removed.
        * inspector/InspectorCanvasAgent.h: Removed.
        * inspector/InspectorCanvasInstrumentation.h: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::didBeginFrame):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:

2014-02-24  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Adjust lineTop position to the next available wrapping location at shape-outsides
        https://bugs.webkit.org/show_bug.cgi?id=128693

        Reviewed by David Hyatt.

        When we don't have space next to the floating container, but we have space inside the floating-container next
        to the defined shape-outside, we should wrap around the shape-outside. This patch fixes the behavior both for
        cases when there is no space to fit at the first line, and for the additional lines cases.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-linetop-adjustment.html

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        * rendering/line/LineWidth.cpp:
        (WebCore::availableWidthAtOffset):
        (WebCore::LineWidth::updateLineDimension): Added new helper.
        (WebCore::isWholeLineFit): Added new helper.
        (WebCore::LineWidth::wrapNextToShapeOutside): Added new helper.
        (WebCore::LineWidth::fitBelowFloats): Add optional parameter for the function.
        * rendering/line/LineWidth.h:

2014-02-24  Martin Hock  <mhock@apple.com>

        Create SessionID value-style class for session IDs.
        https://bugs.webkit.org/show_bug.cgi?id=129141

        Reviewed by Brady Eidson.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp: Add SessionID member.
        (WebCore::Page::Page):
        (WebCore::Page::sessionID): Retrieve sessionID or use settings if not set.
        * page/Page.h:
        (WebCore::Page::setSessionID):
        * page/SessionID.h: Session ID class consisting solely of its uint64_t session ID.
        (WebCore::SessionID::SessionID):
        (WebCore::SessionID::isValid): Not empty.
        (WebCore::SessionID::isEphemeral):
        (WebCore::SessionID::sessionID):
        (WebCore::SessionID::operator==): Value-based equality.
        (WebCore::SessionID::operator!=):
        (WebCore::SessionID::emptySessionID): Zero value also used for HashTraits emptyValue.
        (WebCore::SessionID::defaultSessionID):
        (WebCore::SessionID::legacyPrivateSessionID):
        * page/SessionIDHash.h:
        (WTF::SessionIDHash::hash): Just the casted session ID (low order bytes)
        (WTF::SessionIDHash::equal):
        (WTF::HashTraits<WebCore::SessionID>::emptyValue): Equal to emptySessionID.
        (WTF::HashTraits<WebCore::SessionID>::constructDeletedValue): -1 value.
        (WTF::HashTraits<WebCore::SessionID>::isDeletedValue):

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

        [CSS Grid Layout] handle undefined RemainingSpace in computeUsedBreadthOfGridTracks algorithm
        https://bugs.webkit.org/show_bug.cgi?id=128372

        Reviewed by David Hyatt.

        From Blink r165692 by <svillar@igalia.com>

        The spec defines a different code path for the computeUsedBreadthOfGridTracks algorithm
        http://dev.w3.org/csswg/css-grid/#function-ComputeUsedBreadthOfGridTracks.

        Basically the track breadth is different when the available size is undefined and thus,
        cannot be taken into account during the computations.
        The available size is undefined whenever the height is auto or the grid element has a
        shrink-to-fit behavior.

        It was also renamed the function to match the specs so the function name starts with
        'compute' instead of 'computed'.

        No new tests, but added new cases to some of them.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::gridElementIsShrinkToFit):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
        (WebCore::RenderGrid::layoutGridItems):
        * rendering/RenderGrid.h:

2014-02-24  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed pre-emptive build fix.

        * WebCore.vcxproj/WebCoreCommon.props: Add replay directory to include path.

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

        Break out ImageControls style into an external stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=129273

        Reviewed by Jer Noble.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSDefaultStyleSheets.h:

        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::ImageControlsRootElementMac::maybeCreate):

        * html/shadow/mac/imageControlsMac.css:
        (.x-webkit-imagemenu):
        (.x-webkit-imagemenu:hover):

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsScript):
        (WebCore::RenderTheme::imageControlsStyleSheet):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::imageControlsStyleSheet):

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

        [WebRTC] Validating RTCConfiguration according to the spec
        https://bugs.webkit.org/show_bug.cgi?id=129182

        Reviewed by Eric Carlson.

        Spec states that:
            - iceServers should not be an empty list
            - the entry in the configuration dictionary is "urls", instead of "url"
            - urls can be either a list or a string
        Fixing all that in RTCConfiguration validation when creating a RTCPeerConnection

        Existing tests were updated.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::appendIceServer): Added.
        (WebCore::processIceServer): Added.
        (WebCore::RTCPeerConnection::parseConfiguration):

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

        [CSS Regions] Relative positioned elements overflowing the region do not get painted into the next tile
        https://bugs.webkit.org/show_bug.cgi?id=129254

        Reviewed by Antti Koivisto.

        The painting of the region's layer should not be aborted so early if the region's fragment shouldn't be painted
        because that would prevent all the layer's children from being painted.

        Another problem this patch addresses is that clipping should also be performed when the clip rect is empty,
        which is what happens when painting in a tile in which the flowed element would normally be painted
        if it wasn't clipped by the region.

        Test: fast/regions/content-relative-next-tile.html

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

2014-02-24  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>
        
        Get rid of the unused 'immediate' parameters from repaint related functions
        https://bugs.webkit.org/show_bug.cgi?id=129111

        Reviewed by Simon Fraser.

        Removing the 'immediate' parameters from repaint related functions - accoring
        to the FIXME in RenderView::repaintViewRectangle() - since they have no effect.

        No new tests are necessary because there is no behavior change

        * dom/Element.cpp:
        (WebCore::Element::setActive):
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::invalidateRootView):
        (WebCore::Chrome::invalidateContentsAndRootView):
        (WebCore::Chrome::invalidateContentsForSlowScroll):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::tiledBackingStorePaintEnd):
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::shouldUpdate):
        * page/FrameView.h:
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsSlowPath):
        (WebCore::ScrollView::repaintContentRectangle):
        (WebCore::ScrollView::updateOverhangAreas):
        (WebCore::ScrollView::addPanScrollIcon):
        (WebCore::ScrollView::removePanScrollIcon):
        (WebCore::ScrollView::platformRepaintContentRectangle):
        * platform/ScrollView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        * rendering/RenderLayer.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintSlowRepaintObject):
        * rendering/RenderObject.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::flushAccumulatedRepaintRegion):
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):
        * rendering/RenderView.h:
        * svg/graphics/SVGImageChromeClient.h:

2014-02-24  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Code cleanup: remove leftover ENABLE(WORKERS) macros and support.
        https://bugs.webkit.org/show_bug.cgi?id=129255

        Reviewed by Csaba Osztrogonác.

        ENABLE_WORKERS macro was removed in r159679, but r161589 added back some occurrences.
        Support is now also removed from xcconfig files.

        No new tests needed.

        * Configurations/FeatureDefines.xcconfig:
        * platform/ThreadGlobalData.cpp:
        * platform/ThreadGlobalData.h:
        * platform/Timer.h:
        (WebCore::TimerBase::isActive):
        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread):
        (StartWebThread):

2014-02-24  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [CMake] Get rid of "FIXME: The Blackberry port ..." from WebCore/CmakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=129152

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:

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

        Remove redundant setting in FeatureDefines.xcconfig

        * Configurations/FeatureDefines.xcconfig:

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

        [CSS Blending] An element having -webkit-mix-blend-mode should only blend with the contents of the parent stacking context
        https://bugs.webkit.org/show_bug.cgi?id=129154

        Reviewed by Dean Jackson.

        The blending operation of an element having -webkit-mix-blend-mode should be restricted to the parent stacking context.
        This change isolates blending, preventing it from blending with other underlying elements besides the parent stacking context.

        Tests: css3/compositing/blend-mode-isolated-group-1.html
               css3/compositing/blend-mode-isolated-group-2.html
               css3/compositing/blend-mode-isolated-group-3.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Initialize added members to false.
        (WebCore::RenderLayer::updateBlendMode): Check if a blend mode was set or unset. If so, set the m_updateParentStackingContextShouldIsolateBlendingDirty to true.
        (WebCore::RenderLayer::updateParentStackingContextShouldIsolateBlending): Traverse to the parent stacking context and update the
        m_isolatesBlending member accordingly.
        * rendering/RenderLayer.h:
        - Add isolatesBlending() as a condition for creating a transparency layer in the paintsWithTransparency method.
        - Add m_updateParentStackingContextShouldIsolateBlendingDirty member.
        - Add m_isolatesBlending member and getter.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Call updateParentStackingContextShouldIsolateBlending. 

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

        [ATK] Wrong selected element at a given index in a list box.
        https://bugs.webkit.org/show_bug.cgi?id=129039

        Reviewed by Chris Fleizach.

        Test: accessibility/select-element-at-index.html

        The selected element at a given index was wrong. One should be considered among the
        all children of a list box, not only selected ones.

        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (core):
        (listObjectForSelection):
        (optionFromList):
        (optionFromSelection):
        (webkitAccessibleSelectionRefSelection):

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

        [WebGL] Allow ANGLE to initialize unused varyings
        https://bugs.webkit.org/show_bug.cgi?id=129240
        <rdar://problem/15203342>

        Reviewed by Sam Weinig.

        Covered by: conformance/glsl/misc/shaders-with-varyings.html

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        Add SH_INIT_VARYINGS_WITHOUT_STATIC_USE to compiler flags.

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

        Update FeatureDefines.xcconfig

        Rubber-stamped by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

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

        Sort the project file with sort-Xcode-project-file.

        Rubber-stamped by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:

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

        Fix incorrectly commented out code.

        * platform/TelephoneNumberDetector.h:

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

        Extract platform specific parts of telephone number detection 
        https://bugs.webkit.org/show_bug.cgi?id=129238

        Reviewed by Dean Jackson.

        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers):
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody):
        * platform/TelephoneNumberDetector.h: Added.
        * platform/cocoa/TelephoneNumberDetectorCocoa.cpp: Added.
        (WebCore::TelephoneNumberDetector::phoneNumbersScanner):
        (WebCore::TelephoneNumberDetector::isSupported):
        (WebCore::TelephoneNumberDetector::find):
        Move code to TelephoneNumberDetector.

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

        Change a url parameter type with URL in NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=129202

        Reviewed by Sam Weinig.

        It would be good if we use *URL* for url parameters instead of using String.

        Merge from blink. https://src.chromium.org/viewvc/blink?view=rev&revision=165458.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::verifyCustomHandlerURL):
        (WebCore::NavigatorContentUtils::registerProtocolHandler):
        (WebCore::NavigatorContentUtils::isProtocolHandlerRegistered):
        (WebCore::NavigatorContentUtils::unregisterProtocolHandler):
        * Modules/navigatorcontentutils/NavigatorContentUtilsClient.h:

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

        Update ANGLE to 836bd2176e5607b14846cf1fbc5932dbc91318f4
        https://bugs.webkit.org/show_bug.cgi?id=129232

        Reviewed by Brent Fulgham.

        New files added, derived sources compiled directly, and generated
        steps removed for both EFL and GTK, with much-needed help from
        Sergio Correia.

        * CMakeLists.txt:
        * GNUMakefile.am:

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

        Move RenderMathMLMenclose.h/cpp to the right place in the Xcode project and sort.

        Rubber-stamped by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:

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

        Move telephone number detection behind its own ENABLE macro
        https://bugs.webkit.org/show_bug.cgi?id=129236

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_TELEPHONE_NUMBER_DETECTION.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody):
        * html/parser/HTMLTreeBuilder.h:
        Use ENABLE(TELEPHONE_NUMBER_DETECTION).

        * platform/mac/SoftLinking.h:
        Remove PLATOFORM(IOS) from SOFT_LINK_PRIVATE_FRAMEWORK_OPTIONAL, it is not iOS specific.

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

        Subpixel rendering: Fix bleed avoidance subpixel calculation.
        https://bugs.webkit.org/show_bug.cgi?id=129225

        Reviewed by Simon Fraser.
        
        static_cast<LayoutUnit>(int value) only produces the desired result when subpixel is off.

        Currently not testable.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect):
        (WebCore::shrinkRectByOneDevicePixel):
        (WebCore::RenderBoxModelObject::borderInnerRectAdjustedForBleedAvoidance):
        (WebCore::RenderBoxModelObject::backgroundRoundedRectAdjustedForBleedAvoidance):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:

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

        Subpixel rendering: Add devicepixel based computation to BorderEdge class.
        https://bugs.webkit.org/show_bug.cgi?id=129224

        Reviewed by Simon Fraser.

        To produce correct width (and type) results, BorderEdge class needs to take device pixel ratio into account.

        Currently not testable.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::obscuresBackgroundEdge):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths): this does not always produce the same
        result as before, but the sum of inner and outer is not different.
        (WebCore::BorderEdge::borderWidthInDevicePixel):
        (WebCore::RenderBoxModelObject::getBorderEdgeInfo):

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

        REGRESSION (r164507): Crash beneath JSGlobalObjectInspectorController::reportAPIException at facebook.com, twitter.com, youtube.com
        https://bugs.webkit.org/show_bug.cgi?id=129227

        Reviewed by Eric Carlson.

        Reverted r164507.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

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

        Remove some unreachable code (-Wunreachable-code)
        https://bugs.webkit.org/show_bug.cgi?id=129220

        Reviewed by Eric Carlson.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndTag):
        The only tricky case. Here there was a break inside the
        #if, but not the #else, and a break after the #endif.
        Remove the break inside the #if, and always use the
        break after the #endif.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::modeToString):
        * bindings/js/JSTrackCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::functionForUniform):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionDisplayMode):

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

        Letterpress effect disabled for synthetic italic
        https://bugs.webkit.org/show_bug.cgi?id=129218
        <rdar://problem/15997846>

        Reviewed by Dan Bernstein.

        There was no need to guard against synthetic italics and letterpress.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs): Remove !useLetterpressEffect from conditional.

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

        Expose phase and momentum phase as SPI on DOMWheelEvent
        <rdar://problem/16110871>
        https://bugs.webkit.org/show_bug.cgi?id=129184

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export core(DOMWheelEvent).

        * WebCore.xcodeproj/project.pbxproj:
        Make DOMWheelEventInternal.h available in WebKit.

        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent):
        * dom/WheelEvent.cpp:
        (WebCore::determineDeltaMode):
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        (WebCore::WheelEvent::initWebKitWheelEvent):
        Move PlatformWheelEvent -> DOMWheelEvent conversion to DOMWheelEvent.

        * dom/WheelEvent.h:
        (WebCore::WheelEvent::create):
        (WebCore::WheelEvent::phase):
        (WebCore::WheelEvent::momentumPhase):
        Store phase and momentumPhase on the WheelEvent.

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

        Rename JWK key_ops values from wrap/unwrap to wrapKey/unwrapKey
        https://bugs.webkit.org/show_bug.cgi?id=129121

        Reviewed by Sam Weinig.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Updated to newer names.
        (WebCore::addUsagesToJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::serialize): rsa-oaep-key-manipulation test
        started ot fail, because RSA-OAEP with 2048 bit key and sha-1 can only encrypt
        214 bytes, and the new longer names made JSON serialization slightly longer.
        Compensate by not doing any indentation in JSON.

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

        Only skip stretchy operators when determining the stretch height.
        https://bugs.webkit.org/show_bug.cgi?id=126842

        Reviewed by Chris Fleizach.

        The MathML code only takes into account non-mo children for the computation of the stretch size. This change includes non-stretchy mo in that computation. A new test is added into mathml/presentation/stretchy-depth-height.html.

        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):

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

        Implement asymmetric/symmetric stretching of vertical operators.
        https://bugs.webkit.org/show_bug.cgi?id=124827.

        Reviewed by Chris Fleizach.

        The MathML code stretches vertical operators asymmetrically by default. This patch takes into account the symmetric attribute or the symmetric property of the operator dictionary to stretch operators symmetrically.

        Test: mathml/presentation/stretchy-depth-height-symmetric.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::stretchTo):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::updateStyle):

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

        Bug 119043 - Large stretch size error for MathML operators.
        https://bugs.webkit.org/show_bug.cgi?id=119043

        Reviewed by Chris Fleizach.

        The MathML code used some arbitrary gOperatorExpansion factor for the
        stretch size and 2/3 1/2 constants for the baseline. This change tries
        to consider height/depth of siblings of the stretchy operator so that
        the stretchy operator now matches its target.

        Test: mathml/presentation/stretchy-depth-height.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderMathMLTable):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::stretchTo):
        (WebCore::RenderMathMLOperator::findAcceptableStretchyCharacter):
        (WebCore::RenderMathMLOperator::updateStyle):
        (WebCore::RenderMathMLOperator::firstLineBaseline):
        (WebCore::RenderMathMLOperator::computeLogicalHeight):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):

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

        Unreviewed, rolling out r164534.
        http://trac.webkit.org/changeset/164534
        https://bugs.webkit.org/show_bug.cgi?id=119043

        missing tests

        * rendering/RenderObject.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::expandedStretchHeight):
        (WebCore::RenderMathMLOperator::stretchToHeight):
        (WebCore::RenderMathMLOperator::findAcceptableStretchyCharacter):
        (WebCore::RenderMathMLOperator::updateStyle):
        (WebCore::RenderMathMLOperator::firstLineBaseline):
        (WebCore::RenderMathMLOperator::computeLogicalHeight):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):

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

        Bug 119043 - Large stretch size error for MathML operators.
        https://bugs.webkit.org/show_bug.cgi?id=119043

        Reviewed by Chris Fleizach.

        The MathML code used some arbitrary gOperatorExpansion factor for the
        stretch size and 2/3 1/2 constants for the baseline. This change tries
        to consider height/depth of siblings of the stretchy operator so that
        the stretchy operator now matches its target.

        Test: mathml/presentation/stretchy-depth-height.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderMathMLTable):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::stretchTo):
        (WebCore::RenderMathMLOperator::findAcceptableStretchyCharacter):
        (WebCore::RenderMathMLOperator::updateStyle):
        (WebCore::RenderMathMLOperator::firstLineBaseline):
        (WebCore::RenderMathMLOperator::computeLogicalHeight):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):

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

        REGRESSION(r164412): Pixel cracks when zooming in to any web content.
        https://bugs.webkit.org/show_bug.cgi?id=129195

        Reviewed by Simon Fraser.

        Integral clipping of the repaint rect was prematurely removed in RenderLayerBacking::paintContents().
        Repaint rects needs a uniform, device pixel precise clipping across the painting flow including RenderLayer,
        RenderView and TileController.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::compositedBoundsIncludingMargin):

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

        Unreviewed Mac build fix after r164529.

        Replace the string-to-array algorithm with a archictecture-independant
        one.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyRequest):

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

        [EME] Add a CDMSession for MediaPlayerPrivateMediaSourceAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=129166

        Reviewed by Eric Carlson.

        Add a new CDMSession, cerated by MediaPlayerPrivateMediaSourceAVFObjC allowing
        media-source-backed media elements to play protected content.

        Add a new CDMSessionMediaSourceAVFObjC class:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h: Added.
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm: Added.
        (WebCore::CDMSessionMediaSourceAVFObjC::CDMSessionMediaSourceAVFObjC):
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyRequest): Do not actually generate a
            key request until the certificate data has been added via update();
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys): No-op.
        (WebCore::CDMSessionMediaSourceAVFObjC::update): If no certificate data has yet been
            added, assume the incoming message contains it.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine): Add supportsKeySystem.
        (WebCore::keySystemIsSupported): Use "com.apple.fps.2_0" to distinguish from the not-media-source scheme.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType): Check the keySystem type.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsKeySystem): Added.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::createSession): Added, pass through to MediaSourcePrivate.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::createSession): Added.
        (WebCore::MediaSourcePrivateAVFObjC::sourceBufferKeyNeeded): Pass through to MediaPlayer.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):
            Added, pass through to SourceBufferPrivate.
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID): Remember
            which track is requesting the key, and pass the request to MediaSourcePrivate.

        Add new files to the project.
        * WebCore.xcodeproj/project.pbxproj:

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

        CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify contains seemingly accidental unreachable code
        https://bugs.webkit.org/show_bug.cgi?id=129193

        Reviewed by Joseph Pecoraro.

        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify): Fix the accidental code.

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

        Extend media support for WebVTT sources
        https://bugs.webkit.org/show_bug.cgi?id=129156

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Add new feature define for AVF_CAPTIONS
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::outOfBandTrackSources): Added.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::outOfBandTrackSources): Added.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::outOfBandTrackSources): Added.
        * platform/graphics/PlatformTextTrack.h:
        (WebCore::PlatformTextTrack::create): Update for new constructor signature.
        (WebCore::PlatformTextTrack::createOutOfBand): Added.
        (WebCore::PlatformTextTrack::url): Added.
        (WebCore::PlatformTextTrack::isDefault): Added.
        (WebCore::PlatformTextTrack::PlatformTextTrack): Revised to take new URL and
        'isDefault' arguments.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::mediaDescriptionForKind): Added.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Tell AVFoundation about any
        WebVTT tracks supplied by the web page.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions): Filter out any out-of-band
        WebVTT tracks returned by the media engine to avoid double-counting tracks.

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

        Inner text element should not use -webkit-user-modify
        https://bugs.webkit.org/show_bug.cgi?id=129035

        Reviewed by Andreas Kling.

        To eliminate the internal use of -webkit-user-modify, use contenteditable attribute in the inner text elements
        instead of manually inspecting disabled-ness and readonly-ness in RenderTextControl.

        Unfortunately, we still have to manually set UserModify value in RenderTextControl::adjustInnerTextStyle since
        RenderTextControl::styleDidChange creates RenderStyle for its inner text from scratch via createInnerTextStyle.    

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::disabledStateChanged): Don't use childrenOfType iterator which asserts that DOM
        isn't mutated during the traversal since we now set contenteditable attribute inside disabledStateChanged via
        updateFromControlElementsAncestorDisabledStateUnder.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseAttribute): Extracted readOnlyAttributeChanged out of this function so
        that HTMLTextFormControl could override it to call updateInnerTextElementEditability.
        (WebCore::HTMLFormControlElement::readOnlyAttributeChanged): Ditto.
        * html/HTMLFormControlElement.h:

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didAddUserAgentShadowRoot): Call updateInnerTextElementEditability after creating
        shadow DOM for the current input type.
        (WebCore::HTMLInputElement::updateType): Ditto.
        (WebCore::HTMLInputElement::parseAttribute): Ditto.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::didAddUserAgentShadowRoot): Call updateInnerTextElementEditability.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::disabledStateChanged): Added to update contenteditable attribute since
        the editability of the inner text element depends on disabled-ness of the element.
        (WebCore::HTMLTextFormControlElement::readOnlyAttributeChanged): Ditto for the readonly-ness of the element.
        (WebCore::HTMLTextFormControlElement::updateInnerTextElementEditability): Added.
        * html/HTMLTextFormControlElement.h:

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle): Use the inner text element's presentationAttributeStyle() to
        compute the appropriate EUserModify value instead of hard-coding it here.
        * rendering/RenderTextControl.h:

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

        [GTK] Support WEBGL_draw_buffers extension.
        https://bugs.webkit.org/show_bug.cgi?id=129143

        Reviewed by Dean Jackson.

        Support the WEBGL_draw_buffers WebGL extension for gtk port. Relevant opengl APIs
        are exposed for WebGLRenderingContext to access them properly.

        Covered by fast/canvas/webgl/webgl-draw-buffers.html

        * platform/graphics/OpenGLShims.cpp:
        (WebCore::initializeOpenGLShims):
        * platform/graphics/OpenGLShims.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):
        (WebCore::Extensions3DOpenGL::drawBuffersEXT):

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

        Mac port uses ANGLE_instanced_arrays related apis through those in GraphicsContext3DCommon.cpp
        https://bugs.webkit.org/show_bug.cgi?id=128803

        Reviewed by Dean Jackson.

        Merge mac port implementation of ANGLE_instanced_arrays into common code.

        No new tests, no functionality changed.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::drawArraysInstanced):
        (WebCore::Extensions3DOpenGL::drawElementsInstanced):
        (WebCore::Extensions3DOpenGL::vertexAttribDivisor):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::vertexAttribDivisor):

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

        After copy and paste, cursor may appear to be above the bottom of content
        https://bugs.webkit.org/show_bug.cgi?id=129167

        Reviewed by Ryosuke Niwa.

        Adding a clear:both to the end of content.

        I can't handle the case of the cursor appearing above the bottom of
        absolutely positioned divs (of the case of floats inside absolutely
        positioned divs) because you can't know where the bottom of a div
        will end up being rendered (it is affected by things like browser
        window width and text size settings). Therefore, the only case I
        can handle is the case where there is a floating div in the same
        level as the document itself.

        Test: editing/pasteboard/copy-paste-inserts-clearing-div.html

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

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

        [iOS Media] Wireless target UI
        https://bugs.webkit.org/show_bug.cgi?id=129189
        <rdar://problem/15349928>
        <rdar://problem/16100060>

        Reviewed by Eric Carlson.

        Implement a prototype UI for wireless playback targets. The UI
        doesn't currently work, but can be simulated via a class variable
        in ControllerIOS.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-panel button): Reset the default style of
        button elements, to avoid getting a border.
        (audio::-webkit-media-controls-wireless-playback-status): Holds the UI showing
        the user that the media is playing on another target.
        (audio::-webkit-media-controls-wireless-playback-status.hidden):
        (audio::-webkit-media-controls-wireless-playback-picker-button): The button to
        trigger selection of targets.
        (audio::-webkit-media-controls-wireless-playback-picker-button.active):
        (audio::-webkit-media-controls-panel): This needs to be position absolute for
        the wireless playback status to fill the viewport.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS): Check for targets.
        (ControllerIOS.prototype.addVideoListeners):
        (ControllerIOS.prototype.removeVideoListeners):
        (ControllerIOS.prototype.UIString): New method to return localized strings (with
        a FIXME).
        (ControllerIOS.prototype.shouldHaveAnyUI): Needs to display if there is a wireless
        target.
        (ControllerIOS.prototype.currentPlaybackTargetIsWireless):
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): Create the status content,
        replacing the device name if it is available.
        (ControllerIOS.prototype.updateWirelessTargetAvailable):
        (ControllerIOS.prototype.createControls):
        (ControllerIOS.prototype.configureInlineControls):
        (ControllerIOS.prototype.handleWirelessPlaybackChange):
        (ControllerIOS.prototype.handleWirelessTargetAvailableChange):
        (ControllerIOS.prototype.handleWirelessPickerButtonClicked):

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

        Make a generic CDMPrivateMediaPlayer and move its CDMSession into platform/.
        https://bugs.webkit.org/show_bug.cgi?id=129164

        Reviewed by Eric Carlson.

        Move the session created by CDMPrivateAVFoundation into platform, and rename
        CDMPrivateAVFoundation to CDMPrivateMediaPlayer. Future media engines who want
        to support a keysystem from within the media engine can create their own
        CDMSession as part of the MediaPlayerPrivate interface.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::installedCDMFactories):
        (WebCore::CDM::createSession):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.mm: Removed.
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.cpp.
        (WebCore::CDMPrivateMediaPlayer::supportsKeySystem):
        (WebCore::CDMPrivateMediaPlayer::supportsKeySystemAndMimeType):
        (WebCore::CDMPrivateMediaPlayer::supportsMIMEType):
        (WebCore::CDMPrivateMediaPlayer::createSession):
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.h.
        (WebCore::CDMPrivateMediaPlayer::create):
        (WebCore::CDMPrivateMediaPlayer::~CDMPrivateMediaPlayer):
        (WebCore::CDMPrivateMediaPlayer::cdm):
        (WebCore::CDMPrivateMediaPlayer::CDMPrivateMediaPlayer):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/CDMSession.h: Extracted from CDMPrivateAVFoundation.h.
        (WebCore::CDMSessionClient::~CDMSessionClient):
        (WebCore::CDMSession::CDMSession):
        (WebCore::CDMSession::~CDMSession):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::createSession):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::createSession):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.h.
        (WebCore::CDMSessionAVFoundationObjC::~CDMSessionAVFoundationObjC):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.mm.
        (WebCore::CDMSessionAVFoundationObjC::CDMSessionAVFoundationObjC):
        (WebCore::CDMSessionAVFoundationObjC::generateKeyRequest):
        (WebCore::CDMSessionAVFoundationObjC::releaseKeys):
        (WebCore::CDMSessionAVFoundationObjC::update):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createSession):
        * testing/MockCDM.cpp:
        (WebCore::MockCDMSession::setClient):
        (WebCore::MockCDM::createSession):
        * testing/MockCDM.h:

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

        Add a supportsKeySystem media engine factory parameter.
        https://bugs.webkit.org/show_bug.cgi?id=129161

        Reviewed by Eric Carlson.

        Add a new parameter to the MediaPlayerFactory to allow registered media
        engines to be queried for keySystem support:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayerFactory::MediaPlayerFactory):
        (WebCore::MediaPlayer::supportsKeySystem):
        * platform/graphics/MediaPlayer.h:

        Support this new field in MediaPlayerPrivateAVFoundationObjC:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine):
        (WebCore::keySystemIsSupported):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):

        Add an empty field for SupportsKeySystem to the remaining media engines:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::registerMediaEngine):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine):
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        (WebCore::MediaPlayerPrivateIOS::registerMediaEngine):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::registerMediaEngine):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::registerMediaEngine):

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

        Fix WebCore's internals after r164505

        * testing/Internals.cpp:
        (WebCore::Internals::findEditingDeleteButton): The call became ambiguous after r164505.

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

        Web Inspector: JSContext inspection should report exceptions in the console
        https://bugs.webkit.org/show_bug.cgi?id=128776

        Reviewed by Timothy Hatcher.

        Include some clean up of ConsoleMessage and ScriptCallStack construction.

        Covered by existing tests.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        Simplify code now that createStackTraceFromException handles it.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
        ScriptCallStack can give us the first non-native callframe.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

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

        jsDocumentPrototypeFunctionGetElementById should not create an AtomicString for the function argument
        https://bugs.webkit.org/show_bug.cgi?id=128893

        Reviewed by Darin Adler.

        The declaration of TreeScope::getElementById() was taking an AtomicString as the parameter.
        Because of this, all the call sites manipulating String were creating and keeping alive an AtomicString
        to make the call.

        This had two negative consequences:
        -The call sites were ref-ing the ID's atomic string for no reason.
        -When there is no ID associated with the input string, an atomic string was created for the sole
         purpose of failing the query. Since IDs are stored as AtomicString, if there is not an existing
         AtomicString for the input, there is no reason to query anything.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::findAtomicString): Update this after the rename.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        Now that there are two overloads for TreeScope::getElementById(), the conversion from NSString*
        is ambiguous. I add the keyword ObjCExplicitAtomicString to force an explicit conversion to AtomicString.

        * dom/Document.idl:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getElementById):
        When getting an AtomicString, the case of a empty string is not important, use isNull() instead.
        When getting a String, get the corresponding AtomicString if any and use that for getting the element.

        * dom/TreeScope.h:
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        Solve the ambiguous call.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        This is a wonderful candidate for substringSharingImpl. The substring does not survive the call since
        the new getElementById never create any AtomicString.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        It looks like there are opportunities to get faster here, Ryosuke should have a look.

        * svg/SVGSVGElement.h:
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        Unrelated cleanup: noStyleMessage was useless.

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

        COL element in table has 0 for offsetWidth
        https://bugs.webkit.org/show_bug.cgi?id=15277

        Reviewed by David Hyatt.

        Implements offset{Left, Top, Width, Height} for table columns and column groups
        per section Extensions to the HTMLElement Interface of the CSSOM View spec,
        <http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface> (Draft 17 December 2013).

        For now, we fail almost all of the offset{Height, Top} sub-tests in the included test
        for the separate border model as we need to fix <https://bugs.webkit.org/show_bug.cgi?id=128988>.

        Test: fast/table/col-and-colgroup-offsets.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable): Initialize cached column offset top and offset height.
        We cache these offsets since they are the same for all columns in the table.
        (WebCore::RenderTable::invalidateCachedColumns): Clear cached effective column index map.
        (WebCore::RenderTable::invalidateCachedColumnOffsets): Added.
        (WebCore::RenderTable::layout): Invalidate cached column offsets as the location or height
        of one or more sections may have changed.
        (WebCore::RenderTable::updateColumnCache): Modified to build effective column index map.
        (WebCore::RenderTable::effectiveIndexOfColumn): Added.
        (WebCore::RenderTable::offsetTopForColumn): Added.
        (WebCore::RenderTable::offsetLeftForColumn): Added.
        (WebCore::RenderTable::offsetWidthForColumn): Added.
        (WebCore::RenderTable::offsetHeightForColumn): Added.
        * rendering/RenderTable.h: Make isTableColumnGroupWithColumnChildren() const.
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::offsetLeft): Added; turns around and calls RenderTable::offsetLeftForColumn().
        (WebCore::RenderTableCol::offsetTop): Added; turns around and calls RenderTable::offsetTopForColumn().
        (WebCore::RenderTableCol::offsetWidth): Added; turns around and calls RenderTable::offsetWidthForColumn().
        (WebCore::RenderTableCol::offsetHeight): Added; turns around and calls RenderTable::offsetHeightForColumn().
        * rendering/RenderTableCol.h:

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

        Build fix for iOS after r164498.

        Unreviewed.

        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        (WebCore::MediaPlayerPrivateIOS::buffered):

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

        Disallow the use of -webkit-user-modify on shadow pseudo elements
        https://bugs.webkit.org/show_bug.cgi?id=129144

        Reviewed by Geoffrey Garen.

        Completely disallow -webkit-user-modify on user agent (builtin) pseudo elements.

        We've already had rules to do this in html.css but just hard code it into the engine
        in order to eliminate the all uses of -webkit-user-modify in html.css.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/html.css:
        (input::-webkit-textfield-decoration-container):
        (input::-webkit-clear-button):
        (input[type="search"]::-webkit-search-cancel-button):
        (input[type="search"]::-webkit-search-decoration):
        (input[type="search"]::-webkit-search-results-decoration):
        (input[type="search"]::-webkit-search-results-button):
        (input::-webkit-inner-spin-button):
        (input::-webkit-input-speech-button):
        (input::-webkit-input-placeholder, isindex::-webkit-input-placeholder):
        (input[type="file"]::-webkit-file-upload-button):
        (input[type="range"]::-webkit-slider-container, input[type="range"]::-webkit-media-slider-container):
        (input[type="range"]::-webkit-slider-runnable-track):
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb):
        (input[type="color"]::-webkit-color-swatch-wrapper):
        (input[type="color"]::-webkit-color-swatch):
        (::-webkit-validation-bubble):
        (::-webkit-validation-bubble-message):
        (::-webkit-validation-bubble-text-block):
        (::-webkit-validation-bubble-heading):
        (::-webkit-validation-bubble-arrow):
        (::-webkit-validation-bubble-arrow-clipper):
        (meter::-webkit-meter-inner-element):
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimum-value):
        (meter::-webkit-meter-even-less-good-value):
        (progress::-webkit-progress-inner-element):
        (progress::-webkit-progress-bar):
        (progress::-webkit-progress-value):

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

        Fix TimeRanges layering violations
        https://bugs.webkit.org/show_bug.cgi?id=128717

        Reviewed by Jer Noble.

        No new tests, no functionality changed.

        * CMakeLists.txt:
        * GNUmakefile.list.am: Add PlatformTimeRanges.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::buffered): TimeRanges -> PlatformTimeRanges.
        * Modules/mediasource/MediaSource.h:

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): TimeRanges* -> TimeRanges&.

        * WebCore.exp.in: Update for signature changes.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj: Add PlatformTimeRanges.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::percentLoaded): Create TimeRanges from PlatformTimeRanges.
        (WebCore::HTMLMediaElement::buffered): Ditto.
        (WebCore::HTMLMediaElement::seekable): Ditto.

        * html/MediaController.cpp:
        (MediaController::buffered): TimeRanges* -> TimeRanges&.
        (MediaController::seekable): Ditto.
        (MediaController::played): Ditto.

        Move all of the logic into PlatformTimeRanges. Change API to take TimeRanges& instead of TimeRanges*.
        * html/TimeRanges.cpp:
        (WebCore::TimeRanges::create): Move to .cpp from .h.
        (WebCore::TimeRanges::TimeRanges): Initialize the PlatformTimeRanges member variable.
        (WebCore::TimeRanges::start): Passthrough to PlatformTimeRanges.
        (WebCore::TimeRanges::end): Ditto.
        (WebCore::TimeRanges::invert): Ditto.
        (WebCore::TimeRanges::copy): Ditto.
        (WebCore::TimeRanges::intersectWith): Ditto.
        (WebCore::TimeRanges::unionWith): Ditto.
        (WebCore::TimeRanges::length): Ditto.
        (WebCore::TimeRanges::add): Ditto.
        (WebCore::TimeRanges::contain): Ditto.
        (WebCore::TimeRanges::find): Ditto.
        (WebCore::TimeRanges::nearest): Ditto.
        (WebCore::TimeRanges::totalDuration): Ditto.
        * html/TimeRanges.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::buffered): TimeRanges -> PlatformTimeRanges.
        (WebCore::MediaPlayer::buffered): Ditto.
        (WebCore::MediaPlayer::seekable): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/MediaSourcePrivateClient.h:

        * platform/graphics/PlatformTimeRanges.cpp: Added.
        * platform/graphics/PlatformTimeRanges.h: Added.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::buffered): TimeRanges -> PlatformTimeRanges.
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged): Drive-by fix to log
            FunctionType notifications. ASSERT when passed an unknown notification.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformBufferedTimeRanges):  TimeRanges -> PlatformTimeRanges.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges): Ditto.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered): Ditto.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        (WebCore::MediaPlayerPrivateIOS::buffered): Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::buffered): Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::buffered): Ditto.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:

        * platform/graphics/wince/MediaPlayerPrivateWinCE.h:

        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::buffered): Ditto.
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:

2014-02-21  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 some exports.

        * WebCore.exp.in:

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

        'mouseenter' mouse compat event not fired when listeners for touch events
        https://bugs.webkit.org/show_bug.cgi?id=128534

        Reviewed by Andreas Kling.

        The code dispatching mouseenter and mouseleave events was making the assumption that
        only mouse move would cause Document::updateHoverActiveState.

        This is not true in some cases. In the case of this bug, the first touch handler sets
        the hover state. From there, the code handling enter/leave is in an inconsistent state.

        This patch changes the delivery of mouse enter/leave events to be done through the regular
        processing of mouse events. The update is done with the mouseover and mouseout events.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        (WebCore::Document::updateHoverActiveState):
        * dom/Document.h:
        * page/EventHandler.cpp:
        (WebCore::nearestCommonHoverAncestor):
        (WebCore::hierarchyHasCapturingEventListeners):
        (WebCore::EventHandler::updateMouseEventTargetNode):

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

        Crash reloading page with position: fixed content
        https://bugs.webkit.org/show_bug.cgi?id=129119
        <rdar://problem/16127090>

        Reviewed by Brent Fulgham.

        Test: platform/mac-wk2/tiled-drawing/crash-reloading-with-position-fixed-content.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::removeDestroyedNodes):
        Check the node's ID against the latched node's ID before the node is
        removed from the tree.

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

        Revert r164486, causing a number of test failures.

        Unreviewed rollout.

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

        StyleResolver::loadPendingImage() should take a reference to StylePendingImage
        <http://webkit.org/b/129021>

        Reviewed by Brent Fulgham.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage): Change pendingImage
        parameter to a reference.
        (WebCore::StyleResolver::loadPendingShapeImage): Update to use
        references.
        (WebCore::StyleResolver::loadPendingImages): Ditto.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::loadPendingImage): Change pendingImage
        parameter to a reference.

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

        Web Inspector: JSContext inspection should report exceptions in the console
        https://bugs.webkit.org/show_bug.cgi?id=128776

        Reviewed by Timothy Hatcher.

        Include some clean up of ConsoleMessage and ScriptCallStack construction.

        Covered by existing tests.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        Simplify code now that createStackTraceFromException handles it.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
        ScriptCallStack can give us the first non-native callframe.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

2014-02-21  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        Fixing the !ENABLE(SVG_FONTS) build
        https://bugs.webkit.org/show_bug.cgi?id=129150

        Reviewed by Anders Carlsson.

        No new tests required.

        * svg/SVGAltGlyphElement.cpp:
        * svg/SVGAltGlyphElement.h:
        * svg/svgtags.in:

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

        [CSS Regions] Use the named-flow-specific object RenderNamedFlowFragment instead of the generic RenderRegion whenever possible
        https://bugs.webkit.org/show_bug.cgi?id=128599

        Reviewed by Andrei Bucur.

        Use the named flow specific RenderNamedFlowFragment instead of the generic RenderRegion, whenever possible.
        Move named flow specific methods from RenderRegion to RenderNamedFlowFragment.

        No new tests required.

        * dom/Element.cpp:
        (WebCore::Element::renderNamedFlowFragment):
        (WebCore::Element::webkitRegionOverset):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * dom/Element.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::getRanges):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::updateWritingMode):
        (WebCore::compareRenderNamedFlowFragments):
        (WebCore::addFragmentToList):
        (WebCore::RenderNamedFlowThread::addFragmentToNamedFlowThread):
        (WebCore::RenderNamedFlowThread::addRegionToThread):
        (WebCore::RenderNamedFlowThread::removeRegionFromThread):
        (WebCore::RenderNamedFlowThread::computeOversetStateForRegions):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::getRanges):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

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

        [CSS Regions] Regions don't paint correctly in new-multicol elements
        https://bugs.webkit.org/show_bug.cgi?id=120711

        Reviewed by David Hyatt.

        This patch implements basic support for regions inside multi-column elements.
        Currently, the painting and hit-testing logic of CSS Regions is not aware of
        enclosing multi-column elements. The change is integrated at a layer level by
        making use of the pre-computed layer fragments during the painting and hit-testing
        phases for regions.

        There are limitations such that self painting layers found inside the named flow
        thread layer will not be correctly processed because they don't go through the
        layer fragment collection step. This is not trivial to implement because the enclosing
        pagination layer provided by the multi-column element is not visibile from inside
        the named flow thread layer and they reside in different coordinate systems.

        A side effect of this patch is the fix of regions incorrect clipping in certain
        cases (when both a region and its container clip their overflow, the region's
        content is visible outside the container).

        Tests: fast/regions/region-clipping.html
               fast/regions/regions-in-multicol-bt.html
               fast/regions/regions-in-multicol-hover-overflow.html
               fast/regions/regions-in-multicol-hover.html
               fast/regions/regions-in-multicol-lr.html
               fast/regions/regions-in-multicol-rl.html
               fast/regions/regions-in-multicol.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::paintFlowThreadIfRegionForFragments):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegionForFragments):
        * rendering/RenderLayer.h:

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

        [CSS Blending] Refactor -webkit-blend-mode to -webkit-mix-blend-mode
        https://bugs.webkit.org/show_bug.cgi?id=128805

        Reviewed by Dean Jackson.

        The spec defines the mix-blend-mode property. This means that the
        prefixed version should be -webkit-mix-blend-mode, instead of
        -webkit-blend-mode.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):

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

        Bindings tests rebaseline after r164473.

        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj mutablePoint]):
        (-[DOMTestObj immutablePoint]):
        (-[DOMTestObj mutablePointFunction]):
        (-[DOMTestObj immutablePointFunction]):
        * bindings/scripts/test/ObjC/DOMTestTypedefs.mm:
        (-[DOMTestTypedefs immutablePointFunction]):

2014-02-21  Tim Horton  <timothy_horton@apple.com>

        Remove removed symbol from exports list.

        * WebCore.exp.in:

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

        Rename EXT_draw_buffers to WEBGL_draw_buffers
        https://bugs.webkit.org/show_bug.cgi?id=128894

        Reviewed by Dean Jackson.

        I noticed the related spec has changed. Accordingly chromium also changed its implementation
        to meet the spec. So here I'd like to apply it to webkit as well.

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

        Test: fast/canvas/webgl/webgl-draw-buffers.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * html/canvas/EXTDrawBuffers.idl: Removed.
        * html/canvas/WebGLDrawBuffers.cpp: Renamed from Source/WebCore/html/canvas/EXTDrawBuffers.cpp.
        (WebCore::WebGLDrawBuffers::WebGLDrawBuffers):
        (WebCore::WebGLDrawBuffers::~WebGLDrawBuffers):
        (WebCore::WebGLDrawBuffers::getName):
        (WebCore::WebGLDrawBuffers::create):
        (WebCore::WebGLDrawBuffers::supported):
        (WebCore::WebGLDrawBuffers::drawBuffersWEBGL):
        (WebCore::WebGLDrawBuffers::satisfiesWebGLRequirements):
        * html/canvas/WebGLDrawBuffers.h: Renamed from Source/WebCore/html/canvas/EXTDrawBuffers.h.
        * html/canvas/WebGLDrawBuffers.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::drawBuffersIfNecessary):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters):
        (WebCore::WebGLRenderingContext::supportsDrawBuffers):
        * html/canvas/WebGLRenderingContext.h:

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

        m_ancestorDisabledState should never be unknown
        https://bugs.webkit.org/show_bug.cgi?id=129084

        Reviewed by Benjamin Poulain.

        In order to resolve the bug 129035, a text form control elements needs to synchronously change
        its inner text element's editability by setting or unsetting contenteditable content attribute.
        Before this patch, we could not do this because editability of a text form control dependent on
        its disabled-ness which was only computed lazily via updateAncestorDisabledState().

        This patch makes HTMLFieldSetElement and HTMLFormControlElement update this state synchronously.
        To avoid O(k) DOM traversal, where k is the depth of the tree, in insertedInto and removedFrom of
        HTMLFormControlElement on most pages, a new document-level flag, m_disabledFieldsetElementsCount,
        has been added to indicate whether the document contains any disabled fieldset or not.

        Also renamed the misleadingly named disabledAttributeChanged to disabledStateChanged, and added
        new function of the same name (disabledAttributeChanged) to be used by HTMLFieldSetElement
        for keeping the document-level flag up-to-date upon disabled attribute changes.

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

        * dom/Document.cpp:
        (WebCore::Document::Document): Initializes newly added m_disabledFieldsetElementsCount.
        (WebCore::Document::~Document): Assert that we've done house keeping right.
        * dom/Document.h:
        (WebCore::Document::hasDisabledFieldsetElement): Added.
        (WebCore::Document::addDisabledFieldsetElement): Added.
        (WebCore::Document::removeDisabledFieldsetElement): Added.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::~HTMLFieldSetElement): Removes itself from the owner document.

        (WebCore::updateFromControlElementsAncestorDisabledStateUnder): Added. Updates startNode and
        its descendants' ancestor disabled flag. We don't update controls under another disabled
        fieldset element since disabled-ness of those controls aren't affected by startNode.

        (WebCore::HTMLFieldSetElement::disabledAttributeChanged): Call addDisabledFieldsetElement and
        removeDisabledFieldsetElement to update the owner document's flag.

        (WebCore::HTMLFieldSetElement::disabledStateChanged): Renamed from disabledAttributeChanged. 
        Enable form control elements under the first legend element and disable or enable other
        descendent form controls in accordance with the presence of disabled content attribute.

        (WebCore::HTMLFieldSetElement::childrenChanged): Update disabled-ness of form controls under
        child legend elements because controls aren't disabled in the first legend element, and adding
        or removing child elements may have changed the first legend element.

        (WebCore::HTMLFieldSetElement::didMoveToNewDocument): Update the flag on the owner document.
        * html/HTMLFieldSetElement.h:

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::computeIsDisabledByFieldsetAncestor): Returns boolean instead of
        updating m_ancestorDisabledState internally. Also renamed from updateAncestorDisabledState.

        (WebCore::HTMLFormControlElement::setAncestorDisabled): Replaced ancestorDisabledStateWasChanged.
        This function updates m_disabledByAncestorFieldset and calls disabledAttributeChanged as needed.

        (WebCore::HTMLFormControlElement::disabledAttributeChanged): Added. Calls disabledStateChanged.
        (WebCore::HTMLFormControlElement::disabledStateChanged): Renamed from disabledAttributeChanged.

        (WebCore::HTMLFormControlElement::insertedInto): Update m_disabledByAncestorFieldset if there is
        a possibility (i.e. the document contains any disabled fieldset element) that this form control
        is inserted under a disabled fieldset element.

        (WebCore::HTMLFormControlElement::removedFrom): If this form control element is not disabled by
        a fieldset ancestor, then there is nothing to do. If it is, then check to see if the element is
        still disabled now that we've lost some ancestors.

        (WebCore::HTMLFormControlElement::isDisabledFormControl): No longer updates m_ancestorDisabledState
        lazily since m_disabledByAncestorFieldset is never ambiguous now.

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::disabledByAncestorFieldset): Added.

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

        Remove redundant deviceScaleFactor() functions and make callers use Document::deviceScaleFactor() when accessible.
        https://bugs.webkit.org/show_bug.cgi?id=129137

        Reviewed by Simon Fraser.

        No change in behavior.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * page/Page.cpp:
        * page/Page.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageSizeForError):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::drawPlatformResizerImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem):

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

        Stop generating Objective-C bindings for the SVG DOM
        <http://webkit.org/b/129107>

        Reviewed by Timothy Hatcher.

        Bug 114076 stopped compiling the Objective-C bindings for the
        SVG DOM, but we continued to generate the header and source
        files after that landed in r147822.  This patch also stops
        generating the unused header and source files.

        * DerivedSources.make:
        - Split BINDING_IDLS into NON_SVG_BINDING_IDLS and
          SVG_BINDING_IDLS so that they may operated on separately.
        - Define BINDING_IDLS again as the full list of IDL files.
        - Rename DOM_CLASSES to JS_DOM_CLASSES so that JavaScript
          bindings are still generated for all IDL files.
        - Add OBJC_DOM_CLASSES so that Objective-C bindings are only
          generated for non-SVG IDL files.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetBaseClass):
        (GetPropertyAttributes):
        (AddIncludesForType):
        (GenerateHeader):
        (GenerateImplementation):
        - Remove support for SVG classes.

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

        RenderBox::updateShapeOutsideInfoAfterStyleChange shows up on profiles
        https://bugs.webkit.org/show_bug.cgi?id=129075

        Reviewed by Dean Jackson.

        updateShapeOutsideInfoAfterStyleChange() showed up on profiles in content
        with no shapes. Avoid calling this if no style has shapeOutside().

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

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

        Remove unused chromium stuff in Extensions3D
        https://bugs.webkit.org/show_bug.cgi?id=129086

        Reviewed by Anders Carlsson.

        Remove GL_CHROMIUM_copy_texture and GL_CHROMIUM_flipy interfaces since they are used nowhere.

        No new tests since no functionality changed.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:

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

        [iOS] Assert / crash trying to draw empty checked input
        https://bugs.webkit.org/show_bug.cgi?id=129138

        Reviewed by Simon Fraser.

        Test: fast/forms/checkbox-empty-size.html

        * rendering/RenderThemeIOS.mm:
        (WebCore::shortened):
        Avoid a divide by 0, but checking for the condition upfront.

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

        Start fixing the view states driven by the WKScrollView
        https://bugs.webkit.org/show_bug.cgi?id=129140

        Reviewed by Tim Horton and Simon Fraser.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::scaledExposedRect):
        That comment was more confusing than helping. FrameView-relative coordinates should not need
        scaling.

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

        Start to use std::unique_ptr for DragImageLoader
        https://bugs.webkit.org/show_bug.cgi?id=129078

        Reviewed by Ryosuke Niwa.

        As a step to use std::unique_ptr, this patch replace uses of OwnPtr and PassOwnPtr
        in the DragImageLoader class with std::unique_ptr. Besides DragImageLoader is set to
        non-copyable class.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::setDragImage):
        * dom/Clipboard.h:

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

        Move the image controls setting to Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=129126

        Reviewed by Tim Horton.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * page/Settings.in:

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

        Add very basic image control rendering
        https://bugs.webkit.org/show_bug.cgi?id=129080

        Reviewed by Tim Horton.

        Test: fast/images/image-controls-basic.html

        This patch is groundwork that adds a very basic image control that can render on top of images.

        * dom/Node.h:
        (WebCore::Node:: isImageControlsRootElement): Returns false, unless you are an ImageControls object.
        * html/HTMLAttributeNames.in:

        Teach HTMLImageElement how to understand an experimental attribute to install controls,
        how to actually build the DOM to attach to the shadow root, how to tear that DOM down,
        and how to make sure that Renderers are created for that DOM:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::didAttachRenderers):
        (WebCore::HTMLImageElement::updateImageControls):
        (WebCore::HTMLImageElement::createImageControls):
        (WebCore::HTMLImageElement::destroyImageControls):
        (WebCore::HTMLImageElement::hasImageControls):
        (WebCore::HTMLImageElement::childShouldCreateRenderer):
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::hasShadowControls): For RenderImage to query when it is constructed. 

        Add a generic, platform independent ImageControls root element that does nothing:
        * html/shadow/ImageControlsRootElement.cpp: Added.
        (WebCore::ImageControlsRootElement::maybeCreate):
        (WebCore::ImageControlsRootElement::ImageControlsRootElement):
        (WebCore::ImageControlsRootElement::~ImageControlsRootElement):
        * html/shadow/ImageControlsRootElement.h: Added.

        Add a Mac-specific ImageControls root element that renders a 20x20 red box (for now):
        * html/shadow/mac/ImageControlsRootElementMac.cpp: Added.
        (WebCore::ImageControlsRootElementMac::ImageControlsRootElementMac):
        (WebCore::ImageControlsRootElementMac::~ImageControlsRootElementMac):
        (WebCore::ImageControlsRootElement::maybeCreate):
        (WebCore::ImageControlsRootElementMac::maybeCreate):
        * html/shadow/mac/ImageControlsRootElementMac.h: Added.

        Since much of the RenderMedia::layout() method is now required for RenderImage as well,
        move the logic to RenderImage. The extra work is controlled by a bool flag that will always
        be set for RenderMedias but will only be set for certain RenderImages:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::canHaveChildren):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::layoutShadowControls):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::setHasShadowControls):
        (WebCore::RenderImage::shadowControlsNeedCustomLayoutMetrics):

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::shadowControlsNeedCustomLayoutMetrics):

        * WebCore.xcodeproj/project.pbxproj:

== Rolled over to ChangeLog-2014-02-20 ==
