2014-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(JAVASCRIPT_DEBUGGER) guards
        https://bugs.webkit.org/show_bug.cgi?id=127840

        Reviewed by Mark Lam.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
        * bindings/js/PageScriptDebugServer.cpp:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptProfile.cpp:
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfileNode.h:
        * bindings/js/ScriptProfiler.cpp:
        * bindings/js/ScriptProfiler.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::resume):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::isDebuggerPausedImpl):
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSPImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * inspector/WebDebuggerAgent.cpp:
        * inspector/WebDebuggerAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::resume):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::pauseWorkerGlobalScope):
        * inspector/WorkerRuntimeAgent.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * page/Console.cpp:
        * page/Console.h:
        * page/Console.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::connectToWorkerGlobalScopeInspectorTask):
        (WebCore::WorkerMessagingProxy::connectToInspector):
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask):
        (WebCore::WorkerMessagingProxy::disconnectFromInspector):
        (WebCore::dispatchOnInspectorBackendTask):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):

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

        [iOS] cleanup MediaPlayer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=127821

        Reviewed by Jer Noble.

        Don't register MediaPlayerPrivateIOS unless the runtime setting for media player proxy is set.

        * platform/graphics/MediaPlayer.cpp: Don't define PlatformMediaEngineClassName on iOS
        (WebCore::installedMediaEngines): Drive by cleanup to return early if registration has
            already happened.
        (WebCore::MediaPlayer::MediaPlayer): Don't force-register the first media engine unless 
            isVideoPluginProxyEnabled returns true.

2014-01-29  Youenn Fablet  <youennf@gmail.com>

        Have XHR.getResponseHeader() return null and XHR.getAllResponseHeader() return the empty string in initial ready states
        https://bugs.webkit.org/show_bug.cgi?id=125840

        Reviewed by Alexey Proskuryakov.

        Merging https://chromium.googlesource.com/chromium/blink/+/d201caf874a0bd6f101f517462b3cf1d8c5fce3d
        This patch makes it clear that null/empty string is returned whenever the error flag is set.
        This new code path is covered by the added test.
        
        Test: http/tests/xmlhttprequest/response-access-on-error.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2014-01-29  Antti Koivisto  <antti@apple.com>

        REGRESSION (r162947): Repaint test results are different between WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=127814

        Reviewed by Anders Carlsson.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        
            Move repaint rect logging to RenderView.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        
            Record raw repaint rects instead of optimized ones.

2014-01-29  Brady Eidson  <beidson@apple.com>

        IDB: Serialize IDBKeyDatas to disk, not IDBKeys
        https://bugs.webkit.org/show_bug.cgi?id=127829

        Reviewed by Tim Horton.

        Move encode/decode from IDBKey to IDBKeyData.

        * Modules/indexeddb/IDBKey.cpp:
        * Modules/indexeddb/IDBKey.h:

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

2014-01-29  Antti Koivisto  <antti@apple.com>

        REGRESSION (r162947): css3/flexbox/multiline-justify-content.html and css3/flexbox/position-absolute-child.html are timing out
        https://bugs.webkit.org/show_bug.cgi?id=127809

        Reviewed by Anders Carlsson.

        These tests generate very large number of small repaint rectangles that overwhelm the region code.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * platform/graphics/Region.h:
        (WebCore::Region::gridSize):
        (WebCore::Region::Shape::gridSize):
        
            Add accessor for getting the current region grid complexity.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        
            If the region gets very complex merge the repaint rects into a single big rectangle.

2014-01-29  Radu Stavila  <stavila@adobe.com>

        [CSSRegions] Unable to scroll a scrollable container for regions using mouse wheel
        https://bugs.webkit.org/show_bug.cgi?id=123886

        When an element flowed into a scrollable region is scrolled using the mouse wheel, the event 
        needs to be propagated to the region containing that element, on top of which the cursor
        is located.

        Reviewed by Antti Koivisto.

        Tests: fast/regions/wheel-scroll-abspos.html
               fast/regions/wheel-scroll.html

        * page/EventHandler.cpp:
        (WebCore::scrollNode):
        (WebCore::EventHandler::defaultWheelEventHandler):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        (WebCore::RenderBox::scrollWithWheelEventLocation):
        * rendering/RenderBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionFromAbsolutePointAndBox):
        * rendering/RenderFlowThread.h:

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

        REGRESSION(r162922): [SOUP] Several tests are failing in EFL and GTK+ after r162922
        https://bugs.webkit.org/show_bug.cgi?id=127836

        Reviewed by Gustavo Noronha Silva.

        The problem is that I assumed that several things done in
        ResourceRequest::soupURI() were always desired, so I moved them to
        URL. This patch restores the previous behaviour, so that those
        tings are only done right before making a request.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::createSoupURI):
        * platform/soup/URLSoup.cpp:
        (WebCore::URL::createSoupURI):

2014-01-29  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-describedby with ATK_RELATION_DESCRIBED_BY
        https://bugs.webkit.org/show_bug.cgi?id=121684

        Reviewed by Mario Sanchez Prada.

        Exposed aria-describedby by ATK_RELATION_DESCRIBED_BY.
        Moved elementsFromAttribut to AccessibilityObject to have common interface
        for AccessibilityNodeObject and AccessibilityRenderObject. Implemented
        supportsARIADescribedBy and ariaDescribedByElements to better deal with aria-describedby attribute.

        No new tests. Covered by existed one.

        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::elementsFromAttribute):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIADescribedBy):
        (WebCore::AccessibilityObject::ariaDescribedByElements):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsARIADescribedBy):
        (WebCore::AccessibilityRenderObject::ariaDescribedByElements):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

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

        [CSS Grid Layout] minmax() should be a CSSFunction instead of a CSSValueList
        https://bugs.webkit.org/show_bug.cgi?id=127057

        Reviewed by Antti Koivisto.

        We were incorrectly dumping minmax(x,y) as "x y" instead of
        "minmax(x,y)". That's because we were treating minmax() internally
        as a CSSValueList instead of a CSSFunction. Replaced that and also
        added some extra information to our tests in order to check that
        we don't regress. From now on the CSS grid layout testing helper
        functions print not only the computed style but also the contents
        of element.style.webkitGridDefinition{Columns|Rows}.

        * css/CSSFunctionValue.h:
        (WebCore::CSSFunctionValue::arguments):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        (WebCore::CSSParser::parseGridTrackSize):
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackSize):

2014-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        Rename notifyRendererOfSelectionChange
        https://bugs.webkit.org/show_bug.cgi?id=127831

        Reviewed by Antti Koivisto.

        Renamed notifyRendererOfSelectionChange to updateSelectionCachesIfSelectionIsInsideTextFormControl.

        * WebCore.order: Removed the exported symbol name as it's not used in WebKit or WebKit2 code.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::updateSelectionCachesIfSelectionIsInsideTextFormControl): Don't update the style since the existence
        of text form control's shadow DOM no longer depends on renderer.
        * editing/FrameSelection.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selectionChanged): Don't check renderer() for the same reason.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):

2014-01-28  Jer Noble  <jer.noble@apple.com>

        [Mac] Handle NSURLAuthenticationMethodServerTrust challenges from -resourceLoader:shouldWaitForResponseToAuthenticationChallenge:
        https://bugs.webkit.org/show_bug.cgi?id=127806

        Reviewed by Eric Carlson.

        In addition to the normal "user/password" NSURLAuthenticationChallenges, the 
        -resourceLoader:shouldWaitForResponseToAuthenticationChallenge: delegate method will
        ask us to confirm server certificate chains. Rather than pop up an authentication
        dialog (which won't work anyway) we will now just drop such requests and continue
        on normally.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):

2014-01-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162987.
        http://trac.webkit.org/changeset/162987
        https://bugs.webkit.org/show_bug.cgi?id=127825

        Broke Mountain Lion build (Requested by andersca on #webkit).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):

2014-01-28  Enrica Casucci  <enrica@apple.com>

        Add support for ActionSheets in WK2 for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=127586
        <rdar://problem/15283667>

        Reviewed by Benjamin Poulain.

        This patch contains some WebCore changes required to
        implement support for ActionSheets.
        It adds copyURL implementation for iOS in the Editor
        class and fixes some bugs in the iOS specific pasteboard
        writing code.
        The changes to Localizable.strings are the result of
        running update-webkit-localizedstrings script.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2014-01-28  Andy Estes  <aestes@apple.com>

        [iOS] REGRESSION (r162663): Webpages have strange artifacts or corruption around tile boundaries
        https://bugs.webkit.org/show_bug.cgi?id=127823

        Reviewed by Daniel Bates.

        Original patch by Simon Fraser.

        * platform/ScrollView.cpp: Specify LegacyIOSDocumentViewRect when calling visibleContentRect().

2014-01-28  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Adjust inset sizing syntax to the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=127785

        Reviewed by Bem Jones-Bey.

        According to the latest CSS Shapes specification [1], the width arguments of inset should
        follow the syntax of the margin shorthand, which let us set all four insets with one, two
        or four values. This patch updates the behavior and updates the affected tests.

        [1] http://dev.w3.org/csswg/css-shapes/#funcdef-inset

        Existing tests have been updated.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseInsetRoundedCorners):
        (WebCore::CSSParser::parseBasicShapeInset):

2014-01-28  Oliver Hunt  <oliver@apple.com>

        Make DOM attributes appear to be faux accessor properties
        https://bugs.webkit.org/show_bug.cgi?id=127797

        Reviewed by Michael Saboff.

        Refactor the bindings generator, and make sure we emit
        the CustomAccessor flag on properties that should 
        appear to be accessors.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateAttributesHashTable):
        (GenerateImplementation):

2014-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Support @scope in HTML tables
        https://bugs.webkit.org/show_bug.cgi?id=127688

        Reviewed by Mario Sanchez Prada.

        Add support for scope attribute so that row headers and column headers
        are now exposed at the table cell level where appropriate.

        Test: platform/mac/accessibility/table-scope.html

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::parentTable):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columns):
        (WebCore::AccessibilityTable::rows):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::isTableHeaderCell):
        (WebCore::AccessibilityTableCell::isTableCellInSameRowGroup):
        (WebCore::AccessibilityTableCell::isTableCellInSameColGroup):
        (WebCore::AccessibilityTableCell::columnHeaders):
        (WebCore::AccessibilityTableCell::rowHeaders):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):
        * accessibility/AccessibilityTableRow.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2014-01-28  Brent Fulgham  <bfulgham@apple.com>

        Improve latching behavior for wheel events
        https://bugs.webkit.org/show_bug.cgi?id=127386
        <rdar://problem/12176858>

        Reviewed by Simon Fraser.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::clearLatchedNode): Added
        (WebCore::ScrollingTree::latchedNode): Added
        (WebCore::ScrollingTree::removeDestroyedNodes): Clear latched node if it's being removed.
        (WebCore::ScrollingTree::ScrollingTree): Initialize new value used for tracking
        scroll latching state.
        (WebCore::ScrollingTree::setLatchedNode): Added
        (WebCore::ScrollingTree::setOrClearLatchedNode): Added
        Set latched node when beginning a swipe event, or clear latched node when scroll/momentum ends.
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Check for an existing
        latched node and stay in fast scrolling mode if possible. If the current event should
        start a swipe event, clear the current latched node so we can correctly find and assign
        the new latch node.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasLatchedNode): Added
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent): Determine latching state
        based on wheel event state and position of mouse pointer in the document.
        * platform/ScrollAnimator.cpp:
        (ScrollAnimator::handleWheelEvent): Always treat PlatformWheelEventPhaseMayBegin
        as successfully handled so that it does not "bubble back up" to the root of
        the scrolling tree.   

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

        ASSERT_WITH_SECURITY_IMPLICATION in WebCore::InlineTextBox::paint
        https://bugs.webkit.org/show_bug.cgi?id=114586

        Reviewed by Dave Hyatt.

        Taken mostly from https://chromium.googlesource.com/chromium/blink/+/cb2297db16f2e9328cb4dd8b552093d6b22340a8

        If RenderQuote is a subclass of RenderObject, it can't be split by the first-letter CSS pseudoclass.
        Instead, we should make it a subclass of RenderElement, so that it can be split properly.

        Test: fast/css-generated-content/quote-first-letter.html

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didRecalcStyle):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::RenderQuote):
        (WebCore::RenderQuote::willBeDestroyed):
        (WebCore::RenderQuote::willBeRemovedFromTree):
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::updateText):
        (WebCore::RenderQuote::computeText):
        (WebCore::RenderQuote::updateDepth):
        * rendering/RenderQuote.h:
        * rendering/style/ContentData.cpp:
        (WebCore::QuoteContentData::createContentRenderer):

2014-01-28  Antti Koivisto  <antti@apple.com>

        Document::topDocument() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=127786

        Reviewed by Darin Adler.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::mainFrame):
        (WebCore::AccessibilityObject::topDocument):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityContainer]):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::destroyRenderTree):
        (WebCore::Document::clearAXObjectCache):
        (WebCore::Document::existingAXObjectCache):
        (WebCore::Document::axObjectCache):
        (WebCore::Document::implicitClose):
        (WebCore::Document::topDocument):
        (WebCore::Document::topOrigin):
        (WebCore::Document::webkitCancelFullScreen):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::incrementScrollEventListenersCount):
        (WebCore::DOMWindow::decrementScrollEventListenersCount):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isReplacementObscured):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        
2014-01-28  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        Sticky positioning is broken for table rows
        https://bugs.webkit.org/show_bug.cgi?id=112024

        Reviewed by Simon Fraser.

        Enable sticky positioning for table elements. 
        Also includes fix for bug ​wkb.ug/105654
        I don't have access to this bug, but from related commit message I 
        assume it says about "Heap use after free problem".
        Debugging showed that it wasn't heap use after free. 
        The real problem that RenderObject::container() returns object which is
        not RenderBlock and it is used as RenderBlock in 
        RenderBox::containingBlockLogicalHeightForPositioned() method.
        Added extra isRenderBlock check and search for containingBlock if 
        current block is not RenderBlock.
        
        Tests: fast/css/sticky/sticky-table-row-top.html
               fast/css/sticky/sticky-table-thead-top.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        * rendering/RenderTableRow.h:

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

        Fixing several incorrect assumptions with handling isolated inlines.
        https://bugs.webkit.org/show_bug.cgi?id=127608

        Reviewed by Simon Fraser.

        Fixing capitalization.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setUpResolverToResumeInIsolate):
        (WebCore::constructBidiRunsForSegment):

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

        Fixing several incorrect assumptions with handling isolated inlines.
        https://bugs.webkit.org/show_bug.cgi?id=127608

        Reviewed by Dave Hyatt.

        First, when an isolated inline spans multiple lines, we aren't guaranteed
        to exit BidiResolver with a nested inline count of zero. Removing the
        assert that says otherwise.
        
        Previously in constructBidiRunsForSegment, we called bidiFirst in
        an attempt to properly setup the isolatedResolver for any dom/style
        that applied, but this only worked on the first line the isolated
        inline appeared in. Adding a function that approaches this properly
        by recursing through the parents of the starting object for the line
        and post-fixing direction attributes to the resolver.
        
        Finally, addressing an issue where the line following a removed isolated
        inline (with a continuation) failed to be marked dirty.

        Merged from Blink: https://chromium.googlesource.com/chromium/blink/+/72698f203b1c50900e535b80945563b92b7eef23

        Tests: fast/text/nested-bidi-assert.html
               fast/text/nested-bidi-with-continuation-crash.html

        * platform/text/BidiResolver.h:
        (WebCore::Run>::~BidiResolver):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setupResolverToResumeInIsolate):
        (WebCore::constructBidiRunsForSegment):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

2014-01-28  Antti Koivisto  <antti@apple.com>

        REGRESSION(r162837): 5% regression on html5-full-render and 3% regression in DoYouEvenBench
        https://bugs.webkit.org/show_bug.cgi?id=127722

        Reviewed by Darin Adler.

        Accumulate repaint region in RendeView instead of flushing rects directly to the system.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateLayout):
        (WebCore::Document::topDocument):
        
            Make less silly.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::flushAccumulatedRepaintRegion):
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        (WebCore::RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator):
        * rendering/RenderView.h:

2014-01-28  Jeremy Jones  <jeremyj@apple.com>

        HTMLMediaElement::m_platformLayerBorrowed is uninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=127759

        Reviewed by Eric Carlson.

        Initalize m_platformLayerBorrowed to false.

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

2014-01-28  Jer Noble  <jer.noble@apple.com>

        [Mac] Use explicit, rather than canonical, AudioFormatFlags and types.
        https://bugs.webkit.org/show_bug.cgi?id=127781

        Reviewed by Eric Carlson.

        Since every mac platform uses Float32 audio samples, use these types explicitly
        rather than the implicit, canonical AudioSampleType type. Once we're using Float32
        explicity, we can also use the explicit kAudioFormatFlagsNativeFloatPacked flag
        rather than the canonical version.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::configure):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

2014-01-27  Alexey Proskuryakov  <ap@apple.com>

        Expose SQL database creation and modification times
        https://bugs.webkit.org/show_bug.cgi?id=127728

        Reviewed by Brady Eidson.

        * platform/FileSystem.h:
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileCreationTime):
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileCreationTimeFromFindData):
        (WebCore::getFileCreationTime):
        Added functions to get file creation times. Not all OSes support that, but Darwin
        and Windows do, as (I think) various BSD flavors.

        * platform/gtk/FileSystemGtk.cpp: Added a stub for getFileCreationTime().

        * platform/sql/SQLiteFileSystem.h:
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::databaseCreationTime):
        (WebCore::SQLiteFileSystem::databaseModificationTime):
        Expose it in the same strange manner other database file operations are.

        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::creationTime):
        (WebCore::DatabaseDetails::modificationTime):
        Added creation and modification times to DatabaseDetails.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase):
        (WebCore::DatabaseManager::openDatabaseBackend):
        ProposedDatabase is an unfortunate mechanism for communicating quota errors to the
        client, we should really straighten it up. But for now, just leave the times uninitialized.

        * Modules/webdatabase/DatabaseBackendBase.cpp: (WebCore::DatabaseBackendBase::details):
        This code path is for handling quota errors, so there is no need to initialize most
        of DatabaseDetails here as well.

        * Modules/webdatabase/DatabaseTracker.cpp: (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseTracker.h:
        Fill in database file times. Inlined and removed usageForDatabase function to
        avoid rebuilding the path multiple times.

2014-01-28  Jer Noble  <jer.noble@apple.com>

        Setting muted attribute on <video> element is not reflected in controls
        https://bugs.webkit.org/show_bug.cgi?id=127726

        Reviewed by Eric Carlson.

        If the 'muted' IDL attribute is queried after the 'muted' and 'src' content attributes are
        set but before loading begins, it will return 'false' until loading begins, but with no
        way to query whether that value is valid, nor firing a volumechange event when its value
        changes.

        The HTML spec says that the 'muted' content attribute controls whether audio output is
        muted "when the media element is created", not when loading begins, but we don't
        necessarily have a signal that the element is fully parsed.  Additionally, this means its
        impossible to make an element via script and get this behavior.

        So the new behavior is that the 'muted' IDL attribute will always reflect the 'muted'
        content attribute up until one of the following three conditions:

        - The 'muted' IDL attribute is set via script.
        - The element is inserted in the document.
        - The element begins loading.

        After the first one of the above conditions, the 'muted' IDL attribute will no longer
        change when the 'muted' content attribute changes.

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

2014-01-28  Anders Carlsson  <andersca@apple.com>

        Add stubbed out VisitedLinkProvider class
        https://bugs.webkit.org/show_bug.cgi?id=127744

        Reviewed by Andreas Kling.

        This is a first step towards moving responsibility of visited links from 
        the page group to a separate object.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        * page/PageGroup.h:
        (WebCore::PageGroup::visitedLinkProvider):
        * page/VisitedLinkProvider.cpp: Added.
        (WebCore::VisitedLinkProvider::VisitedLinkProvider):
        (WebCore::VisitedLinkProvider::~VisitedLinkProvider):
        * page/VisitedLinkProvider.h: Added.
        (WebCore::VisitedLinkProvider::create):

2014-01-28  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Add support for menclose element
        https://bugs.webkit.org/show_bug.cgi?id=85729

        Reviewed by Chris Fleizach.

        Added support for menclose element. MathML <menclose> element renders
        its content inside an enclosing notation specified by the notation
        attribute. The notation attribute can have values longdiv, box, left,
        right, top, bottom , radical, madruwb, actuarial, roundedbox, circle,
        updiagonalstrike, downdiagonalstrike, verticalstrike and
        horizontalstrike.

        Tests: mathml/presentation/menclose-add-children.html
               mathml/presentation/menclose-notation-attribute-add.html
               mathml/presentation/menclose-notation-attribute-change-value.html
               mathml/presentation/menclose-notation-attribute-remove.html
               mathml/presentation/menclose-notation-attribute-set1.html
               mathml/presentation/menclose-notation-attribute-set2.html
               mathml/presentation/menclose-notation-no-overlap.html
               mathml/presentation/menclose-notation-radical.html
               mathml/presentation/menclose-remove-children.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mathml.css:
        (mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose):
        * mathml/MathMLAllInOne.cpp:
        * mathml/MathMLElement.h:
        * mathml/MathMLInlineContainerElement.cpp:
        * mathml/MathMLMencloseElement.cpp: Added.
        (WebCore::MathMLMencloseElement::MathMLMencloseElement):
        (WebCore::MathMLMencloseElement::create):
        (WebCore::MathMLMencloseElement::createElementRenderer):
        (WebCore::MathMLMencloseElement::isPresentationAttribute):
        (WebCore::MathMLMencloseElement::finishParsingChildren):
        (WebCore::MathMLMencloseElement::collectStyleForPresentationAttribute):
        (WebCore::MathMLMencloseElement::longDivLeftPadding):
        * mathml/MathMLMencloseElement.h: Added.
        (WebCore::toMathMLMencloseElement):
        * mathml/mathattrs.in:
        * mathml/mathtags.in:
        * rendering/mathml/RenderMathMLMenclose.cpp: Added.
        (WebCore::RenderMathMLMenclose::RenderMathMLMenclose):
        (WebCore::RenderMathMLMenclose::addChild):
        (WebCore::RenderMathMLMenclose::computePreferredLogicalWidths):
        (WebCore::RenderMathMLMenclose::updateLogicalHeight):
        (WebCore::RenderMathMLMenclose::paint):
        (WebCore::RenderMathMLMenclose::checkNotationalValuesValidity):
        * rendering/mathml/RenderMathMLMenclose.h: Added.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::RenderMathMLSquareRoot):
        (WebCore::RenderMathMLSquareRoot::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLSquareRoot.h:
        Added new file related to menclose element implementation. Menclose
        element is created and while parsing its notation attribute based on
        its values like top, left CSSBorder properties are applied and for
        values like circle, verticalstrike, longidv its taken care in paint.
        For radical value an anonymous RenderMathMLSquareRoot is created as
        a child of menclose.

2014-01-28  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] accessibility/range-alter-by-percent.html is failing after r162587.
        https://bugs.webkit.org/show_bug.cgi?id=127774

        Reviewed by Mario Sanchez Prada.

        Implicit value of step in range type elements should be one or larger.

        No new tests. Covered by exiting one.

        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        (webkitAccessibleValueGetMinimumIncrement):

2014-01-28  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/127767> Disable some deprecation warnings to fix the build.

        Reviewed by Ryosuke Niwa.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper renderWidgetChildren]):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::configure):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

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

        [SOUP] Remove soupURIToKURL
        https://bugs.webkit.org/show_bug.cgi?id=127104

        Reviewed by Martin Robinson.

        In favor of a URL constructor receiving a SoupURI. Also add a
        method to URL to create a soupURI.

        * GNUmakefile.list.am: Remove SoupURIUtils and add URLSoup.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * platform/URL.h: Add URL constructor receiving a SoupURI and
        createSoupURI() to create a new soupURI for the URL.
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM): Use URL::createSoupURI().
        (WebCore::cookiesForSession): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Use the new URL constructor instead of
        soupURIToKURL.
        (WebCore::createSoupRequestAndMessageForHandle): Use URL::createSoupURI().
        * platform/network/soup/ResourceRequest.h: Rename soupURI as
        createSoupURI to make it clear that the method returns a newly
        created SoupURI.
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageMembers): Use URL::createSoupURI().
        (WebCore::ResourceRequest::updateSoupMessage): Ditto.
        (WebCore::ResourceRequest::updateFromSoupMessage): Use the new URL
        constructor instead of soupURIToKURL.
        (WebCore::ResourceRequest::createSoupURI): Use URL::createSoupURI().
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage): Use the new
        URL constructor instead of soupURIToKURL.
        * platform/network/soup/SoupURIUtils.cpp: Removed.
        * platform/network/soup/SoupURIUtils.h: Removed.
        * platform/soup/URLSoup.cpp: Added.
        (WebCore::URL::URL):
        (WebCore::URL::createSoupURI):

2014-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid unnecessary string duplications in FileSystemGtk
        https://bugs.webkit.org/show_bug.cgi?id=127469

        Reviewed by Martin Robinson.

        We are using fileSystemRepresentation() everywhere internally
        which returns a CString that always duplicates the string.
        Add unescapedFilename() internal helper function that returns a
        GUniquePtr and used it everywhere instead of fileSystemRepresentation().

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::unescapedFilename):
        (WebCore::fileSystemRepresentation):
        (WebCore::filenameForDisplay):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileStat):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::getFileMetadata):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::pathGetFileName):
        (WebCore::directoryName):
        (WebCore::listDirectory):
        (WebCore::openFile):

2014-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make webkit_uri_scheme_request_get_web_view() work with CustomProtocols
        https://bugs.webkit.org/show_bug.cgi?id=127614

        Reviewed by Gustavo Noronha Silva.

        Add API to set the page identifier that initiated the request to
        ResourceRequest, and remove the initiatingPageID() method from the
        NetworkingContext class.

        * platform/network/NetworkingContext.h:
        * platform/network/ResourceHandle.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupRequestAndMessageForHandle):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::initiatingPageID):
        (WebCore::ResourceRequest::setInitiatingPageID):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupRequest):
        (WebCore::ResourceRequest::updateFromSoupRequest):

2014-01-27  Tim Horton  <timothy_horton@apple.com>

        Lots of varied and random crashes on the scrolling thread (ScrollbarPainters are going away)
        https://bugs.webkit.org/show_bug.cgi?id=127734
        <rdar://problem/15906263>

        Reviewed by Simon Fraser.

        * page/scrolling/ScrollingStateScrollingNode.h:
        Retain the ScrollbarPainters in the scrolling state tree.

2014-01-27  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed iOS build fix. FALLTHROUGHs for iOS.

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

2014-01-27  Roger Fong  <roger_fong@apple.com>

        WebGLLoadPolicy::WebGLAsk is an unnecessary value.
        https://bugs.webkit.org/show_bug.cgi?id=127755

        Reviewed by Anders Carlsson.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderTypes.h:

2014-01-27  Brady Eidson  <beidson@apple.com>

        IDB: Cursor support - Messaging, IPC, Threading plumbing
        https://bugs.webkit.org/show_bug.cgi?id=127736

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBCursorBackendOperations.h:
        (WebCore::CursorIterationOperation::cursorID):
        (WebCore::CursorAdvanceOperation::cursorID):

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::OpenCursorOperation::transactionID):

        * WebCore.exp.in:

2014-01-27  Joseph Pecoraro  <pecoraro@apple.com>

        WebCore: Enable -Wimplicit-fallthrough and add FALLTHROUGH annotation where needed
        https://bugs.webkit.org/show_bug.cgi?id=127671

        Reviewed by Ryosuke Niwa.

        * Configurations/Base.xcconfig:
        Enable the warning.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Caught a bug. CSSPropertyWebkitAlt could fall through to CSSPropertyQuotes.

        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        Caught a bug. CSSPropertyWebkitSvgShadow could fall through to CSSPropertyMaskType.

        * platform/Decimal.cpp:
        (WebCore::Decimal::fromString):
        Possible bug. Implementation doesn't seem to match its documentation.
        Filed an issue to follow-up on this unclear function.

        * css/makeprop.pl:
        * css/makevalues.pl:
        * platform/ColorData.gperf:
        Ignore implicit fallthrough warnings in generated code. gperf outputs
        a "/*FALLTHROUGH*/" comment, but is not easily customizable to change
        this output. Easiest to just ignore the warning for now.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        There has been a "fall through" comment immediately followed by a break
        since its introduction in 2003. Removing the inaccurate comment.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase accessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase accessibilityHelpText]):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::deserialize):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::realLex):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::selectorText):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * dom/Node.cpp:
        (WebCore::appendTextContent):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/EventSource.cpp:
        (WebCore::EventSource::parseEventStream):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::toStringForTime):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes):
        * platform/graphics/win/FullScreenController.cpp:
        (FullScreenController::Private::fullscreenClientWndProc):
        * platform/text/BidiResolver.h:
        (WebCore::Run>::updateStatusLastFromCurrentDirection):
        (WebCore::Run>::createBidiRunsForLine):
        * platform/text/win/LocaleWin.cpp:
        (WebCore::LocaleWin::initializeLocaleData):
        * rendering/PointerEventsHitRules.cpp:
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::newLine):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::originalText):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::replacedContentRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWordSpacing):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/SVGMarkerData.h:
        (WebCore::SVGMarkerData::updateMarkerDataForPathElement):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parsePathDataFromSource):
        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        Add annotation or break before falling into a default:break;

2014-01-27  Andreas Kling  <akling@apple.com>

        Allow mmap encoded data replacement for WOFF fonts.
        <https://webkit.org/b/127737>

        We always have to convert WOFF fonts to SFNT format. This happens
        in a separate buffer from the CachedFont's internal resource buffer.
        Because of this, there's no need to protect the original buffer from
        mmap replacement.

        With this change, WOFF web fonts are no longer duplicated between
        the network and web processes.

        Reviewed by Brady Eidson.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::mayTryReplaceEncodedData):
        * loader/cache/CachedFont.h:

2014-01-27  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Add support for block progression axis and reverse direction
        https://bugs.webkit.org/show_bug.cgi?id=127715

        Reviewed by thorton.

        This patch adds support for -webkit-progression-direction and -webkit-progression-axis
        to the new column code. This allows columns to stack along the block axis instead of
        the inline axis or to reverse directions along that progression axis.

        Added fast/multicol/newmulticol/progression-reverse.html and
              fast/multicol/newmulticol/progression-reverse-overflow.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isTopLayoutOverflowAllowed):
        (WebCore::RenderBlock::isLeftLayoutOverflowAllowed):
        New functions have been added for top and left layout overflow in order to get
        a bunch of code out of RenderBox that didn't belong there. RenderBlock is overriding
        the functions for the old multicolumn layout code to keep it working.

        * rendering/RenderBlock.h:
        Added the new top/left overflow functions.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
        Moved from RenderBlock, since it didn't belong there.

        (WebCore::RenderBlockFlow::isTopLayoutOverflowAllowed):
        (WebCore::RenderBlockFlow::isLeftLayoutOverflowAllowed):
        * rendering/RenderBlockFlow.h:
        Overridden for the new multi-column code to specify when top/left overflow are
        allowed (e.g., when the columns go backwards).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow):
        Overridden to use the new top/left overflow functions.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::isTopLayoutOverflowAllowed):
        (WebCore::RenderBox::isLeftLayoutOverflowAllowed):
        Added base definitions that look at direction and writing-mode.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isTopLayoutOverflowAllowed):
        (WebCore::RenderFlexibleBox::isLeftLayoutOverflowAllowed):
        * rendering/RenderFlexibleBox.h:
        Overrides for flexible box of the top/left overflow functions.

        * rendering/RenderMultiColumnFlowThread.h:
        Make sure requiresBalancing() is set to false if the axis of the columns
        is block, since at least right now, we don't support balancing columns
        along the block axis. (In theory we could support this in the future, but
        nobody has requested it.)

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        Remove the code that expands the width of multi column sets. We now always
        let their logical width match the containing block's content width and instead
        add the overflow to the set itself.

        (WebCore::RenderMultiColumnSet::columnRectAt):
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        (WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting):
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        Patch all of these functions to know how to handle a block axis or reversed
        direction.

        (WebCore::RenderMultiColumnSet::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.h:
        Make multi-column set add in its overflow in the same way that the old
        multi-column code did, by looking at the last column rect. (This is really
        not a very good way to do it, but it's the same as the old code for now.)

2014-01-27  Daniel Bates  <dabates@apple.com>

        Fix the Mac build following <http://trac.webkit.org/changeset/162887>
        (https://bugs.webkit.org/show_bug.cgi?id=127703)

        Export symbol for WebCore::AXObjectCache::enableAccessibility().

        * WebCore.exp.in:

2014-01-27  Roger Fong  <roger_fong@apple.com>

        [Mac] Unreviewed build fix. Add missing export symbol.

        * WebCore.exp.in:

2014-01-27  Roger Fong  <roger_fong@apple.com>

        [Windows] Tests crashing on Windows after r162816.
        https://bugs.webkit.org/show_bug.cgi?id=127703.

        Reviewed by Alexey Proskuryakov.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::disableAccessibility):
        * accessibility/AXObjectCache.h: Un-inline some methods so that they can be exported.

2014-01-27  Andy Estes  <aestes@apple.com>

        Update bindings test expectations after r162872

        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:

2014-01-27  Andy Estes  <aestes@apple.com>

        Scrub WebKit API headers of WTF macros
        https://bugs.webkit.org/show_bug.cgi?id=127706

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_INSPECTOR.
        * bindings/objc/DOMEvents.h: Guarded include of
        DOM{Gesture,Touch}Event.h with TARGET_OS_IPHONE, since those features
        are always enabled on iOS.
        * platform/graphics/mac/MediaPlayerProxy.h: Replaced PLATFORM(IOS) with
        TARGET_OS_IPHONE and ensured ENABLE_IOS_AIRPLAY is defined.
        * platform/ios/SystemMemory.h: Replaced PLATFORM(IOS) with
        TARGET_OS_IPHONE.
        * platform/ios/wak/WKGraphics.h: Replaced PLATFORM(IOS_SIMULATOR) with
        TARGET_IPHONE_SIMULATOR.

2014-01-27  Jer Noble  <jer.noble@apple.com>

        [iOS] Use callOnMainThread() not dispatch_async() in MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=127701

        Reviewed by Eric Carlson.

        dispatch_async(dispatch_get_main_queue(), ...) used to be fine so long as the main
        thread was also the web thread. But since that's not the case on iOS, we should be
        using callOnMainThread() instead (because it dispatches to the web thread, not as
        its name implies, the main thread).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):

2014-01-27  Maciej Stachowiak  <mjs@apple.com>

        Move Conditional=BLOB from URL interface to Blob-related methods, to prepare for adding URL API
        https://bugs.webkit.org/show_bug.cgi?id=127719

        Reviewed by Sam Weinig.

        * html/DOMURL.idl:

2014-01-27  Andreas Kling  <akling@apple.com>

        Remove unused USE(OPENTYPE_SANITIZER) code.
        <https://webkit.org/b/127710>

        This code was only used by the Chromium port.

        Reviewed by Darin Adler.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        * platform/graphics/WOFFFileFormat.cpp:
        * platform/graphics/WOFFFileFormat.h:
        * platform/graphics/opentype/OpenTypeSanitizer.cpp: Removed.
        * platform/graphics/opentype/OpenTypeSanitizer.h: Removed.


2014-01-27  Andy Estes  <aestes@apple.com>

        Stop the code generator from adding ENABLE() macros to Objective-C DOM headers
        https://bugs.webkit.org/show_bug.cgi?id=127706

        Reviewed by David Kilzer.

        Instead of adding ENABLE() macros to generated Objective-C DOM
        headers, which might become Public or Private headers, elide generated
        code for disabled features.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateInterface): Passed $defines to GenerateHeader.
        (ConditionalIsEnabled): Checked if the given conditional is found in
        $defines. Handled conditionals with '&' and '|'.
        (GenerateHeader): Rather than calling GenerateConditionalString to
        generate an "#if ENABLE(...)", called ConditionalIsEnabled() to see
        whether we should generate code for the given constant, attribute, or
        function.

2014-01-27  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove restriction of negative values for inset parameters
        https://bugs.webkit.org/show_bug.cgi?id=127704

        Reviewed by Darin Adler.

        The latest version of CSS Shapes (http://www.w3.org/TR/css-shapes/) specification
        doesn't contain any restriction of using negative values for the inset sizing.
        I removed the restriction from the code and added testing for them.

        Existing tests have been extended with the new cases.

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

2014-01-27  Eric Carlson  <eric.carlson@apple.com>

        [iOS] preload=none prevents play()
        https://bugs.webkit.org/show_bug.cgi?id=127702

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::potentiallyPlaying): Cleanup logic to make it simpler to understand,
            fix logic error introduced in r161973
        (WebCore::HTMLMediaElement::updatePlayState): Conditionalize some iOS-only code on whether or not
            we are using the plug-in proxy.

2014-01-27  Brady Eidson  <beidson@apple.com>

        IDB: LevelDB backing store shouldn't know about IDBCursor or IDBCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=127708

        Reviewed by Tim Horton.

        Move that knowledge to the IDBCursorBackendOperations inside the callback.

        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h:

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::cursorAdvance):
        (WebCore::IDBServerConnectionLevelDB::cursorIterate):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-27  Brady Eidson  <beidson@apple.com>

        IDB: Remove unused concept of "cursor prefetch"
        https://bugs.webkit.org/show_bug.cgi?id=127700

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-27  Brady Eidson  <beidson@apple.com>

        IDB: Refactor out the last of the operation callbacks that are called by the LevelDB backing store
        https://bugs.webkit.org/show_bug.cgi?id=127592

        Reviewed by Tim Horton.

        For each of the 3 remaining operations where the backing store calls callbacks directly,
        factor out the callbacks to the operation itself.


        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162755.
        http://trac.webkit.org/changeset/162755
        https://bugs.webkit.org/show_bug.cgi?id=127696

        not quite right, breaks subframe scrolling in some cases
        (Requested by thorton on #webkit).

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::removeDestroyedNodes):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent):

2014-01-27  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] inset() function with multiple spaces on element style
        https://bugs.webkit.org/show_bug.cgi?id=127617

        Reviewed by Dirk Schulze.

        When only a subset of parameters were defined for an inset shape, the built
        inset string contained some extra spaces. This patch fixes the behavior and
        adds tests for the case. I also removed the string allocation optimization from
        buildInsetString, since it's not worthwhile to always allocate as many memory
        as needed for a fully defined inset.

        I added the new test cases to the shapes parser code test.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildInsetString):

2014-01-27  Antti Koivisto  <antti@apple.com>

        * WebCore.exp.in: Add export needed for iOS.

2014-01-27  Antti Koivisto  <antti@apple.com>

        REGRESSION(r133214): Don't invalidate style when adding classes that don't match rules
        https://bugs.webkit.org/show_bug.cgi?id=126177

        Reviewed by Anders Carlsson.
        
        Spotted by Elliott Sprehn in Chromium.

        * dom/Element.cpp:
        (WebCore::checkSelectorForClassChange):
        
            Remove unnecessary templating.

        (WebCore::Element::classAttributeChanged):
        
            Fix logic error with 'continue'.

2014-01-27  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Lockup when playing Icecast radio
        https://bugs.webkit.org/show_bug.cgi?id=127452

        Reviewed by Philippe Normand.

        No new tests. This bug can only be demonstrated with an Icecast stream, and it's
        not clear how to do that in our testing framework.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Wait until we unlock to send notifications.

2014-01-27  Jessie Berlin  <jberlin@apple.com>

        Build fix after r162838.

        * page/FrameView.cpp:
        Remove an unused constant.

2014-01-27  Antti Koivisto  <antti@apple.com>

        Remove repaint throttling
        https://bugs.webkit.org/show_bug.cgi?id=127681

        Reviewed by Sam Weinig.

        Nowadays we throttle layer flushes. This code is unnecessary.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Element.cpp:
        (WebCore::Element::classAttributeChanged):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::insertDictatedText):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::disableLayerFlushThrottlingTemporarilyForInteraction):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):

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

        Merge Chromium TextTrack cleanups
        https://bugs.webkit.org/show_bug.cgi?id=127483

        Reviewed by Darin Adler.

        Merge some TextTrack cleanups:
        https://chromium.googlesource.com/chromium/blink/+/b571b9fbc6e62e05aa77a402cf8f447e681b8ee3
        https://chromium.googlesource.com/chromium/blink/+/6b1940151258150ea01bcf21ebfd958e2af247f4
        https://chromium.googlesource.com/chromium/blink/+/397c2a2d9416f5c0d79bca22d6979f174eefcce2
        https://chromium.googlesource.com/chromium/blink/+/f42ad93e25c6310b2b0327ab7ce5d82d3c4a6c1b
        https://chromium.googlesource.com/chromium/blink/+/d55b52b53b7da05bba5fe378a4278250b9347430
        https://chromium.googlesource.com/chromium/blink/+/cac766ecaaac477a08879f0b3157d0327cc75d96
        https://chromium.googlesource.com/chromium/blink/+/6197ce278696cdd52fc2ad81893f369492468ca0

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::loadTimerFired): Remove the LoadableTextTrack* parameter, it isn't used.
        (WebCore::HTMLTrackElement::didCompleteLoad): Ditto.
        * html/HTMLTrackElement.h: didCompleteLoad doesn't need to be virtual.

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired): Pass a reference, not a pointer.
        (WebCore::LoadableTextTrack::cueLoadingStarted): Removed, it wasn't used.
        (WebCore::LoadableTextTrack::cueLoadingCompleted): Pass a reference, not a pointer.
        * html/track/LoadableTextTrack.h: Delete LoadableTextTrackClient, it is no longer used.

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::TextTrackLoader): Take a TextTrackLoaderClient reference.
        (WebCore::TextTrackLoader::~TextTrackLoader): Rename m_cachedCueData m_resource.
        (WebCore::TextTrackLoader::cueLoadTimerFired): m_client is a reference.
        (WebCore::TextTrackLoader::cancelLoad): m_cachedCueData -> m_resource.
        (WebCore::TextTrackLoader::processNewCueData): Ditto.
        (WebCore::TextTrackLoader::deprecatedDidReceiveCachedResource): Ditto.
        (WebCore::TextTrackLoader::notifyFinished): Ditto.
        (WebCore::TextTrackLoader::load): shouldLoadCues was removed from the client interface because
            the only implementation always returned true.
        (WebCore::TextTrackLoader::newRegionsParsed): m_client is a reference
        * loader/TextTrackLoader.h:

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Remove an outdated comment.

2014-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Disable accessibility after every test run
        https://bugs.webkit.org/show_bug.cgi?id=127439

        Reviewed by Csaba Osztrogonác.

        Speculative fix for EFL build. Don't process these notifications unless accessibility is enabled.

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

2014-01-27  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix for !ENABLE(COMPARE_AND_SWAP) platforms after r162774
        https://bugs.webkit.org/show_bug.cgi?id=127678

        Reviewed by Zoltan Herczeg.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::compareAndSwapNonSharedCharacterBreakIterator):
        Use std::mutex instead of Mutex and std::lock_guard instead of MutexLocker.

2014-01-26  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build (failed to correctly revert some broken changes in the last patch).

        * platform/graphics/cg/BitmapImageCG.cpp:

2014-01-26  Tim Horton  <timothy_horton@apple.com>

        Start cleaning up iOS upstreaming #ifs in platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=127641

        Reviewed by Sam Weinig.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/mac/ColorMac.h:
        Use USE(APPKIT) instead of PLATFORM(MAC) && !PLATFORM(IOS) for NSImage/getNSImage().

        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        Remove some code that was only used on OS X on Lion or below.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        ToT WebKit doesn't build on Lion or earlier anymore, so this code can always run.

        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        Use CoreGraphics/CoreGraphics.h instead of ApplicationServices/ApplicationServices.h
        even on Mac, so we can share the include.

        * platform/graphics/cg/IntSizeCG.cpp:
        Remove a random comment of a style we don't tend to use in WebKit,
        and from a file not large enough to need it.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        Remove some more always-true #ifs.

        * platform/graphics/mac/WebLayer.mm:
        Move a #if'd include out to its own block as per the style guide.

2014-01-26  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Make sure the progression axis and direction are propagated to the new columns.
        https://bugs.webkit.org/show_bug.cgi?id=127670

        This patch makes sure that the progression axis and direction style properties
        are properly propagated from the style to the multi-column flow thread. Virtualizing
        and renaming updateColumnInfoFromStyle to updateColumnProgressionFromStyle lets us
        share code between the old multi-column code and the new.

        Reviewed by Sam Weinig.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateColumnProgressionFromStyle):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):
        (WebCore::RenderBlockFlow::updateColumnProgressionFromStyle):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnFlowThread.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2014-01-26  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Change the axis property to be a boolean like other isInline checks
        https://bugs.webkit.org/show_bug.cgi?id=127661

        Reviewed by Simon Fraser.

        * rendering/ColumnInfo.h:
        (WebCore::ColumnInfo::ColumnInfo):
        (WebCore::ColumnInfo::progressionIsInline):
        (WebCore::ColumnInfo::setProgressionIsInline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::initialBlockOffsetForPainting):
        (WebCore::RenderBlock::blockDeltaForPaintingNextColumn):
        (WebCore::RenderBlock::setComputedColumnCountAndWidth):
        (WebCore::RenderBlock::updateColumnInfoFromStyle):
        (WebCore::RenderBlock::columnRectAt):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::adjustForColumns):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::columnNumberForOffset):

2014-01-26  Benjamin Poulain  <benjamin@webkit.org>

        Make DOMStringMap a typedef of DatasetDOMStringMap
        https://bugs.webkit.org/show_bug.cgi?id=127658

        Reviewed by Sam Weinig.

        The only concrete implementation of DOMStringMap is DatasetDOMStringMap.
        The abstract interface for a single definition is adding complexity for no gain.

        This patch removes DOMStringMap and simply keeps the name through a typedef.
        I used a typedef instead of just renaming DatasetDOMStringMap because I think
        having both name has value. DatasetDOMStringMap is a better description of what
        the implementation does. DOMStringMap is the public name and the classname is
        the same as the JavaScript type by convention.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/DOMStringMap.cpp: Removed.
        * dom/DOMStringMap.h:
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        (WebCore::Element::dataset):
        * dom/Element.h:

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

        Part 2: Assertion failure in WebCore::PseudoElement::didRecalcStyle()
        <https://bugs.webkit.org/show_bug.cgi?id=126761>
        <rdar://problem/15793540>

        Reviewed by Simon Fraser.

        * bindings/objc/DOM.mm:
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        (WebCore::getCachedImage):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::image):
        - More places where toRenderImage() should be used instead of
          toImage().
        - Fixed last two places where static_cast<WebCore::RenderImage*>
          was being used instead of toRenderImage().

2014-01-26  Chris Fleizach  <cfleizach@apple.com>

        AX: Disable accessibility after every test run
        https://bugs.webkit.org/show_bug.cgi?id=127439

        Reviewed by Alexey Proskuryakov.

        If accessibility is disabled, we may still need to return the existing 
        AXObjectCache, so that objects can be cleaned up appropriately.

        A such we have to be prepared to handle a nullptr return value in more cases.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::disableAccessibility):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::childrenChanged):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * dom/Document.cpp:
        (WebCore::Document::existingAXObjectCache):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Move history item visit count handling to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=127659

        Reviewed by Dan Bernstein.

        Remove all members dealing with visit handling - they're going back to WebKit.

        * WebCore.exp.in:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        (WebCore::HistoryItem::decodeBackForwardTree):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::create):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Move lastVisitWasHTTPNonGet out to WebHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=127657

        Reviewed by Dan Bernstein.

        Remove m_lastVisitWasHTTPNonGet, it's only used by WebKit.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        * history/HistoryItem.h:

2014-01-26  Zalan Bujtas  <zalan@apple.com>

        Subpixel Layout: Align <input type="button", submit etc (PushButtonPart) top and bottom paddings with <button>
        https://bugs.webkit.org/show_bug.cgi?id=127640

        Reviewed by Simon Fraser.

        <button> sets padding-top: 2px and padding-bottom: 3px as default values (html.css),
        while <input type="button" (submit, etc) has the hardcoded values of 0, 0 and we center the text using the available space.
        This results in different baseline text position in normal cases. This adjustment puts the <input type='button'
        rendering back to the pre-subpixel layout state.

        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::controlPadding):

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

        Improve the bindings of NodeList's name accessor
        https://bugs.webkit.org/show_bug.cgi?id=127358

        Reviewed by Geoffrey Garen.

        When accessing an item of NodeList by name, the default bindings was
        going through the list of node twice:
        -First, getOwnProperty calls canGetItemsForName() to find if a property exists for
         the given name. This in turn used NodeList::namedItem() which is a slow operation.
        -Then, the value itself was queried through nameGetter(), calling NodeList::namedItem()
         a second time to find the same value.

        This patch kills the default name getter in favor of a getOwnPropertySlotDelegate() returning
        the value directly on the PropertySlot.

        Ad Hoc testing show about 15% speed up for simple cases.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::getOwnPropertySlotDelegate):
        * dom/NodeList.idl:

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

        Web Inspector: Move InspectorDebuggerAgent into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=127629

        Rubber-stamped by Sam Weinig.

        Test: inspector-protocol/debugger/pause-on-assert.html

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/agents/InspectorDebuggerAgent.h: Added.
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        - Remove InspectorDebuggerAgent.
        - Add WebDebuggerAgent (shared between Page and Worker).

        * inspector/WebDebuggerAgent.h: Added.
        (WebCore::WebDebuggerAgent::~WebDebuggerAgent):
        * inspector/WebDebuggerAgent.cpp: Added.
        (WebCore::WebDebuggerAgent::WebDebuggerAgent):
        (WebCore::WebDebuggerAgent::enable):
        (WebCore::WebDebuggerAgent::disable):
        Shared code for Page and Worker debugger agents.
        Instrumenting agents is a concept in WebCore only,
        and the Debugger agent is only in the instrumenting
        agents list when it is enabled and removed when disabled.

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        Update namespace for debugger agent.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::isConsoleAssertMessage):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        DebuggerAgent in JavaScriptCore does not yet know about console
        types. So temporarily handle it here. We need to give JavaScriptCore
        some concept of Console messages and types.

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::enable):
        (WebCore::PageDebuggerAgent::disable):
        (WebCore::PageDebuggerAgent::sourceMapURLForScript):
        (WebCore::PageDebuggerAgent::injectedScriptForEval):
        * inspector/PageDebuggerAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/WorkerDebuggerAgent.h:
        Modernize the Page and Worker debugger agents.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        New constructors for the debugger agents.

2014-01-25  Timothy Hatcher  <timothy@apple.com>

        Remove dead code from the JSC profiler.

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

        Reviewed by Mark Lam.

        Passes existing tests in fast/profiler.

        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor): Remove visible.
        * inspector/ScriptProfileNode.idl: Ditto.
        * inspector/protocol/Profiler.json: Ditto.

2014-01-25  Sam Weinig  <sam@webkit.org>

        Remove unused support for DRAGGABLE_REGION
        https://bugs.webkit.org/show_bug.cgi?id=127642

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.exp.in:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * page/Chrome.cpp:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addAnnotatedRegions):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addAnnotatedRegions):
        * rendering/RenderObject.h:
        (WebCore::AnnotatedRegionValue::operator==):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-01-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up SVGPatternElement::collectPatternAttributes 
        https://bugs.webkit.org/show_bug.cgi?id=127612

        Reviewed by Andreas Kling.

        This patch refactors SVGPatternElement::collectPatternAttributes() by extracting
        the setPatternAttributes logic into a new function. This patch also changes the
        while loop to be easier to understand and similar to collectGradientAttributes.

        * svg/SVGPatternElement.cpp:
        (WebCore::setPatternAttributes):
        (WebCore::SVGPatternElement::collectPatternAttributes):

2014-01-25  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: RenderInline is not centered when child RenderTextControl's innerTextRenderer needs bias centering.
        https://bugs.webkit.org/show_bug.cgi?id=125659

        Reviewed by Andreas Kling

        layoutMod(logicalHeightDiff, 2) fails to bias round when subpixel layout is enabled. It sets
        the denominator value to 2, which returns incorrect modulo result.
        (subpixel off: 3px % 2 = 1 vs subpixel on: (3px * 64) -> 192 % 2 = 0)

        Covered by existing tests.

        * platform/LayoutUnit.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::centerContainerIfNeeded):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::centerRenderer):
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/RenderTextControlSingleLine.h:

2014-01-25  Sam Weinig  <sam@webkit.org>

        Remove more unnecessary #if PLATFORM(IOS)s in ApplicationCacheStorage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=127635

        Reviewed by Antti Koivisto.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::executeSQLCommand):
        (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        (WebCore::ApplicationCacheStorage::executeStatement):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        (WebCore::ApplicationCacheStorage::loadCache):

2014-01-25  Sam Weinig  <sam@webkit.org>

        Remove some iOS #ifdefs by adding SQLiteDatabaseTracker to all the builds
        https://bugs.webkit.org/show_bug.cgi?id=127632

        Reviewed by Darin Adler.

        Move the SQLiteDatabaseTracker and client from platform/sql/ios to platform/sql,
        as there is nothing iOS specific about it. Then, un-#ifdef all its uses. For
        ports that don't setup a client, this has no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::sendWillRevealEdgeEventsIfNeeded):
        * platform/sql/SQLiteDatabaseTracker.cpp: Copied from Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.cpp.
        * platform/sql/SQLiteDatabaseTracker.h: Copied from Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.h.
        * platform/sql/SQLiteDatabaseTrackerClient.h: Copied from Source/WebCore/platform/sql/ios/SQLiteDatabaseTrackerClient.h.
        * platform/sql/ios: Removed.
        * platform/sql/ios/SQLiteDatabaseTracker.cpp: Removed.
        * platform/sql/ios/SQLiteDatabaseTracker.h: Removed.
        * platform/sql/ios/SQLiteDatabaseTrackerClient.h: Removed.
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::openDatabase):
        (WebCore::StorageAreaSync::sync):
        * storage/StorageTracker.cpp:

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Remove an unused FrameLoaderClient function
        https://bugs.webkit.org/show_bug.cgi?id=127628

        Reviewed by Andreas Kling.

        All implementations of FrameLoaderClient::shouldStopLoadingForHistoryItem return true and this function
        was only used by Chromium so we can get rid of it.

        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::shouldStopLoadingForHistoryItem):

2014-01-25  Darin Adler  <darin@apple.com>

        Call deprecatedCharacters instead of characters at more call sites
        https://bugs.webkit.org/show_bug.cgi?id=127631

        Reviewed by Sam Weinig.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        (WebCore::parseHTMLNonNegativeInteger):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty):
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash):
        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        (WebCore::Color::Color):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):
        Use the new name.

2014-01-25  Darin Adler  <darin@apple.com>

        Get rid of ICU_UNICODE and WCHAR_UNICODE remnants
        https://bugs.webkit.org/show_bug.cgi?id=127623

        Reviewed by Anders Carlsson.

        * CMakeLists.txt: Removed SmartReplaceICU.cpp.
        * GNUmakefile.list.am: Ditto.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modifyMovingRight): Ditto.
        (WebCore::FrameSelection::modifyMovingLeft): Ditto.

        * editing/SmartReplace.cpp: Moved code here from SmartReplaceICU,
        since we always support ICU now. Added some FIXME comments about
        bugs and mistakes I spotted in the code as I was moving it.
        * editing/SmartReplaceICU.cpp: Removed.

        * editing/TextIterator.cpp: Removed unneeded checks.
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData): Ditto.
        (WebCore::ThreadGlobalData::destroy): Ditto.
        * platform/ThreadGlobalData.h: Ditto.
        * platform/URL.cpp:
        (WebCore::appendEncodedHostname): Ditto.
        * platform/graphics/SurrogatePairAwareTextIterator.cpp: Ditto.
        Also removed unneeded "using namespace".
        * platform/text/TextCodecICU.cpp: Ditto.
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode): Ditto.
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps): Ditto.

2014-01-25  Darin Adler  <darin@apple.com>

        Get rid of UnicodeRange.h/cpp, using ICU instead
        https://bugs.webkit.org/show_bug.cgi?id=127622

        Reviewed by Anders Carlsson.

        * CMakeLists.txt: Remove UnicodeRange.h/cpp.
        * GNUmakefile.list.am: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): To check if a character has
        multiple code pages, use UCHAR_UNIFIED_IDEOGRAPH instead of cRangeSetCJK.
        * platform/graphics/wince/FontCacheWinCE.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): Ditto. Also, to check if a
        character is in the Thai block, use UBLOCK_THAI.

        * platform/graphics/wince/FontPlatformData.cpp: Removed include of UnicodeRange.h.

        * platform/text/UnicodeRange.cpp: Removed.
        * platform/text/UnicodeRange.h: Removed.

        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle): To figure
        out if a character is full width, use UCHAR_EAST_ASIAN_WIDTH, instead of hard-coding
        "not Latin or Arabic" as the rule.

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

        Remove an unnecessary platform #if in BitmapImage(CG)::checkForSolidColor()
        https://bugs.webkit.org/show_bug.cgi?id=127610

        Reviewed by Simon Fraser.

        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        Over time, the two sides of this #if !PLATFORM(IOS) converged. Remove the #if
        and merge the code. We explicitly use kCGBitmapByteOrder32Big to be correct everywhere.

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

        [cg] Look in the PNG dictionary for image duration information
        https://bugs.webkit.org/show_bug.cgi?id=127611
        <rdar://problem/15408643>

        Reviewed by Simon Fraser.

        We should look in the PNG properties dictionary for frame duration and loop count data.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::repetitionCount):
        Mush repetitionCount a bit more to make it easier to read (early returns, etc.)
        Also, look in the PNG properties dictionary for a loop count.

        (WebCore::ImageSource::frameDurationAtIndex):
        Look in the PNG properties dictionary for delay time.
        Get rid of WebCoreCGImagePropertyGIFUnclampedDelayTime; it hasn't
        been needed since Snow Leopard.

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Remove atomicIncrement/atomicDecrement
        https://bugs.webkit.org/show_bug.cgi?id=127625

        Reviewed by Andreas Kling.

        Replace atomicIncrement/atomicDecrement with std::atomic.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::incrementActiveSourceCount):
        (WebCore::AudioContext::decrementActiveSourceCount):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::~AudioNode):
        (WebCore::AudioNode::ref):
        (WebCore::AudioNode::finishDeref):
        * Modules/webaudio/AudioNode.h:
        * Modules/webdatabase/OriginLock.h:

2014-01-25  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix for WinCairo.

        * platform/network/curl/CurlDownload.h:
        Included wtf/Threading.h for ThreadIdentifier definition.

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Modernize HashTable threading code
        https://bugs.webkit.org/show_bug.cgi?id=127621

        Reviewed by Darin Adler.

        Explicitly include headers that used to be brought in by HashTable.h

        * platform/DragData.h:
        Change a Windows-specific typedef to avoid having to include WindDef.h from a header.

        * platform/audio/AudioSession.h:
        * platform/network/cf/SocketStreamHandle.h:

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

        Move CSSGroupingRule, CSSStyleSheet, ElementRuleCollector to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127575

        Reviewed by Andreas Kling.

        Use std::unique_ptr and std::make_unique in place of OwnPtr and adoptPtr
        in the CSSGroupingRule, CSSStyleSheet and ElementRuleCollector classes.

        * css/CSSFunctionValue.cpp: Remove the unnecessary PassOwnPtr header inclusion.
        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::cssRules):
        * css/CSSGroupingRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):
        * css/CSSStyleSheet.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::addMatchedRule):
        * css/ElementRuleCollector.h:

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

        Move MediaQueryMatcher, SelectorFilter to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127574

        Reviewed by Andreas Kling.

        Replace the use of OwnPtr and adoptPtr with std::unique_ptr and std::make_unique
        in the MediaQueryMatcher and SelectorFilter classes.

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        (WebCore::MediaQueryMatcher::evaluate):
        (WebCore::MediaQueryMatcher::addListener):
        (WebCore::MediaQueryMatcher::styleResolverChanged):
        * css/MediaQueryMatcher.h:
        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::popParentStackFrame):
        (WebCore::SelectorFilter::setupParentStack):
        * css/SelectorFilter.h:

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

        Move PropertySetCSSStyleDeclaration, WebKitCSSKeyframesRule to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127572

        Reviewed by Andreas Kling.

        Switch the PropertySetCSSStyleDeclaration and WebKitCSSKeyframesRule classes from using
        OwnPtr and adoptPtr to using std::unique_ptr and std::make_unique.

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
        (WebCore::StyleRuleCSSStyleDeclaration::didMutate):
        (WebCore::InlineCSSStyleDeclaration::didMutate):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::cssRules):
        * css/WebKitCSSKeyframesRule.h:

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

        Move StyleProperties, StyleResolver to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127570

        Reviewed by Andreas Kling.

        Move the StyleProperties and StyleResolver classes from using OwnPtr and adoptPtr
        to using std::unique_ptr and std::make_unique.

        * css/StyleInvalidationAnalysis.h: Remove the PassOwnPtr.h header inclusion.
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::ensureCSSStyleDeclaration):
        (WebCore::MutableStyleProperties::ensureInlineCSSStyleDeclaration):
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addViewportDependentMediaQueryResult):
        * css/StyleResolver.h:
        * css/StyleScopeResolver.h:

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

        Move CSSFontFace, CSSFontSelector to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127569

        Reviewed by Andreas Kling.

        Move the CSSFontFace and CSSFontSelector classes from using OwnPtr, PassOwnPtr and adoptPtr
        to using std::unique_ptr, move semantics and std::make_unique.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::addSource):
        * css/CSSFontFace.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontFace):
        * css/CSSFontSelector.h:

2014-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move InspectorRuntimeAgent into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=127605

        Reviewed by Timothy Hatcher.

        Covered by existing tests. No change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Remove WebCore InspectorRuntimeAgent.

        * ForwardingHeaders/inspector/agents/InspectorRuntimeAgent.h: Added.
        Add JavaScriptCore InspectorRuntimeAgent.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        New constructors for the runtime agent.

        * inspector/PageRuntimeAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::disable):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::didCreateIsolatedContext):
        (WebCore::PageRuntimeAgent::globalVM):
        Modernize and implement globalVM.

        * inspector/WorkerRuntimeAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        (WebCore::WorkerRuntimeAgent::globalVM):
        Modernize and implement globalVM.

2014-01-25  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Add parameters from 'DOM Object Model Core' spec and 'DOM CSS' spec that can be NULL

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

        Reviewed by Xan Lopez.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (ParamCanBeNull): Add new pairs (function, parameter) that can be NULL

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Get rid of BackForwardController::isActive()
        https://bugs.webkit.org/show_bug.cgi?id=127604

        Reviewed by Sam Weinig.

        BackForwardController::isActive() used to mean "my page maintains a back forward
        list that has zero capacity". Move that logic into WebKit instead, namely the
        WebFrameLoaderClient::canCachePage function so we can simplify WebCore.

        * history/BackForwardClient.h:
        * history/BackForwardController.cpp:
        * history/BackForwardController.h:
        * history/BackForwardList.h:
        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):

2014-01-25  Antti Koivisto  <antti@apple.com>

        REGRESSION(r162744): wsj.com paints white
        https://bugs.webkit.org/show_bug.cgi?id=127619

        Reviewed by Sam Weinig.

        Test: fast/css/stylesheet-layout-with-pending-paint.html

        * dom/Document.cpp:
        (WebCore::Document::styleResolverChanged):
        
            Ensure we switch out from IgnoreLayoutWithPendingSheets state after stylesheet loads complete.

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

        Reverted r162760. It broke more things.

        * WebCore.exp.in:

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

        Try to fix some 32-bit builds.

        * WebCore.exp.in:

2014-01-24  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Replace usage of DEFINE_STATIC_LOCAL with NeverDestroyed in WebCore/platform/efl
        https://bugs.webkit.org/show_bug.cgi?id=127607

        Reviewed by Anders Carlsson.

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::keyMap): Use NeverDestroyed instead of DEFINE_STATIC_LOCAL.
        (WebCore::windowsKeyMap): Ditto.
        (WebCore::keyDownCommandsMap): Ditto.
        (WebCore::keyPressCommandsMap): Ditto.
        * platform/efl/GamepadsEfl.cpp:
        (WebCore::sampleGamepads): Ditto.
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::systemFont): Do not use unnecessary DEFINE_STATIC_LOCAL.

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Move JavaScriptCallFrame and ScriptDebugServer into JavaScriptCore for inspector
        https://bugs.webkit.org/show_bug.cgi?id=127543

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        * ForwardingHeaders/inspector/ScriptDebugServer.h: Added.
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * inspector/JavaScriptCallFrame.idl: Removed.
        Update builds now that ScriptDebugServer moved to JavaScriptCore.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::PageScriptDebugServer::isContentScript):
        (WebCore::PageScriptDebugServer::reportException):
        * bindings/js/WorkerScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::WorkerScriptDebugServer::reportException):
        Handle ScriptDebugServer functionality depending on WebCore knowledge.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::breakpointActionSound):
        Handle ScriptDebugServer functionality that depended on WebCore knowledge.
        This will eventually be written in a non-WebCore specific way.

        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        Update ScriptDebugServer type now that it is in namespace Inspector.

        * workers/WorkerGlobalScope.h:
        Make addConsoleMessage public again so the inspector can call it.

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/PageDebuggerAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        * inspector/WorkerDebuggerAgent.h:
        Let each of these handle console logs in their own way. Both of these
        eventually go through the PageConsole and log through the InspectorConsoleAgent
        and ChromeClient.

2014-01-24  Brent Fulgham  <bfulgham@apple.com>

        Improve latching behavior for wheel events
        https://bugs.webkit.org/show_bug.cgi?id=127386
        <rdar://problem/12176858>

        Reviewed by Simon Fraser.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree): Initialize new values used for tracking
        scroll latching state.
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Check for an existing
        latched node and stay in fast scrolling mode if possible.
        (WebCore::ScrollingTree::removeDestroyedNodes): Clear latched node if it's being removed.
        (WebCore::ScrollingTree::latchedNode): Added
        (WebCore::ScrollingTree::setLatchedNode): Added
        (WebCore::ScrollingTree::clearLatchedNode): Added
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasLatchedNode): Added
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::shouldConsiderLatching): Added
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent): Determine latching state
        based on wheel event state and position of mouse pointer in the document.

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Another attempted build fix.

        Use wildcards in the the std::duration symbol.

        * WebCore.exp.in:

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        Start using the RemoteScrollingCoordinatorProxy on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127598

        Reviewed by Tim Horton.

        Add a scrollPositionChangedViaDelegatedScrolling() function to
        ScrollingTree, allowing the ScrollingTree to be informed about
        external sources of scrolling.
        
        Also add a convenience getter for nodes, nodeForID().

        * WebCore.exp.in:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::nodeForID):
        * page/scrolling/ScrollingTree.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        To avoid assertions on iOS, bail from iOS WK1 fixed position code if
        we have a ScrollingCoordinator.
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers):
        Ditto.

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        Add typesafe casts for ScrollingTreeNode classes
        https://bugs.webkit.org/show_bug.cgi?id=127597

        Reviewed by Tim Horton.

        Add a ScrollingNodeType member to ScrollingTreeNodes and
        use it for type-safe casting.

        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::nodeType):
        (WebCore::ScrollingTreeNode::scrollingNodeID):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Remove back/forward list related functions from Page
        https://bugs.webkit.org/show_bug.cgi?id=127596

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::canGoBackOrForward):
        (WebCore::BackForwardController::goBackOrForward):
        (WebCore::BackForwardController::goBack):
        (WebCore::BackForwardController::goForward):
        (WebCore::BackForwardController::count):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultBackspaceEventHandler):
        * page/Page.cpp:
        * page/Page.h:

2014-01-24  Antti Koivisto  <antti@apple.com>

        Update style asynchronously after style sheet load
        https://bugs.webkit.org/show_bug.cgi?id=127563

        Reviewed by Andreas Kling.
        
        Since we don't attach synchronously we don't need to recalc style synchronously either.

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

2014-01-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Default style of input type=checkbox/radio (0.5ex) adds 1px extra margin on both left and right.
        https://bugs.webkit.org/show_bug.cgi?id=125728

        Reviewed by Simon Fraser.

        Using the 0.5ex value to set checkbox/radio left and right margins is a long-standing
        (khtml) behavior. While it indicates dynamic behavior, in order to get the margins changed,
        the widget's font size needs to be set, which is rather rare for such input types.
        It also results in odd layout, where the checkbox's indentation may seem to change randomly.

        '<input style="font-size: 30px;" type="checkbox">foo' changes neither the checkbox
        nor the text size, but it indents the line by about 15px.

        Other browsers (FF, Opera with Presto) disagree and they set static margins values.
        2px is the current default computed value.

        * css/html.css:
        (input[type="radio"], input[type="checkbox"]):

2014-01-24  Oliver Hunt  <oliver@apple.com>

        Put functions need to take a base object and a this value, and perform type checks on |this|
        https://bugs.webkit.org/show_bug.cgi?id=127594

        Reviewed by Geoffrey Garen.

        Update bindings generator to emit setters with correct type, and perform
        type checks on |this|, instead of the baseObject.

        Test: js/dom/dom-as-prototype-assignment-exception.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructorStaticStringAttr):
        (WebCore::setJSTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::setJSTestObjByteAttr):
        (WebCore::setJSTestObjOctetAttr):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjLongAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjTypedArrayAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjReplaceableAttribute):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        (WebCore::setJSTestObjAttributeWithReservedEnumType):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:

2014-01-24  Oliver Hunt  <oliver@apple.com>

        Generic JSObject::put should handle static properties in the classinfo hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=127523

        Reviewed by Geoffrey Garen.

        Update the bindings generator to emit the flag indicating the presence
        of setters, and remove the many (now unnecessary) put overrides.
        Tested with run-jsc-benchmarks and shows neutral performance. A few of the
        micro benchmarks actually get a significant performance increase which
        is nice.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
            We still need a custom call to lookupPut here in order
            to get the magic security semantics of the window object.
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (InstanceOverridesPutImplementation):
        (InstanceOverridesPutDeclaration):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::put):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * html/canvas/WebGLRenderingContext.idl:
          Remove bogus attribute, as it has never been in the spec and should not
          have been added.

2014-01-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162713.
        http://trac.webkit.org/changeset/162713
        https://bugs.webkit.org/show_bug.cgi?id=127593

        broke media/network-no-source-const-shadow (Requested by
        thorton on #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::put):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::put):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::put):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::put):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * html/canvas/WebGLRenderingContext.idl:

2014-01-24  Zalan Bujtas  <zalan@apple.com>

        Replace LayoutUnit() calls to a more descriptive LayoutUnit::fromPixel(int).
        https://bugs.webkit.org/show_bug.cgi?id=127580

        Reviewed by Simon Fraser.

        LayoutUnit(1) statement is ambiguous. While it is intended to set one (CSS) pixel, it
        could be interpreted as 1 layout unit (1/64th of a CSS pixel atm).

        No change in behavior.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRegionHighlight):
        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::collapseMargins):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisContentExtent):
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::addForcedRegionBreak):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        Prepare scrolling tree to handle > 1 scrolling node
        https://bugs.webkit.org/show_bug.cgi?id=127590

        Reviewed by Tim Horton.

        Clean up the code path called after the ScrollingTree has scrolled a node,
        to prepare for multiple scrolling nodes.
        
        Change "updateMainFrameScrollPosition" terminology to "updateScrollPositionAfterAsyncScroll",
        and pass along the ScrollingNodeID that scrolled.
        
        Move updateMainFrameScrollPosition-related code from ScrollingCoordinator to
        AsyncScrollingCoordinator, since this sync-up is only necessary when doing
        async scrolling.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScrollTimerFired):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::matchesUpdateType):
        Package up the data related to a scheduled scroll into a ScheduledScrollUpdate struct,
        for easier comparison and cleaner code.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):

2014-01-24  Mark Lam  <mark.lam@apple.com>

        ASSERT(!m_markedSpace.m_currentDelayedReleaseScope) reloading page in inspector.
        <https://webkit.org/b/127582>

        Reviewed by Mark Hahnenberg.

        No new tests.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::attachDebugger):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::detachDebugger):
        - Adding reasons for detaching a globalObject from the debugger.

2014-01-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make PaintInfo layout unit aware.
        https://bugs.webkit.org/show_bug.cgi?id=127562

        Reviewed by Simon Fraser.

        Replace PaintInfo's IntRect with LayoutRect to be able to render to
        subpixel positions.

        No functional changes.

        * platform/graphics/LayoutRect.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLayer.cpp:
        (WebCore::cornerRect):
        (WebCore::RenderLayer::scrollCornerRect):
        (WebCore::resizerCornerRect):
        (WebCore::RenderLayer::scrollCornerAndResizerRect):
        (WebCore::RenderLayer::horizontalScrollbarStart):
        (WebCore::RenderLayer::drawPlatformResizerImage):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::fillWithExtensionGlyph):
        * rendering/svg/SVGRenderingContext.h:

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        #ifdef out handleWheelEventPhase for iOS
        https://bugs.webkit.org/show_bug.cgi?id=127583

        Reviewed by Tim Horton.

        handleWheelEventPhase() doesn't make any sense for iOS, which
        has no wheel events.

        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.h:

2014-01-24  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Don't destroy all the renderers when a multi-column block stops being multi-column (and vice versa)
        https://bugs.webkit.org/show_bug.cgi?id=127584

        Make the logic for when you need columns and when you don't shared between the
        old multi-column code and the new multi-column code. Make sure that the flow thread
        and sets get created lazily and destroyed on-demand when whether or not we should
        have multiple columns changes.

        Reviewed by Beth Dakin.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateLogicalWidthAndColumnWidth):
        No longer virtual. The new column code now uses this function too.

        (WebCore::RenderBlock::availableLogicalWidth):
        Renamed desiredColumnWidth() to computedColumnWidth().

        (WebCore::RenderBlock::computeColumnCountAndWidth):
        Renamed calcColumnWidth to computeColumnCountAndWidth.

        (WebCore::RenderBlock::setComputedColumnCountAndWidth):
        Rename setDesiredColumnCountAndWidth to computed.

        (WebCore::RenderBlock::computedColumnWidth):
        (WebCore::RenderBlock::computedColumnCount):
        Renamed desiredColumnWidth/Count to computedColumnWidth/Count and made them virtual.

        (WebCore::RenderBlock::updateFirstLetterStyle):
        desired -> computed rename.

        * rendering/RenderBlock.h:
        Renames and made a few functions virtual so that RenderBlockFlow can override.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        Don't create the flow thread at construction time any longer.

        (WebCore::RenderBlockFlow::createMultiColumnFlowThread):
        (WebCore::RenderBlockFlow::destroyMultiColumnFlowThread):
        The methods to create and destroy flow threads. These work at any time now and will
        fix up the render tree accordingly.

        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):
        Virtual override that creates/destroys the new multi-column information as needed.

        (WebCore::RenderBlockFlow::computedColumnWidth):
        (WebCore::RenderBlockFlow::computedColumnCount):
        Overrides to return the cached column width and count from the flow thread.

        * rendering/RenderBlockFlow.h:
        Has overrides of the virtual functions needed to turn multi-column state on/off and
        to hand back computed count/width information.

        * rendering/RenderMultiColumnFlowThread.cpp:
        * rendering/RenderMultiColumnFlowThread.h:
        Removed the algorithm to compute column count and width, since this has been combined
        with the old multi-column layout code.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeColumnCountAndWidth):
        Renamed desired -> computed.

        * rendering/RenderView.h:
        Renamed desired -> computed.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::determineChange):
        (WebCore::Style::resolveLocal):
        (WebCore::Style::resolveTree):
        * style/StyleResolveTree.h:
        The Settings argument is no longer needed now that we don't destroy and re-create
        the renderer for a block flow if it stops being (or becomes) multi-column.

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * WebCore.exp.in:

2014-01-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Convert some NMake files to MSBuild project files
        https://bugs.webkit.org/show_bug.cgi?id=127579

        Reviewed by Tim Horton.

        * WebCore.vcxproj/WebCore.make: Removed.
        * WebCore.vcxproj/WebCore.proj: Added.

2014-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        fast/profiler tests ASSERTing after moving recompileAllJSFunctions off a timer
        https://bugs.webkit.org/show_bug.cgi?id=127566

        Reviewed by Oliver Hunt.

        Covered by existing tests.

        * testing/Internals.cpp:
        (WebCore::Internals::closeDummyInspectorFrontend):
        Now that we don't have to fake that this is a page being destroyed to
        avoid recompilation. Use the InspectorDestroyed reason.

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Get rid of monotonicallyIncreasingTimeMS and start using std::chrono instead
        https://bugs.webkit.org/show_bug.cgi?id=127571

        Reviewed by Antti Koivisto.

        WebCore.exp.in:
        Update symbols.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implicitClose):
        (WebCore::Document::setParsing):
        (WebCore::Document::isLayoutTimerActive):
        (WebCore::Document::minimumLayoutDelay):
        (WebCore::Document::elapsedTime):
        (WebCore::Document::write):
        (WebCore::Document::styleResolverChanged):
        * dom/Document.h:
        Use std::chrono instead of doubles for the times and durations.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::didReceiveData):
        * fileapi/FileReader.h:
        Switch over to std::chrono.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        Update for Document::elapsedTime() changes.

        * page/Settings.cpp:
        (WebCore::Settings::setLayoutInterval):
        * page/Settings.h:
        (WebCore::Settings::layoutInterval):
        Change layoutInterval to be std::chrono::milliseconds instead of int.

        * platform/Timer.h:
        (WebCore::TimerBase::startOneShot):
        Add an overload that takes std::chrono::milliseconds.

2014-01-24  Oliver Hunt  <oliver@apple.com>

        Generic JSObject::put should handle static properties in the classinfo hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=127523

        Reviewed by Geoffrey Garen.

        Update the bindings generator to emit the flag indicating the presence
        of setters, and remove the many (now unnecessary) put overrides.
        Tested with run-jsc-benchmarks and shows neutral performance. A few of the
        micro benchmarks actually get a significant performance increase which
        is nice.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
            We still need a custom call to lookupPut here in order
            to get the magic security semantics of the window object.
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (InstanceOverridesPutImplementation):
        (InstanceOverridesPutDeclaration):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::put):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * html/canvas/WebGLRenderingContext.idl:
          Remove bogus attribute, as it has never been in the spec and should not
          have been added.

2014-01-24  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Eliminate RenderMultiColumnBlock
        https://bugs.webkit.org/show_bug.cgi?id=127565

        Reviewed by Antti Koivisto.

        This patch eliminates RenderMultiColumnBlock and folds all of its remaining code
        back into RenderBlockFlow. This allows all block flows to support multi-column
        layout, including table cells, list items, and the RenderView itself.

        * CMakeLists.txt:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Remove RenderMultiColumnBlock from the makefiles.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustIntrinsicLogicalWidthsForColumns):
        Tweak the comment, since it was no longer accurate.

        * rendering/RenderBlock.h:
        Move some functions down into RenderBlockFlow.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::RenderBlockFlow::createMultiColumnFlowThreadIfNeeded):
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::layoutSpecialExcludedChild):
        (WebCore::RenderBlockFlow::updateLogicalWidthAndColumnWidth):
        (WebCore::RenderBlockFlow::addChild):
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
         * rendering/RenderBlockFlow.h:
         Move a bunch of functions from RenderMultiColumnBlock up into RenderBlockFlow.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isUnsplittableForPagination):
        Calls isMultiColumnBlockFlow() now instead of testing for a specific renderer type.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        Remove the multicolumn block creation code, since we always make a block flow now.

        * rendering/RenderMultiColumnBlock.cpp: Removed.
        * rendering/RenderMultiColumnBlock.h: Removed.
        Nuke the files.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::initialLogicalWidth):
        (WebCore::RenderMultiColumnFlowThread::autoGenerateRegionsToBlockOffset):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::addForcedBreak):
        (WebCore::RenderMultiColumnSet::recalculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        (WebCore::RenderMultiColumnSet::columnGap):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        Change all of the functions in the multicolumnset and multicolumnflowthread classes
        to cast the parent to a RenderBlockFlow now instead of a RenderMultiColumnBlock.
        Change the code to call through to multiColumnFlowThread() for column-specific information
        for that parent block.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isMultiColumnBlockFlow):
        Remove isRenderMultiColumnBlock() and replace with isMultiColumnBlockFlow().

        * rendering/RenderingAllInOne.cpp:
        Remove RenderMultiColumnBlock include.
        
2014-01-24  Brady Eidson  <beidson@apple.com>

        IDB: support createIndex/deleteIndex messaging
        https://bugs.webkit.org/show_bug.cgi?id=127546

        Reviewed by Tim Horton.

        * WebCore.exp.in: Export a needed CrossThreadCopier

2014-01-24  Daniel Bates  <dabates@apple.com>

        Fix the Windows build after <http://trac.webkit.org/changeset/162704>
        (https://bugs.webkit.org/show_bug.cgi?id=127293)

        Only include TargetConditionals.h when building on a Darwin-based OS.
        Also, check that TARGET_OS_IPHONE is defined before referencing its value
        since it will be undefined when building on Windows.

        * bindings/objc/PublicDOMInterfaces.h:

2014-01-24  Daniel Bates  <dabates@apple.com>

        Bindings generation tests hit an error trying to include wtf/Platform.h after r161638
        https://bugs.webkit.org/show_bug.cgi?id=127293

        Reviewed by Alexey Proskuryakov.

        Include TargetConditionals.h instead of wtf/Platform.h as the latter isn't available
        in the public SDK.

        As a side effect of this change, replace usage of PLATFORM(IOS) with TARGET_OS_IPHONE.

        * bindings/objc/PublicDOMInterfaces.h:

2014-01-21  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Table cells and list items need to work as multicolumn blocks.
        https://bugs.webkit.org/show_bug.cgi?id=127365
        
        This patch is a first step towards eliminating RenderMultiColumnBlock and moving
        all its functionality into RenderBlockFlow. Doing so will allow table cells, list
        items and the RenderView to use the new multi-column layout.
        
        Reviewed by Simon Fraser.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setMultiColumnFlowThread):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::multiColumnFlowThread):
        Add the flow thread pointer to the multi-column flow thread to RenderBlockFlow's
        rare data. This lets us use only one pointer in the rare data to point to an object
        that can hold all of the rest of the multi-column info.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        Move the construction of the flow thread to the constructor. This ensures we
        never have a null flow thread and lets us avoid having to null check it for
        empty multi-column blocks.

        (WebCore::RenderMultiColumnBlock::columnHeightAvailable):
        (WebCore::RenderMultiColumnBlock::columnWidth):
        (WebCore::RenderMultiColumnBlock::columnCount):
        (WebCore::RenderMultiColumnBlock::updateLogicalWidthAndColumnWidth):
        The above functions now call through to the multi-column flow thread for results.

        (WebCore::RenderMultiColumnBlock::checkForPaginationLogicalHeightChange):
         Set the column height available on the flow thread.

        (WebCore::RenderMultiColumnBlock::relayoutForPagination):
        The balancing pass and guard is in the multi-column flow thread now.

        (WebCore::RenderMultiColumnBlock::addChild):
        Don't have to create the flow thread here any longer, since we do it up front
        in the constructor of RenderMultiColumnBlock.

        (WebCore::RenderMultiColumnBlock::layoutSpecialExcludedChild):
        Don't need the null check of the flow thread any more.

        * rendering/RenderMultiColumnBlock.h:
        Change the inlined functions to not be inlined, since they need to call
        RenderMultiColumnFlowThread functions now.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        Init the new member variables we moved here from RenderMultiColumnBlock.

        (WebCore::RenderMultiColumnFlowThread::computeColumnCountAndWidth):
        Moved from RenderMultiColumnBlock.

        * rendering/RenderMultiColumnFlowThread.h:
        Add public getters/setters to the member variables so that RenderMultiColumnBlock can
        still see them. Move the member variables here from RenderMultiColumnBlock.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        (WebCore::RenderMultiColumnSet::columnCount):
        Call through to the flow thread instead.

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

        Unreviewed GTK build fix after r162663.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRectInternal): Renamed from visibleContentRect.

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

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

        Reviewed by Darin Adler.

        Replace the uses of OwnPtr and PassOwnPtr in the HistoryItem class with std::unique_ptr.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        (WebCore::HistoryItem::addRedirectURL):
        (WebCore::HistoryItem::setRedirectURLs):
        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::setTransientProperty):
        WebCore.exp.in: Update the symbol.

2014-01-23  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: unresolvable percent height results in 1px tall multicol
        https://bugs.webkit.org/show_bug.cgi?id=122826

        Reviewed by David Hyatt.

        If a box has a percentage height, but the computed height of its
        containing block is auto, the computed height of the box also becomes
        auto. computeContentLogicalHeight() returns -1 if the height isn't
        resolvable, and we need to make sure that such a value doesn't
        constrain the height of the multicol container.

        Tests: fast/multicol/newmulticol/unresolvable-percent-height-2.html
               fast/multicol/newmulticol/unresolvable-percent-height.html
               fast/multicol/newmulticol/unresolvable-percent-max-height-2.html
               fast/multicol/newmulticol/unresolvable-percent-max-height.html

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::recalculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::prepareForLayout):

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Move ContentSearchUtils, ScriptBreakpoint, and ScriptDebugListener into JavaScriptCore for inspector
        https://bugs.webkit.org/show_bug.cgi?id=127537

        Reviewed by Timothy Hatcher.

          - Rename ContentSearchUtils => ContentSearchUtilities and move to JavaScriptCore.
          - Move ScriptBreakpoint and ScriptDebugListener to JavaScriptCore.
          - Move them all to namespace Inspector.
          - Update build files and users to the new names.

        No change in functionality, just moving code.

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/ContentSearchUtilities.h: Added.
        * ForwardingHeaders/inspector/ScriptBreakpoint.h: Added.
        * ForwardingHeaders/inspector/ScriptDebugListener.h: Added.
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/PageScriptDebugServer.cpp:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::sourceMapURLForScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sourceMapURLForResource):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::InspectorStyleSheet::lineEndings):
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings):

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Move RegularExpression into JavaScriptCore for inspector
        https://bugs.webkit.org/show_bug.cgi?id=127526

        Reviewed by Geoffrey Garen.

        Update as appropriate for the moved file and namespace
        change for class RegularExpression.

        * CMakeLists.txt:
        * ForwardingHeaders/yarr/RegularExpression.h: Added.
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMImplementation.h:
        * html/BaseCheckableInputType.cpp:
        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch):
        * html/EmailInputType.cpp:
        (WebCore::isValidEmailAddress):
        * html/InputType.cpp:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::createSearchRegex):
        (WebCore::ContentSearchUtils::countRegularExpressionMatches):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::matches):
        (WebCore::InspectorDebuggerAgent::breakpointActionLog):
        (WebCore::InspectorDebuggerAgent::breakpointActionSound):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::searchInResources):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::selectorsFromSource):
        * inspector/WorkerDebuggerAgent.cpp:
        * page/Frame.cpp:
        (WebCore::createRegExpForLabels):
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::matchLabelsAgainstString):
        * page/Frame.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getUnmangledInfoLog):

2014-01-23  Brady Eidson  <beidson@apple.com>

        IDB: Support IDBObjectStore.clear()
        https://bugs.webkit.org/show_bug.cgi?id=127541
        
        Reviewed by Anders Carlsson.

        The backing store should never be performing callbacks directly:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):

        Instead, the transaction operations should do that themselves:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::ClearObjectStoreOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::ClearObjectStoreOperation::transaction):

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

        <rdar://problem/15875326> REGRESSION (r162257): Assertion failure (should not be reached) in CSSPreloadScanner::tokenize()
        https://bugs.webkit.org/show_bug.cgi?id=127540

        Reviewed by Anders Carlsson.

        No new tests, because I could not reproduce the bug reliably and I don’t know how to trigger
        it.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan): Check for the DoneParsingImportRules before tokenizing
        a character, not after. This restores the logic from before r162257.

2014-01-23  Jer Noble  <jer.noble@apple.com>

        [iOS] Protect against possbile deadlock by delaying video layer creation
        https://bugs.webkit.org/show_bug.cgi?id=127505

        Reviewed by Eric Carlson.

        Work around a possible deadlock on iOS when creating a media element
        backed by AVFoundation by delaying creation of the AVPlayerLayer.
        The deadlock can occur when the web thread is doing CALayer layout
        while taking the web thread lock, while CoreMedia is doing property
        access on an async thread while taking the CM lock, and each is waiting
        for the other's lock to be released.

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

2014-01-23  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash when reloading a page during playback
        https://bugs.webkit.org/show_bug.cgi?id=126903

        Reviewed by Eric Carlson.

        Periodic time observers added to AVSampleBufferRenderSynchronizer will execute their
        callback block even after being removed with -removeTimeObserver:, which is tracked by
        <rdar://problem/15798050>. Work around this problem by passing a WeakPtr into the block
        and bail early if the owning media player has been destroyed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):

2014-01-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Dragging from inner side of video to outside causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=126338

        Reviewed by Jer Noble.

        The crash happens while dragging mouse cursor through timeline control to outside
        of video region. This is beacause media controls are selected with the drag.
        The media controls disappear when mouse cursor goes outside of video though
        the dragging/selection proceeds. If once media controls are hidden, related element
        lose their renderers. However the drag is still under going. it requires shadowPseudoId
        of the selected controls. Untorntunately, SliderThumbElement/SliderContainerElement
        don't return a static value for the shadowPseudoId unlike other media controls,
        but they need a renderer to determine it. This is the reason of crash.

        Test: media/media-controller-drag-crash.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::shadowPseudoId):
        (WebCore::SliderContainerElement::shadowPseudoId):

2014-01-23  Brady Eidson  <beidson@apple.com>

        IDB: Implement SQLite backing store 'get' support
        https://bugs.webkit.org/show_bug.cgi?id=127502

        Reviewed by Tim Horton.

        Get a KeyRange from a KeyRangeData:
        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::maybeCreateIDBKeyRange):
        * Modules/indexeddb/IDBKeyRangeData.h:

        Add collation function support to SQLiteDatabase:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::destroyCollationFunction):
        (WebCore::callCollationFunction):
        (WebCore::SQLiteDatabase::setCollationFunction):
        (WebCore::SQLiteDatabase::removeCollationFunction):
        * platform/sql/SQLiteDatabase.h:

        * WebCore.exp.in:

2014-01-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure in WebCore::PseudoElement::didRecalcStyle()
        <https://bugs.webkit.org/show_bug.cgi?id=126761>
        <rdar://problem/15793540>

        Reviewed by Andy Estes.

        Test: fast/images/animate-list-item-image-assertion.html

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didRecalcStyle):
        Check isRenderImage() rather than isImage() before casting to
        RenderImage.

        * editing/ios/EditorIOS.mm:
        (WebCore::getImage):
        Ditto.

        * editing/mac/EditorMac.mm:
        (WebCore::getImage):
        Ditto.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::didAttachRenderers):
        Ditto.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        Ditto.

        * page/DragController.cpp:
        (WebCore::getCachedImage):
        Ditto.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):
        (WebCore::RenderLayerBacking::updateImageContents):
        Ditto.

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=127409

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        Remove m_recompileTimer and the recompile soon function.
        We can just recompile immediately in all existing cases.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didAddFirstListener):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        Add a "didAddFirstListener" to match "didRemoveLastListener".
        Only recompile functions when we attach the debugger and when
        we detach the last listener.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        Same thing. Also rearrange the functions to read better.

        * inspector/InspectorProfilerAgent.cpp:
        Use the direct recompile function instead of the removed "soon" version.

        * WebCore.exp.in:
        Update disconnectFrontend symbol.

        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::disconnect):
        * testing/Internals.cpp:
        (WebCore::Internals::closeDummyInspectorFrontend):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask):
        Include an InspectorDisconnectReason when calling disconnectFrontend.

        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        If the disconnect reason is the page will be destroyed, don't recompile when disconnecting.

        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        If the disconnect reason is the page will be destroyed, don't recompile when disconnecting.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::close):
        Pass different reasons for the different disconnect reasons.

        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::~WorkerInspectorController):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        Pass different reasons for the different disconnect reasons.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::disable):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        Include InspectorDisconnectReason param.

2014-01-23  Simon Fraser  <simon.fraser@apple.com>

        Another Windows fix: include <algorithm> for std::min and std::max.
        
        * platform/graphics/IntSize.h:

2014-01-23  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Windows build.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::visibleSize):
        * platform/win/PopupMenuWin.h:

2014-01-23  Simon Fraser  <simon.fraser@apple.com>

        Make visibleContentRect() return actualVisibleContentRect() on iOS most of the time
        https://bugs.webkit.org/show_bug.cgi?id=127456
        
        Reviewed by Antti Koivisto.
        
        On iOS, visibleContentRect() returns the entire document rect for historical
        reasons, and actualVisibleContentRect() returns what visibleContentRect()
        returns on other platforms.
        
        In addition, actualVisibleContentRect() was returning an empty rect in WK2.
        
        Reduce the confusion of #ifdefs by making visibleContentRect() behave like
        actualVisibleContentRect() by default on iOS. Where it needs the old behavior,
        an optional parameter, LegacyIOSDocumentVisibleRect, provides this.
        
        Achieve this by having the virtual ScrollableArea::visibleContentRectInternal(),
        which is called by non-virtual visibleContentRect() and visibleContentRectIncludingScrollbars().
        
        Similarly clean up visibleHeight/visibleWidth functions by having visibleSize() be virtual,
        with non-virtual visibleHeight() and visibleWidth().
        
        ScrollableArea subclasses override visibleContentRectInternal() and visibleSize() where necessary.
        
        Mechanically change all the call sites of actualVisibleContentRect() to
        use visibleContentRect(), and the call sites of visibleContentRect()
        to visibleContentRect(..., LegacyIOSDocumentVisibleRect), adding comments
        where this may not be appropriate.
        
        Change callers of visibleContentRect(IncludeScrollbars...) to visibleContentRectIncludingScrollbars().
        
        Also add actualScrollPosition(), and clean up some actualScroll* call sites.
        
        No behavior change.

        * WebCore.exp.in:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isOnscreen):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        * dom/Document.cpp:
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale):
        (WebCore::Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::bounds):
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageFitsInWindow):
        (WebCore::ImageDocument::windowSizeChanged):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::scrollBy):
        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scrollContentsSlowPath):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::sendResizeEventIfNeeded):
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::isScrollable):
        (WebCore::FrameView::paintControlTints):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRectInternal):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::actualScrollX):
        (WebCore::ScrollView::actualScrollY):
        (WebCore::ScrollView::actualScrollPosition):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::visibleContentRect):
        (WebCore::ScrollableArea::visibleContentRectIncludingScrollbars):
        (WebCore::ScrollableArea::visibleContentRectInternal):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::visibleWidth):
        (WebCore::ScrollableArea::visibleHeight):
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::expandedTo): Drive-by cleanup.
        (WebCore::IntSize::shrunkTo):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::maximumScrollPosition):
        (WebCore::RenderLayer::visibleContentRectInternal):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::viewportSize):

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

       Turn text-decoration-skip: ink on for all underlines
       https://bugs.webkit.org/show_bug.cgi?id=127331

       Reviewed by Antti Koivisto.

       No new tests are necessary because tests already exist

       * rendering/style/RenderStyle.h:

2014-01-23  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape size and position should conform to the spec
        https://bugs.webkit.org/show_bug.cgi?id=123295

        Reviewed by Andreas Kling.

        Implement image valued shape-outside scaling and translation per the spec,
        http://dev.w3.org/csswg/css-shapes/#shapes-from-image:

        "The image is sized and positioned as if it were a replaced element whose
        specified width and height are the same as the element’s used content box size."

        This change doesn't completely fulfill the spec, it's limited to image elements
        and shape-outside.

        Tests: fast/shapes/shape-outside-floats/shape-outside-image-fit-001.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-002.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-003.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-004.html

        * rendering/shapes/Shape.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        Added an imageRect parameter which specifies where the shape image is to
        appear relative to the content box. The imageRect implies both scaling and
        translation of the shape image.

        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        (WebCore::getShapeImageRect):
        For replaced elements, compute the shape's imageRect with
        RenderReplaced::replacedContentRect().


2014-01-23  Max Vujovic  <mvujovic@adobe.com>

        Remove CSS Custom Filters code and tests
        https://bugs.webkit.org/show_bug.cgi?id=127382

        Reviewed by Simon Fraser.

        No new tests. Removing functionality.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::filterInfoForName):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * css/CSSPropertyNames.in:
        * css/CSSPropertySourceData.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::filterOperationForType):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingResources):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::State):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/WebKitCSSArrayFunctionValue.cpp: Removed.
        * css/WebKitCSSArrayFunctionValue.h: Removed.
        * css/WebKitCSSFilterRule.cpp: Removed.
        * css/WebKitCSSFilterRule.h: Removed.
        * css/WebKitCSSFilterRule.idl: Removed.
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::WebKitCSSFilterValue):
        (WebCore::WebKitCSSFilterValue::customCSSText):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSMatFunctionValue.cpp: Removed.
        * css/WebKitCSSMatFunctionValue.h: Removed.
        * css/WebKitCSSMixFunctionValue.cpp: Removed.
        * css/WebKitCSSMixFunctionValue.h: Removed.
        * css/WebKitCSSMixFunctionValue.idl: Removed.
        * css/WebKitCSSShaderValue.cpp: Removed.
        * css/WebKitCSSShaderValue.h: Removed.
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedShader.cpp: Removed.
        * loader/cache/CachedShader.h: Removed.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::filtersCanBeComposited):
        * platform/graphics/filters/CustomFilterArrayParameter.h: Removed.
        * platform/graphics/filters/CustomFilterColorParameter.h: Removed.
        * platform/graphics/filters/CustomFilterCompiledProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterCompiledProgram.h: Removed.
        * platform/graphics/filters/CustomFilterConstants.h: Removed.
        * platform/graphics/filters/CustomFilterGlobalContext.cpp: Removed.
        * platform/graphics/filters/CustomFilterGlobalContext.h: Removed.
        * platform/graphics/filters/CustomFilterMesh.cpp: Removed.
        * platform/graphics/filters/CustomFilterMesh.h: Removed.
        * platform/graphics/filters/CustomFilterMeshGenerator.cpp: Removed.
        * platform/graphics/filters/CustomFilterMeshGenerator.h: Removed.
        * platform/graphics/filters/CustomFilterNumberParameter.h: Removed.
        * platform/graphics/filters/CustomFilterOperation.cpp: Removed.
        * platform/graphics/filters/CustomFilterOperation.h: Removed.
        * platform/graphics/filters/CustomFilterParameter.h: Removed.
        * platform/graphics/filters/CustomFilterParameterList.cpp: Removed.
        * platform/graphics/filters/CustomFilterParameterList.h: Removed.
        * platform/graphics/filters/CustomFilterProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterProgram.h: Removed.
        * platform/graphics/filters/CustomFilterProgramClient.h: Removed.
        * platform/graphics/filters/CustomFilterProgramInfo.cpp: Removed.
        * platform/graphics/filters/CustomFilterProgramInfo.h: Removed.
        * platform/graphics/filters/CustomFilterRenderer.cpp: Removed.
        * platform/graphics/filters/CustomFilterRenderer.h: Removed.
        * platform/graphics/filters/CustomFilterTransformParameter.h: Removed.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterValidatedProgram.h: Removed.
        * platform/graphics/filters/FECustomFilter.cpp: Removed.
        * platform/graphics/filters/FECustomFilter.h: Removed.
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::outsets):
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp: Removed.
        * platform/graphics/filters/ValidatedCustomFilterOperation.h: Removed.
        * platform/graphics/filters/texmap/CustomFilterValidatedProgramTextureMapper.cpp: Removed.
        * platform/graphics/filters/texmap/TextureMapperPlatformCompiledProgram.h: Removed.
        * platform/graphics/gpu/Texture.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::getPassesRequiredForFilter):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::clearPendingStateChanges):
        (WebCore::CompositingCoordinator::syncLayerState):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterOperation.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerFiltersIfNeeded):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        (WebCore::CoordinatedGraphicsScene::setLayerAnimationsIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::computeSourceImageRectForDirtyRect):
        * rendering/FilterEffectRenderer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateFilters):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::~FilterInfo):
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:
        * rendering/style/StyleCachedShader.cpp: Removed.
        * rendering/style/StyleCachedShader.h: Removed.
        * rendering/style/StyleCustomFilterProgram.cpp: Removed.
        * rendering/style/StyleCustomFilterProgram.h: Removed.
        * rendering/style/StyleCustomFilterProgramCache.cpp: Removed.
        * rendering/style/StyleCustomFilterProgramCache.h: Removed.
        * rendering/style/StylePendingShader.h: Removed.
        * rendering/style/StyleShader.h: Removed.

2014-01-22  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r161967): Crash in WebCore::CachedSVGDocumentReference::load
        <https://webkit.org/b/127151>
        <rdar://problem/15840760>

        There were two issues introduced here; the first is a use-after-free of
        CachedSVGDocumentReference objects.

        The previous code kept a map from FilterOperation ->
        RefPtr<WebKitCSSSVGDocumentValue>, which retained the
        CachedSVGDocument. In r161967, this was changed to use a weak HashSet,
        which allows stale CachedSVGDocumentReferences in the pending document
        set if the owning FilterOperation is deleted. To fix this, we'll keep a
        vector of RefPtr<FilterOperation> with pending SVG documents.

        The second issue is a null deref in CachedSVGDocumentReference::load();
        CachedResourceLoader::requestSVGDocument() can return 0 if (for
        example) an invalid URL is passed. r161967 removed a null check as part
        of the refactoring.

        Reviewed by Dirk Schulze.

        Tests: css3/filters/crash-filter-animation-invalid-url.html
               css3/filters/crash-invalid-url.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        Use new member var name.
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        For each FilterOperation with a pending SVG document, get or create a
        CachedSVGDocumentReference, and tell it to load. Changed to use new
        function names.
        (WebCore::StyleResolver::createFilterOperations):
        Append the FilterOperation to the list of FilterOperations with
        unloaded SVG documents.

        * css/StyleResolver.h:
        Changed from using PendingSVGDocumentSet, a weak set, to
        a Vector<RefPtr<ReferenceFilterOperation>>.
        (WebCore::StyleResolver::State::filtersWithPendingSVGDocuments):
        Return the vector.

        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        Null check m_document rather than checking m_loadRequested.
        m_loadRequested may be true when m_document is 0.
        (WebCore::CachedSVGDocumentReference::load):
        Null check the result of CachedResourceLoader::requestSVGDocument().

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::getOrCreateCachedSVGDocumentReference):
        Create, if necessary, and return the CachedSVGDocumentReference.

        * platform/graphics/filters/FilterOperation.h:
        Replaced createCachedSVGDocumentReference() with
        getOrCreateCachedSVGDocumentReference(), which makes for slightly
        cleaner code.

2014-01-23  Antti Koivisto  <antti@apple.com>

        Don't enable speculative tiles immediately after main load stops progressing
        https://bugs.webkit.org/show_bug.cgi?id=127507

        Reviewed by Andreas Kling.

        It is common for timers and events to trigger more loading after the initial main frame loading
        has completed. We should delay a bit before enabling speculative tiles and keep them disabled 
        if loading still continues.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::adjustTiledBackingCoverage):
        (WebCore::shouldEnableSpeculativeTilingDuringLoading):
        (WebCore::FrameView::enableSpeculativeTilingIfNeeded):
        
            When load progression stops wait 0.5s before enabling speculative tiles.

        (WebCore::FrameView::speculativeTilingEnableTimerFired):
        
            Don't enable speculative tiles if the progression has started again. Instead restart the timer.

        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computeTileCoverage):
        
            Move the FrameView level code to FrameView (so we don't need to add a timer to every RenderLayerBacking).

        * rendering/RenderLayerBacking.h:

2014-01-23  Antti Koivisto  <antti@apple.com>

        Loads started soon after main frame completion should be considered part of the main load
        https://bugs.webkit.org/show_bug.cgi?id=127504

        Reviewed by Andreas Kling.

        ProgressTracker currently decides that main load is complete when the main frame stops loading. 
        However it is common that timers and onload events trigger more loads immediately (for example 
        by inserting iframes) and loading continues visually. These should be considered as part of the
        main load for paint throttling and speculative tiling coverage purposes.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::progressStarted):
        
            Track whether this is considered part of the main load or not with a boolean. 
            It is set for subframe loads too if they start loading soon (within 1s) after the main frame load completes.

        (WebCore::ProgressTracker::finalProgressComplete):
        
            Get a timestamp.

        (WebCore::ProgressTracker::isMainLoadProgressing):

            New definition of "main load".

        * loader/ProgressTracker.h:

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=127499

        Reviewed by Brent Fulgham.

        * platform/network/curl/ResourceError.h: Include <winsock2.h> before <curl/curl.h>.

2014-01-23  Brady Eidson  <beidson@apple.com>

        IDB: Implement cross-thread and IPC plumbing for 'get' support
        https://bugs.webkit.org/show_bug.cgi?id=127501

        Reviewed by Anders Carlsson.

        Add isolatedCopy to the IDBGetResult object:
        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::isolatedCopy):

        Add a cross-thread and cross-IPC appropriate object for IDBKeyRanges:
        * Modules/indexeddb/IDBKeyRangeData.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBGetResult.h.
        (WebCore::IDBKeyRangeData::isolatedCopy):
        * Modules/indexeddb/IDBKeyRangeData.h: Copied from Source/WebCore/Modules/indexeddb/IDBGetResult.h.
        (WebCore::IDBKeyRangeData::IDBKeyRangeData):

        Add a few more cross-thread copiers:
        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBGetResult>::copy):
        (WebCore::IDBKeyRangeData>::copy):
        * platform/CrossThreadCopier.h:

        Project file gunk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-23  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Adopt new AVStreamDataParser delegate API
        https://bugs.webkit.org/show_bug.cgi?id=127498

        Reviewed by Eric Carlson.

        Adopt a new delegate API which passes in whether or not the new AVAsset
        is discontinuous, implying the AVAsset is entirely new rather than
        just updated with new information.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]):

2014-01-23  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Use PDFPlugin even if there's an external plugin installed, if it's blocked
        https://bugs.webkit.org/show_bug.cgi?id=127415
        <rdar://problem/12482452>

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * platform/LocalizedStrings.cpp:
        (WebCore::useBlockedPlugInContextMenuTitle):
        * platform/LocalizedStrings.h:
        Add a localizable string for the generic case, where the client
        didn't provide a more specific string for the context menu item.

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [Curl] There is no way to specify cache folder.
        https://bugs.webkit.org/show_bug.cgi?id=125028

        Reviewed by Brent Fulgham.

        Fixed logical test, disc cache should be disabled if creating cache folder fails.

        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::setCacheDirectory):

2014-01-23  Brady Eidson  <beidson@apple.com>

        Unreviewed build fix.

        * WebCore.xcodeproj/project.pbxproj: Export the new header so WebKit can see it

2014-01-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update project and solution files for 64-bit builds
        https://bugs.webkit.org/show_bug.cgi?id=127457

        Reviewed by Eric Carlson.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Update for VS2013
        * WebCore.vcxproj/WebCore.submit.sln: Add x64 targets
        * WebCore.vcxproj/WebCore.vcxproj: Update for VS2013. Also exclude 32-bit specific
        assembly when building 64-bit target.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Update for VS2013
        * config.h: Handle 64-bit type definitions.
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimation::setFromValue): Use CGFloat to support 64-bit builds
        (PlatformCAAnimation::setToValue): Ditto
        (PlatformCAAnimation::setValues): Ditto
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Add cast to
        support 32- and 64-bit targets.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Use CGFloat to
        support 64-bit builds.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeURLToDataObject): Specialize std::min to
        work on 32- and 64-bit code.
        (WebCore::createGlobalImageFileDescriptor): Ditto
        * platform/win/StructuredExceptionHandlerSuppressor.cpp:
        (WebCore::StructuredExceptionHandlerSuppressor::StructuredExceptionHandlerSuppressor):
        Comment out 32-bit inline assembly.
        (WebCore::StructuredExceptionHandlerSuppressor::~StructuredExceptionHandlerSuppressor):
        Ditto

2014-01-23  Brady Eidson  <beidson@apple.com>

        Make IDBGetResult work with IDBKeyData instead of IDBKey.
        https://bugs.webkit.org/show_bug.cgi?id=127493

        Reviewed by Eric Carlson.

        Also break it into its own header to work better with IPC messages.

        * Modules/indexeddb/IDBGetResult.h: Added.
        (WebCore::IDBGetResult::IDBGetResult):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):

        * WebCore.xcodeproj/project.pbxproj:

2014-01-23  Mátyás Mustoha  <mmatyas@inf.u-szeged.hu>

        [curl] Add storage limit to cache manager
        https://bugs.webkit.org/show_bug.cgi?id=125779

        Reviewed by Brent Fulgham.

        Sets a local disc storage size limit for the cache manager
        used by the curl network backend.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::isCached):
        (WebCore::CurlCacheEntry::saveCachedData):
        (WebCore::CurlCacheEntry::readCachedData):
        (WebCore::CurlCacheEntry::didFail):
        (WebCore::CurlCacheEntry::didFinishLoading):
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        (WebCore::CurlCacheEntry::entrySize):
        * platform/network/curl/CurlCacheEntry.h:
        (WebCore::CurlCacheEntry::requestHeaders):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::CurlCacheManager):
        (WebCore::CurlCacheManager::setStorageSizeLimit):
        (WebCore::CurlCacheManager::loadIndex):
        (WebCore::CurlCacheManager::saveIndex):
        (WebCore::CurlCacheManager::makeRoomForNewEntry):
        (WebCore::CurlCacheManager::didReceiveResponse):
        (WebCore::CurlCacheManager::didReceiveData):
        (WebCore::CurlCacheManager::invalidateCacheEntry):
        (WebCore::CurlCacheManager::readCachedData):
        * platform/network/curl/CurlCacheManager.h:
        (WebCore::CurlCacheManager::cacheDirectory):

2014-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix automake warning.

        * GNUmakefile.list.am: Remove trailing whitespaces.

2014-01-23  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix positioning composited layers when the region has overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124042

        Reviewed by Mihnea Ovidenie.

        If there's a clipping GraphicsLayer on the hierarchy, substract its offset, since it's its
        parent that positions us.

        Tests: compositing/regions/position-layer-inside-region-overflow-hidden.html
               compositing/regions/position-layer-inside-overflow-hidden.html
               compositing/regions/position-layers-inside-region-overflow-hidden.html
               compositing/regions/position-layers-inside-regions-overflow-hidden.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): The position
        must also be correct when the region has box-shadow that inflates the region's layer. The
        composited layers from the flow thread should be rendered in the same position whether the
        associated region has clipping or not.
        Using the position of the clipping layer instead of the location of the clipbox makes it
        also work with box-shadow that inflates the region's graphics layer.

2014-01-23  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Convert regions iterator loops to range-based loops
        https://bugs.webkit.org/show_bug.cgi?id=127464

        Reviewed by Antti Koivisto.

        Replace most of the iterator loops in the region implementation with
        range based for loops. The for loops that iterate only over subsets
        of collections have not been changed.

        Tests: no new tests, this is a refactoring patch.

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        (WebCore::WebKitNamedFlow::getContent):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForCSSRegionsHighlight):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::markRegionsForOverflowLayoutIfNeeded):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::collectLayerFragments):
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::clearContentElements):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::RenderNamedFlowThread::computeOversetStateForRegions):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::isContainedInElements):
        (WebCore::RenderNamedFlowThread::getRanges):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

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

        Range should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115639

        Reviewed by Ryosuke Niwa.

        http://www.w3.org/TR/2013/WD-dom-20131107/#interface-range
        Now we can do `new Range()` instead of `document.createRange()`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/47ca40efdf58a4787aa33aa75a35778899b1c002%5E%21

        Test: fast/dom/Range/range-constructor.html

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

2014-01-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix for gles after r162565. Add missing definitions.

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

2014-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Use GUniquePtr instead of GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=127431

        Reviewed by Martin Robinson.

        GUniquePtr is a template alias of std::unique_ptr with a custom
        deleter that replaces GOwnPtr. GOwnPtr is still used for the cases
        where the output pointer is needed, but it will also be replaced soon.

        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        (accessibilityObjectLength):
        (textExtents):
        (webkitAccessibleTextGetChar):
        (numberOfReplacedElementsBeforeOffset):
        * page/ContextMenuController.cpp:
        * platform/SharedBuffer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcLoop):
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/geoclue/GeolocationProviderGeoclue.cpp:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcAddSrc):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getThemeIconFileName):
        (WebCore::Image::loadPlatformResource):
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::itemCount):
        (WebCore::contextMenuItemVector):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::createPlatformMenuItemDescription):
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::setURIList):
        (WebCore::DataObjectGtk::setURL):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::filenameToString):
        (WebCore::fileSystemRepresentation):
        (WebCore::filenameForDisplay):
        (WebCore::pathGetFileName):
        (WebCore::applicationDirectoryPath):
        (WebCore::sharedResourcesPath):
        (WebCore::directoryName):
        (WebCore::listDirectory):
        (WebCore::openTemporaryFile):
        * platform/gtk/GOwnPtrGtk.cpp: Removed.
        * platform/gtk/GOwnPtrGtk.h: Removed.
        * platform/gtk/GUniquePtrGtk.h: Added.
        * platform/gtk/GamepadsGtk.cpp:
        (WebCore::GamepadsGtk::GamepadsGtk):
        * platform/gtk/GtkClickCounter.cpp:
        (WebCore::GtkClickCounter::shouldProcessButtonEvent):
        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::sendCompositionAndPreeditWithFakeKeyEvents):
        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::popUp):
        (WebCore::GtkPopupMenu::typeAheadFind):
        * platform/gtk/LanguageGtk.cpp:
        (WebCore::platformLanguage):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::imageTitle):
        (WebCore::localizedMediaTimeDescription):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::selectionDataToUTF8String):
        (WebCore::PasteboardHelper::getClipboardContents):
        (WebCore::PasteboardHelper::fillSelectionData):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::createGtkActionForMenuItem):
        (WebCore::PopupMenuGtk::show):
        * platform/gtk/WebKitAuthenticationWidget.cpp:
        (webkitAuthenticationWidgetInitialize):
        * platform/network/ResourceHandleInternal.h:
        * platform/network/gtk/CredentialBackingStore.cpp:
        (WebCore::credentialForChallengeAsyncReadyCallback):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForSession):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/GUniquePtrSoup.h: Added.
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::failingURI):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::ensureReadBuffer):
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::createSoupRequestAndMessageForHandle):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageMembers):
        (WebCore::ResourceRequest::updateSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        * platform/network/soup/SoupURIUtils.cpp:
        (WebCore::soupURIToKURL):
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::clearPlatformData):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::hasPlatformData):
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):

2014-01-22  Simon Fraser  <simon.fraser@apple.com>

        Surround fixedVisibleContentRect code with USE(TILED_BACKING_STORE)
        https://bugs.webkit.org/show_bug.cgi?id=127461

        Reviewed by Andreas Kling.

        The "fixedVisibleContentRect" code path is only used by platforms
        which enabled TILED_BACKING_STORE, so to reduce confusion, surround
        this code with #if USE(TILED_BACKING_STORE).

        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::visibleSize):

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

        ASSERTION FAILED: v.isFixed() in WebCore::RenderStyle::setWordSpacing
        https://bugs.webkit.org/show_bug.cgi?id=126987

        Reviewed by Simon Fraser.

        When "inherit" is specified and there is no parent, Length values have an "Auto" type

        Test: fast/css3-text/css3-word-spacing-percentage/word-spacing-crash.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWordSpacing):

2014-01-22  Samuel White  <samuel_white@apple.com>

        AX: Can't always increment web sliders.
        https://bugs.webkit.org/show_bug.cgi?id=127451

        Reviewed by Chris Fleizach.

        Clamping the decrement/increment amount to one when necessary (if a percent change would result in a change of less than one).

        Test: accessibility/range-alter-by-percent.html

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

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

        Remove CSS3_TEXT_DECORATION define
        https://bugs.webkit.org/show_bug.cgi?id=127333

        Reviewed by Simon Fraser.

        This is required for unprefixing the text-decoration-* CSS properties.

        No new tests are necessary becase the flag was already on by default.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::parseTextUnderlinePosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TextUnderlinePosition):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitTextDecorationShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeMaxLogicalTop):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStyleToStrokeStyle):
        (WebCore::boundingBoxForAllActiveDecorations):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::maxLogicalTop):
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-01-22  Chris Fleizach  <cfleizach@apple.com>

        AX: Do not return an accessible name for an object just because it has tabindex=0
        https://bugs.webkit.org/show_bug.cgi?id=126914

        Reviewed by Mario Sanchez Prada.

        WebKit has code to return an accessible name for any object that is "generically" focusable (ie. tabindex=0).
        This behavior, which is not supported in ARIA, has caused many problems for VoiceOver. Often VoiceOver will
        speak all the text underneath any type of group.

        I think we need to revert this behavior and follow the ARIA spec more closely.

        Test: accessibility/aria-describedby-ensures-visibility.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):

2014-01-22  Brady Eidson  <beidson@apple.com>

        The IDB backing store get() method shouldn't call IDB callbacks directly
        https://bugs.webkit.org/show_bug.cgi?id=127453

        Reviewed by Beth Dakin.

        * Modules/indexeddb/IDBServerConnection.h:
        (WebCore::IDBGetResult::IDBGetResult): Add a new structure to hold all of the
          possible results of a get() call.

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get): Don't call IDBCallbacks directly.
          Instead, return the GetResult to the GetOperation which will make IDBCallbacks.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform): Get all of the IDBGetResults in the completion callback
          make the appropriate IDBCallback.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

2014-01-22  Dean Jackson  <dino@apple.com>

        Unreviewed attempt to fix 32-bit builds.

        Use long long rather than GC3Dintptr.

        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::drawElementsInstancedANGLE):
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawElementsInstanced):
        * html/canvas/WebGLRenderingContext.h:

2014-01-21  Brady Eidson  <beidson@apple.com>

        IDB: "Put" support
        <rdar://problem/15779643> and https://bugs.webkit.org/show_bug.cgi?id=127401

        Reviewed by Alexey Proskuryakov.

        Add persistent encode/decode for storage to the database:
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::encode):
        (WebCore::IDBKey::decode):
        * Modules/indexeddb/IDBKey.h:

        Add a data class to represent IDBKey suitable for crossing IPC:
        * Modules/indexeddb/IDBKeyData.cpp: Added.
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        * Modules/indexeddb/IDBKeyData.h: Added.
        (WebCore::IDBKeyData::IDBKeyData):

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBKeyData>::copy):
        * platform/CrossThreadCopier.h:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-22  Dean Jackson  <dino@apple.com>

        [WebGL] Implement ANGLE_instanced_arrays
        https://bugs.webkit.org/show_bug.cgi?id=127257

        Reviewed by Brent Fulgham.

        Implement the instanced drawing WebGL extension,
        ANGLE_instanced_arrays. This is currently Mac-only,
        but should be portable to other platforms if their
        OpenGL exposes the functions. It's also done in a way
        that will make exposing it to WebGL2 simple.

        Test: fast/canvas/webgl/angle-instanced-arrays.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add the new files to all the build systems.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Link JS side to C++ side.

        * html/canvas/ANGLEInstancedArrays.cpp: Added.
        (WebCore::ANGLEInstancedArrays::ANGLEInstancedArrays):
        * html/canvas/ANGLEInstancedArrays.h: Added.
        * html/canvas/ANGLEInstancedArrays.idl: Added.
        New boilerplate files that expose the extension methods.

        * html/canvas/WebGLExtension.h: New extension enum.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateVertexAttributes): Add an optional
        parameter representing the number of instance primitives we are asked
        to draw. Use that for the draw count if looking at an instanced attribute.
        Also make sure we see at least one non-instanced attribute.
        (WebCore::WebGLRenderingContext::validateDrawArrays): Update this so it could
        be used from either drawArrays or drawArraysInstanced.
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::validateDrawElements): Same here, now can be
        used by the instanced and non-instanced versions.
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::getExtension): Create and return the new extension.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add new extension to the list.
        (WebCore::WebGLRenderingContext::getVertexAttrib): Intercept a query to the divisor
        attribute and return the value we kept in the state.
        (WebCore::WebGLRenderingContext::drawArraysInstanced): Call the GC3D method.
        (WebCore::WebGLRenderingContext::drawElementsInstanced): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttribDivisor): Ditto.

        * html/canvas/WebGLRenderingContext.h: Define the new methods and parameters.

        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::setVertexAttribDivisor): Keep a record of the
        divisor if we set it.
        * html/canvas/WebGLVertexArrayObjectOES.h:
        (WebCore::WebGLVertexArrayObjectOES::VertexAttribState::VertexAttribState):

        * platform/graphics/GraphicsContext3D.h: New enum.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::drawArraysInstanced): The actual calls into OpenGL.
        (WebCore::GraphicsContext3D::drawElementsInstanced): Ditto.
        (WebCore::GraphicsContext3D::vertexAttribDivisor): Ditto.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Empty implementations
        for non-mac platforms.

        * platform/graphics/ios/GraphicsContext3DIOS.h: Define the iOS names for the
        functions.

2014-01-22  Zalan Bujtas  <zalan@apple.com>

        [CSS Shapes] shape-inside rectangle layout can fail
        https://bugs.webkit.org/show_bug.cgi?id=124784

        Reviewed by Darin Adler.

        Early subpixel rounding/flooring/ceiling can have unwanted
        side effect on the final pixel value. Delay pixel
        conversions as much as possible.

        Existing test is changed to reflect subpixel functionality.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):

2014-01-22  Jochen Eisinger  <jochen@chromium.org>

        Add protocolIsInHTTPFamily for strings and use it where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=127336

        Reviewed by Alexey Proskuryakov.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSource::schemeMatches):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):
        * platform/URL.cpp:
        (WebCore::protocolIsInHTTPFamily):
        * platform/URL.h:

2014-01-22  Zalan Bujtas  <zalan@apple.com>

        Subpixel Layout: SimpleLineLayout needs more position rounding to match InlineFlowBox layout.
        https://bugs.webkit.org/show_bug.cgi?id=127404

        Reviewed by Antti Koivisto.

        In order to produce a CSS pixel perfect layout, SimpleLineLayout needs to
        round line positions to CSS (integral) position similarly to InlineFlowBox.

        Existing tests cover it.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):

2014-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout of r162534, this caused inspector test failures.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsTimerFired):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * inspector/InspectorProfilerAgent.cpp:

2014-01-22  peavo@outlook.com  <peavo@outlook.com>

        Crashes in setTextForIterator
        https://bugs.webkit.org/show_bug.cgi?id=127424

        Reviewed by Brent Fulgham.

        * platform/text/icu/UTextProviderLatin1.cpp:
        (WebCore::uTextLatin1Clone): Provide correct buffer size in utext_setup function call.
        (WebCore::uTextLatin1Access): Give correct buffer size to memset call.
        (WebCore::openLatin1UTextProvider): Ditto.

2014-01-22  Jer Noble  <jer.noble@apple.com>

        [Mac] MediaPlayerPrivateMediaSourceAVFObjC::load ASSERTs on lots of tests
        https://bugs.webkit.org/show_bug.cgi?id=127430

        Reviewed by Eric Carlson.

        When other registered media engines cannot load a URL, the engine selection
        will eventually pick MediaPlayerPrivateMediaSourceAVFObjC and ask it to load
        the URL. Instead of ASSERTing here, simply reject the URL by setting the
        network state to FormatError.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):

2014-01-22  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get EFL and GTK compiling with ACCESSIBILITY disabled
        https://bugs.webkit.org/show_bug.cgi?id=127119

        Reviewed by Mario Sanchez Prada.

        At build time, the compiler was not able to determine which Timer's constructor to call in AXObjectCache when
        ACCESSIBILITY is not enabled, fixing that.
        Also guarding some members in AccessibilityObject that are only being used by EFL and GTK with ACCESSIBILITY.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXObjectCache):
        * accessibility/AccessibilityObject.h:

2014-01-22  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Refactor calculation of hasRx and hasRy values in SVGPathData
        https://bugs.webkit.org/show_bug.cgi?id=127423

        Reviewed by Darin Adler.

        This is a follow-up on https://bugs.webkit.org/show_bug.cgi?id=127337

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement):

2014-01-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=127409

        Reviewed by Timothy Hatcher.

        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        Remove m_recompileTimer and the recompile soon function.
        We can just recompile immediately in all existing cases.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didAddFirstListener):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        Add a "didAddFirstListener" to match "didRemoveLastListener".
        Only recompile functions when we attach the debugger and when
        we detach the last listener.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        Same thing. Also rearrange the functions to read better.

        * inspector/InspectorProfilerAgent.cpp:
        Use the direct recompile function instead of the removed "soon" version.

2014-01-22  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Improve detecting and handling of SSL client certificate
        https://bugs.webkit.org/show_bug.cgi?id=125006

        Reviewed by Brent Fulgham.

        Add client certificate handling.

        * platform/network/ResourceHandle.h:
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::hasSSLConnectError):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setClientCertificateInfo):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/SSLHandle.cpp:
        (WebCore::addAllowedClientCertificate):
        (WebCore::setSSLClientCertificate):
        * platform/network/curl/SSLHandle.h:

2014-01-22  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] layerOwner in RenderNamedFlowFragment cannot return null
        https://bugs.webkit.org/show_bug.cgi?id=127343

        Reviewed by Sam Weinig.

        RenderNamedFlowFragment::layerOwner cannot return null because regions create stacking
        contexts which create layers.

        No new tests, no functional change.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        * rendering/RenderNamedFlowFragment.h:

2014-01-22  Antti Koivisto  <antti@apple.com>

        Avoid unthrottled layer flushes triggered by RenderLayerCompositor::ensureRootLayer
        https://bugs.webkit.org/show_bug.cgi?id=127426

        Reviewed by Anders Carlsson.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

            Factor scroll layer position update to a function.

        (WebCore::RenderLayerCompositor::ensureRootLayer):
        
            Stop calling frameViewDidChangeSize/frameViewDidScroll. Instead call the relevent functions
            directly. This avoid unthrottled layer flush that is done when the view actually scrolls.

        * rendering/RenderLayerCompositor.h:

2014-01-22  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] -webkit-background-blend-mode fails for certain SVG files
        https://bugs.webkit.org/show_bug.cgi?id=127350

        Reviewed by Dirk Schulze.

        The graphics context of the SVG inherits the blend mode set
        on the background layer. Fix consists in drawing the SVG
        in a transparency layer.

        Test: css3/compositing/background-blend-mode-svg.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Begin a transparency layer if a blend mode is set.

2014-01-22  Antti Koivisto  <antti@apple.com>

        Update overlay scrollbars in single pass
        https://bugs.webkit.org/show_bug.cgi?id=127289

        Reviewed by Anders Carlsson.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        
            Multi-pass scrollbar resolution is only needed for traditional scrollbars. Overlay scrollbars don't affect layout.

2014-01-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect layout of a region pseudo children
        https://bugs.webkit.org/show_bug.cgi?id=126146

        Reviewed by David Hyatt.

        Test: fast/regions/collapse-anonymous-region.html

        A region behaviour, styled using -webkit-flow-from, is modeled using an anonymous
        block created to fragment the named flow content inside the region. We have to prevent
        the behaviour of anonymous children collapsing for this block to make sure that the
        region element children are still laid out properly when the region element becomes an ordinary
        element.

        * rendering/RenderBlockFlow.h:

2014-01-21  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove unused "acceleratedCompositingForScrollableFramesEnabled" setting
        https://bugs.webkit.org/show_bug.cgi?id=127402

        Reviewed by Anders Carlsson.

        compositing/iframes/iframe-composited-scrolling.html is updated because
        there are no usages in WebCore.

        * page/Settings.in:

2014-01-21  Alex Christensen  <achristensen@webkit.org>

        Compile fix for using libsoup on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=127377

        Reviewed by Daniel Bates.

        * platform/network/soup/ProxyResolverSoup.cpp:
        (soupProxyResolverWkSetProperty):
        (soupProxyResolverWkGetProperty):
        (soupProxyResolverWkGetProxyURISync):
        Replaced uint with unsigned.

2014-01-21  Daniel Bates  <dabates@apple.com>

        Break up single assertion into two assertions in HTMLMediaElement::returnPlatformLayer()

        Following up after <http://trac.webkit.org/changeset/162473>, we should break up
        the assertion into two assertions as suggested by Darin Adler. Separating the single
        assertion into two assertions makes it straightforward to determine the conjunct that
        failed among other benefits.

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

2014-01-21  Brady Eidson  <beidson@apple.com>

        The IDB backing store put() method shouldn't call IDB callbacks directly
        https://bugs.webkit.org/show_bug.cgi?id=127399

        Reviewed by Beth Dakin.

        Refactor the put() callback to take a resulting key or an error.
        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform): Call to the backing store, then perform the
          appropriate IDB callback whether a key or an error was returned.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::put): Don’t call IDB callbacks directly.
          Instead, pass the resulting key/error back to the PutOperation.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-21  Jae Hyun Park  <jae.park@company100.net>

        Use nullptr in HTMLCanvasElement
        https://bugs.webkit.org/show_bug.cgi?id=127388

        Reviewed by Gyuyoung Kim.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::drawingContext):
        (WebCore::HTMLCanvasElement::existingDrawingContext):

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

        Assertion failure in Range::nodeWillBeRemoved
        https://bugs.webkit.org/show_bug.cgi?id=121694

        Reviewed by Ryosuke Niwa.

        Based on Blink a change: https://chromium.googlesource.com/chromium/blink/+/407c1d7b2c45974aa614b3f847ffe9e8fce205fa

        This patch fix an assertion failure. Range::nodeWillBeRemoved() might
        be called with removed node in ContainerNode, when DOMNodeRemovedFromDocument
        event handler calls removeChild(), for node being removed.

        Test: fast/dom/Range/remove-twice-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemoveChild):
        * dom/ContainerNode.h:

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r161580): Some PDFs render outside their <img>
        https://bugs.webkit.org/show_bug.cgi?id=127381
        <rdar://problem/15872168>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::transformContextForPainting):
        Only try to make the scale uniform if it isn't already, and use the minimum
        of the two original scales when doing so, so that it is absolutely certain
        to fit inside space allocated for the image during layout.

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Remove #if PLATFORM(IOS) in various places around customFixedPositionLayoutRect() code
        https://bugs.webkit.org/show_bug.cgi?id=127373

        Reviewed by Beth Dakin.

        Instead of PLATFORM(IOS) #idefs at every call site for viewportConstrainedVisibleContentRect(),
        move the #ifdef inside viewportConstrainedVisibleContentRect().
        
        The one call site that needs special handling is RenderLayerBacking::updateCompositedBounds(),
        which needs to avoid clipping fixed layers to the custom fixed position rect, but instead to
        visibleContentRect() (which is really the document bounds on iOS). This ensures that the
        fixed layers aren't clipped when zooming out.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedVisibleContentRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

2014-01-21  Andy Estes  <aestes@apple.com>

        [iOS] Allow all clients to link against WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127372
        
        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:

2014-01-21  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Preserve box-shape order when serializing shape values
        https://bugs.webkit.org/show_bug.cgi?id=127200

        Reviewed by Dirk Schulze.

        Convert the parsed shape-box pair to a CSSValueList rather than directly
        adding the box value to BasicShape. The CSSValueList preserves the
        shape-box ordering, and cleans up a little bit of the code shared between
        clip and shape values.

        Modifying existing parsing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue): Factor out code common to generating shape
        values.
        (WebCore::ComputedStyleExtractor::propertyValue): Generate a CSSValueList when
        you have both a shape and a box.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeAndOrBox): Factor out code common to clip
        paths and shape properties that parses the [basic-shape || box] syntax from
        the CSS Shapes spec.
        (WebCore::CSSParser::parseShapeProperty): Parse shape-box pairs as a CSSValueList.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Use the CSSValueList for shape-box pairs.
        * css/CSSValueList.h:
        (WebCore::CSSValueList::itemWithoutBoundsCheck): Add a const version.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Specify a box when blending.
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createShapeValue): Add a box parameter.
        (WebCore::ShapeValue::ShapeValue): Ditto.

2014-01-21  Daniel Bates  <dabates@apple.com>

        Fix the iOS Simulator release build

        Substitute ASSERT_UNUSED() for ASSERT() to resolve a compiler warning
        that the argument platformLayer is unused. The argument platformLayer
        is only used in the asserted condition, which isn't compiled in a
        release build; => the argument is unused in a release build.

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

2014-01-21  Zoltan Horvath  <zoltan@webkit.org>

        Since MidpointState is a class, it should behave like a class
        https://bugs.webkit.org/show_bug.cgi?id=127154

        Reviewed by David Hyatt.

        I modified MidpointState to behave like a class, updated the call sites also.

        No new tests, no behavior change.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::reset):
        (WebCore::MidpointState::startIgnoringSpaces):
        (WebCore::MidpointState::stopIgnoringSpaces):
        (WebCore::MidpointState::midpoints):
        (WebCore::MidpointState::numMidpoints):
        (WebCore::MidpointState::currentMidpoint):
        (WebCore::MidpointState::incrementCurrentMidpoint):
        (WebCore::MidpointState::decreaseNumMidpoints):
        (WebCore::MidpointState::betweenMidpoints):
        (WebCore::MidpointState::setBetweenMidpoints):
        (WebCore::MidpointState::addMidpoint): Renamed from deprecatedAddMidpoint, since now
        its private, we no longer need to discourage callers from using it.
        * rendering/InlineIterator.h:
        (WebCore::IsolateTracker::addFakeRunIfNecessary):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::checkMidpoints):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162452.
        http://trac.webkit.org/changeset/162452
        https://bugs.webkit.org/show_bug.cgi?id=127366

        broke a few tests on all Mac WebKit1 bots (Requested by
        thorton on #webkit).

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::setIsVisuallyIdle):
        (WebCore::Page::setIsVisible):
        (WebCore::Page::visibilityState):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):

2014-01-21  Chris Fleizach  <cfleizach@apple.com>

        AX: Mac: Expose the visible text of a password field to AX
        https://bugs.webkit.org/show_bug.cgi?id=127353

        Reviewed by Brent Fulgham.

        The Mac platform should now expose the rendered value of password fields through AX.

        Test: accessibility/password-field-value.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textLength):
        (WebCore::AccessibilityRenderObject::passwordFieldValue):

2014-01-21  Robert Sipka  <sipka@inf.u-szeged.hu>

        Support SSL error handling in case of synchronous job.
        https://bugs.webkit.org/show_bug.cgi?id=125301

        Reviewed by Brent Fulgham.

        Set ssl error informations for the users.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Export systemTotalMemory() and systemMemoryLevel() for MobileSafari
        https://bugs.webkit.org/show_bug.cgi?id=127360

        Reviewed by Andy Estes.
        
        MobileSafari inappropriately calls these WebCore functions directly,
        so export them.

        * WebCore.exp.in:

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Clean up PLATFORM(IOS) code related to the custom fixed position layout rect
        https://bugs.webkit.org/show_bug.cgi?id=127362

        Reviewed by Dave Hyatt.

        Various platforms customize the rect used to layout position:fixed elements,
        and each modified RenderBox::availableLogicalHeight/WidthUsing() in different
        ways.
        
        Clean this up by adding RenderView::clientLogicalWidth/HeightForFixedPosition(),
        and moving the platform hacks into it.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::clientLogicalWidthForFixedPosition):
        (WebCore::RenderView::clientLogicalHeightForFixedPosition):
        * rendering/RenderView.h:

2014-01-21  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        ASSERT(time.isFinite()) in SVGSMILElement::createInstanceTimesFromSyncbase
        <https://webkit.org/b/108184>

        Reviewed by Philip Rogers.

        In the case a SMILElement timing had a syncbase dependency on an indefinite value
        the assert were raised. The assert has been removed and a check has been added
        instead that prevents the addition of indefinite times to the time list.

        Test: svg/animations/smil-syncbase-self-dependency.svg

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
          ASSERT removed.

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        Address late review naming comments after r162453.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/mac/CALayerWebAdditions.h: Removed.
        * platform/graphics/mac/CALayerWebAdditions.mm: Removed.
        * platform/graphics/mac/WebCoreCALayerExtras.h: Added.
        * platform/graphics/mac/WebCoreCALayerExtras.mm: Added.
        (-[CALayer web_disableAllActions]):

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        Keep CALayer implicit animation disabling code in a single place
        https://bugs.webkit.org/show_bug.cgi?id=127355

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        Add CALayerWebAdditions.{h,mm}.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::commonInit):
        Remove nullActionsDictionary() and use [CALayer(WebAdditions) web_disableAllActions] instead.

        * platform/graphics/mac/CALayerWebAdditions.h: Added.
        * platform/graphics/mac/CALayerWebAdditions.mm: Added.
        (-[CALayer web_disableAllActions]):
        Added. Disable all implicit actions on the layer.

2014-01-21  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

2014-01-21  Lauro Neto  <lauro.neto@openbossa.org>

        Remove PLATFORM(NIX) from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127299

        Reviewed by Anders Carlsson.

        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * html/HTMLCanvasElement.h:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * page/ChromeClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/LocalizedStrings.h:
        * platform/Widget.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFElevation.cpp:
        * platform/cairo/WidgetBackingStore.h:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/OpenGLShims.cpp:
        (WebCore::getProcAddress):
        * platform/graphics/OpenGLShims.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/network/ResourceHandle.h:
        * plugins/PluginPackage.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2014-01-21  Eric Carlson  <eric.carlson@apple.com>

        Add &lrm; &rlm; and &nbsp; to WebVTT parser
        https://bugs.webkit.org/show_bug.cgi?id=85112

        Reviewed by Jer Noble.

        No new tests, track-webvtt-tc022-entities.html was updated to test this.

        * html/track/WebVTTTokenizer.cpp:
        (WebCore::WebVTTTokenizer::nextToken): Support RLM, LRM, and NBSP entities.

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162354.
        http://trac.webkit.org/changeset/162354
        https://bugs.webkit.org/show_bug.cgi?id=127354

        Appears to have broken accessibility in a non-trivial way
        (Requested by ap on #webkit).

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162445.
        http://trac.webkit.org/changeset/162445
        https://bugs.webkit.org/show_bug.cgi?id=127351

        It broke the 32 bit GTK build (Requested by Ossy on #webkit).

        * rendering/style/StyleRareInheritedData.cpp:

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

        Wrong struct size when CSS_IMAGE_ORIENTATION and CSS3_TEXT_DECORATION are enabled.
        https://bugs.webkit.org/show_bug.cgi?id=127346

        Efl build fix.

        Reviewed by Csaba Osztrogonác.

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-21  Antti Koivisto  <antti@apple.com>

        Delay initial layer flush during loading on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=127347

        Reviewed by Andreas Kling.

        To reduce unnecessary repaints enable the same behaviour as iOS already has.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        
            Set the initial state of m_layerFlushThrottlingEnabled correctly.

        (WebCore::RenderLayerCompositor::scheduleLayerFlush):
        (WebCore::RenderLayerCompositor::startInitialLayerFlushTimerIfNeeded):
        * rendering/RenderLayerCompositor.h:
        
            Enable initial layer flush delay on all platforms.

2014-01-21  Mihai Tica  <mitica@adobe.com>

        If you set a tiled cross-faded-image or a tiled gradient as
        a background layer, -webkit-background-blend-mode doesn't work.
        The problem consists in the blendMode parameter not being set
        for these specific drawing paths.

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

        Test: css3/compositing/background-blend-mode-tiled-layers.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern): Add the blendMode parameter and pass it to ImageBuffer::drawPattern.
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern): Add the blendMode parameter and pass it to ImageBuffer::drawPattern.
        * platform/graphics/ImageBuffer.h: Add a BlendMode parameter to the drawPattern method.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawPattern): Add the default BlendMode parameter to the method declaration.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::drawPattern): Add and use the blendMode parameter for all the code paths.
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::BufferedImage::drawPattern): Add the default BlendMode parameter to the method declaration.

2014-01-21  Gurpreet Kaur  <k.gurpreet@samsung.com>

        The WebCore.vcxproj.filters doesnot apply
        https://bugs.webkit.org/show_bug.cgi?id=127338

        Reviewed by Csaba Osztrogonác.

        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Modified the WebCore.vcxproj.filters so that it is applied when loading
        WebCore.vcxproj file.

2014-01-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix SVG animations which set rx or ry attributes
        https://bugs.webkit.org/show_bug.cgi?id=127337

        Reviewed by Dirk Schulze.

        Test: svg/stroke/animated-non-scaling-rxry.html

        Merged from Blink: https://src.chromium.org/viewvc/blink?revision=152376&view=revision

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement):

2014-01-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-flowto through ATK_RELATION_FLOWS_TO
        https://bugs.webkit.org/show_bug.cgi?id=127291

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/aria-flowto.html

        Expose aria-flowto through ATK_RELATION_FLOWS_TO according to
        http://www.w3.org/TR/wai-aria-implementation/#mapping_state-property

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

2014-01-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Remove Nix from CMake scripts
        https://bugs.webkit.org/show_bug.cgi?id=127264

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Remove an unused PageGroup function
        https://bugs.webkit.org/show_bug.cgi?id=127327

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/PageGroup.cpp:
        * page/PageGroup.h:

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Move user style sheet handling to UserContentController
        https://bugs.webkit.org/show_bug.cgi?id=127322
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateInjectedStyleSheetCache):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserStyleSheet):
        (WebCore::UserContentController::removeUserStyleSheet):
        (WebCore::UserContentController::removeUserStyleSheets):
        (WebCore::UserContentController::removeAllUserContent):
        (WebCore::UserContentController::invalidateInjectedStyleSheetCacheInAllFrames):
        * page/UserContentController.h:
        (WebCore::UserContentController::userStyleSheets):

2014-01-20  Benjamin Poulain  <benjamin@webkit.org>

        Add a nicer way to iterate over all the attributes of an element
        https://bugs.webkit.org/show_bug.cgi?id=127266

        Reviewed by Geoffrey Garen.

        When using Element::attributeAt() in a loop, the compiler had to generate two kinds of
        accessor:
        -If the element data is unique, the length and data comes from the attribute Vector.
        -If the element data is shared, the data comes from the tail of elementData itself.

        The choice was done for every access, which caused the assembly to be a little
        hard to follow.
        This patch unify the data access by doing everything as a array pointer with offset (getting
        that data from Vector when necessary).

        To make it easier to do the right thing, a new iterator was added so that range-based loops
        can replace all the faulty cases.

        * css/SelectorChecker.cpp:
        (WebCore::anyAttributeMatches):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::checkExactAttribute):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::getNames):
        (WebCore::DatasetDOMStringMap::item):
        (WebCore::DatasetDOMStringMap::contains):
        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes):
        (WebCore::Element::detachAllAttrNodesFromElement):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        (WebCore::Element::attributesIterator):
        * dom/ElementData.cpp:
        (WebCore::ElementData::isEquivalent):
        (WebCore::ElementData::findAttributeIndexByNameSlowCase):
        * dom/ElementData.h:
        (WebCore::AttributeConstIterator::AttributeConstIterator):
        (WebCore::AttributeConstIterator::operator*):
        (WebCore::AttributeConstIterator::operator->):
        (WebCore::AttributeConstIterator::operator++):
        (WebCore::AttributeConstIterator::operator==):
        (WebCore::AttributeConstIterator::operator!=):
        (WebCore::AttributeIteratorAccessor::AttributeIteratorAccessor):
        (WebCore::AttributeIteratorAccessor::begin):
        (WebCore::AttributeIteratorAccessor::end):
        (WebCore::ElementData::attributesIterator):
        * dom/Node.cpp:
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::Node::lookupNamespacePrefix):
        (WebCore::Node::compareDocumentPosition):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::makePresentationAttributeCacheKey):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendElement):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        (WebCore::StyledMarkupAccumulator::appendElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parametersForPlugin):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::matchesElement):
        * page/PageSerializer.cpp:
        (WebCore::isCharsetSpecifyingNode):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2014-01-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Do refactor in collectGradientAttributes() and renderStyleForLengthResolve()
        https://bugs.webkit.org/show_bug.cgi?id=126869

        Reviewed by Dirk Schulze.

        Some SVG functions have done a first iteration by using a boolean flag. This is
        one of poor implementations. This patch fix it by extracting a logic into a new method.
        Additionally it would be good to use do-while() loop instead of using while() in
        renderStyleForLengthResolving() because a first condition is always true.

        Merge r165358 from blink.

        * svg/SVGLengthContext.cpp:
        (WebCore::renderStyleForLengthResolving):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        UserContentController should keep track of user scripts
        https://bugs.webkit.org/show_bug.cgi?id=127317
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        Move handling of user scripts from PageGroup to UserContentController.

        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserScriptsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserScript):
        (WebCore::UserContentController::removeUserScript):
        (WebCore::UserContentController::removeUserScripts):
        (WebCore::UserContentController::removeAllUserContent):
        * page/UserContentController.h:
        (WebCore::UserContentController::userScripts):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Give each page a UserContentController
        https://bugs.webkit.org/show_bug.cgi?id=127315
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        Add a UserContentController object to PageGroup and have the page group set it on any
        pages that are added to the page group.

        This is another step towards moving handling of user content away from PageGroup and make it
        possible for each page to have different user content.

        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::setUserContentController):
        * page/Page.h:
        (WebCore::Page::userContentController):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::addPage):
        (WebCore::PageGroup::removePage):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addPage):
        (WebCore::UserContentController::removePage):
        * page/UserContentController.h:

2014-01-20  Jeremy Jones  <jeremyj@apple.com>

        Add AVKit fullscreen video interface.
        https://bugs.webkit.org/show_bug.cgi?id=126818

        Reviewed by Eric Carlson.

        No new tests, no observable change in functionality.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        Add ability for fullscreen to borrow the AVPlayerLayer.
        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::setMediaPlaybackFullscreenAVKit):
        (WebCore::Settings::mediaPlaybackFullscreenAVKit):
        Add a disabled setting.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen):
        Enabled fullscreen for iOS.
        * platform/ios/WebVideoFullscreenControllerAVKit.h: Added.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm: Added.
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController forwardingTargetForSelector:]):
        (-[WebAVPlayerController shouldDismissForDone]):
        (-[WebAVPlayerController play:]):
        (-[WebAVPlayerController pause:]):
        (-[WebAVPlayerController togglePlayback:]):
        (-[WebAVPlayerController isPlaying]):
        (-[WebAVPlayerController setPlaying:]):
        (+[WebAVPlayerController keyPathsForValuesAffectingPlaying]):
        (-[WebAVPlayerController seekToTime:]):
        (-[WebAVPlayerController updateTimingWithCurrentTime:]):
        (-[WebAVPlayerController effectiveRate]):
        (-[WebAVPlayerController setMediaElement:]):
        (-[WebAVPlayerController handleEvent:]):
        (-[WebVideoFullscreenController init]):
        (-[WebVideoFullscreenController dealloc]):
        (-[WebVideoFullscreenController setMediaElement:]):
        (-[WebVideoFullscreenController mediaElement]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        Add WebAVPlayerController for HTMLMediaElememt to interface with AVPlayerViewController.

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

        Replace uses of std::forward<T>(), std::unique_ptr<T>::clear() that landed in r162368
        https://bugs.webkit.org/show_bug.cgi?id=127306

        Reviewed by Darin Adler.

        Address the post-landing reviews of the r162368 commit that moved WebAudio source code to using std::unique_ptr.
        std::move() should be used instead of std::forward<T>() in HRTFKernel::create().
        Instead of calling std::unique_ptr<T>::reset(), nullptr should be assigned to that smart pointer to reset it.

        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::uninitialize):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::uninitialize):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::uninitialize):
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::set):
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):

2014-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Modernize WebCore/inspector with nullptr
        https://bugs.webkit.org/show_bug.cgi?id=127303

        Reviewed by Anders Carlsson.

        Ran clang-modernize -use-nullptr over WebCore/inspector.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::findMagicComment):
        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::SetOuterHTMLAction::SetOuterHTMLAction):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::discardAgent):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::addMessageToConsole):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::disconnectClient):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::~InspectorHeapProfilerAgent):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::assertDocument):
        (WebCore::assertIDBFactory):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::frameForScriptExecutionContext):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl):
        (WebCore::InspectorInstrumentation::consoleAgentEnabled):
        (WebCore::InspectorInstrumentation::unregisterInstrumentingAgents):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForNonDocumentContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForFrame):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForDocument):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::disable):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        (WebCore::InspectorPageAgent::sharedBufferContent):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::frameForId):
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::ruleSourceDataAt):
        (WebCore::buildSourceRangeObject):
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::InspectorStyle::extractSourceData):
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::styleForId):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::asProtocolValue):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::willComposite):
        (WebCore::InspectorTimelineAgent::page):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::ResourceData):
        (WebCore::NetworkResourcesData::xhrReplayData):
        (WebCore::NetworkResourcesData::removeCachedResource):
        (WebCore::NetworkResourcesData::resourceDataForRequestId):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::~PageConsoleAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::disable):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::~PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::globalState):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::~WorkerRuntimeAgent):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Add empty UserContentController class
        https://bugs.webkit.org/show_bug.cgi?id=127300
        <rdar://problem/15861296>

        Reviewed by Dan Bernstein.

        This is the first step towards moving handling of user scripts and style sheets from
        the page group to a separate objects and ultimately make them be settable per page instead of per page group.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/UserContentController.cpp: Added.
        (WebCore::UserContentController::create):
        (WebCore::UserContentController::UserContentController):
        (WebCore::UserContentController::~UserContentController):
        * page/UserContentController.h: Added.

2014-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Run clang-modernize and let it add a bunch of missing overrides in WebCore/inspector
        https://bugs.webkit.org/show_bug.cgi?id=127206

        Reviewed by Anders Carlsson.

        Let clang-modernize add overrides.

        * inspector/DOMEditor.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHistory.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.h:

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

        Move WebAudio source code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127274

        Reviewed by Eric Carlson.

        Move from using OwnPtr and PassOwnPtr to using std::unique_ptr and move semantics
        in the WebAudio module and the WebAudio code in the platform layer.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::addInput):
        (WebCore::AudioNode::addOutput):
        (WebCore::AudioNode::checkNumberOfChannelsForInput):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::createKernel):
        (WebCore::BiquadProcessor::getFrequencyResponse):
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        (WebCore::ConvolverNode::uninitialize):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::createKernel):
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::initialize):
        (WebCore::DynamicsCompressorNode::uninitialize):
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::OscillatorNode):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::uninitialize):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PeriodicWave.cpp:
        (WebCore::PeriodicWave::createBandLimitedTables):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::RealtimeAnalyser):
        (WebCore::RealtimeAnalyser::setFftSize):
        * Modules/webaudio/RealtimeAnalyser.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::lazyInitializeOversampling):
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::createKernel):
        * Modules/webaudio/WaveShaperProcessor.h:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::AudioBus):
        (WebCore::AudioBus::copyWithGainFrom):
        * platform/audio/AudioBus.h:
        * platform/audio/AudioChannel.cpp:
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::AudioChannel):
        (WebCore::AudioChannel::set):
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/AudioDestination.h:
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::AudioResampler):
        (WebCore::AudioResampler::configureChannels):
        * platform/audio/AudioResampler.h:
        * platform/audio/AudioSession.h:
        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::setNumberOfChannels):
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::setNumberOfChannels):
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::createInterpolatedFrame):
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::HRTFDatabase):
        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        (WebCore::HRTFDatabaseLoader::load):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        * platform/audio/HRTFElevation.h:
        (WebCore::HRTFElevation::HRTFElevation):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createImpulseResponse):
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):
        (WebCore::HRTFKernel::HRTFKernel):
        * platform/audio/MultiChannelResampler.cpp:
        (WebCore::MultiChannelResampler::MultiChannelResampler):
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/Panner.h:
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        * platform/audio/ReverbConvolverStage.h:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::AudioSession):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::AudioSession):

2014-01-20  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: support explicit column breaks
        https://bugs.webkit.org/show_bug.cgi?id=123993

        Reviewed by David Hyatt.

        Merely supporting insertion of explicit (forced) column breaks in
        the region based multicol implementation is really simple: just
        hook up with what the CSS regions code is already doing.

        However, there is one complication: column balancing. In order to
        balance columns as nicely as possible when there are explicit
        breaks, we need to figure out between which explicit breaks the
        implicit breaks will occur (if there's room for any at all).

        Tests: fast/multicol/newmulticol/break-after.html
               fast/multicol/newmulticol/break-before.html
               fast/multicol/newmulticol/breaks-2-columns-3-no-balancing.html
               fast/multicol/newmulticol/breaks-2-columns-3.html
               fast/multicol/newmulticol/breaks-3-columns-3.html
               fast/multicol/newmulticol/fixed-height-fill-balance-2.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak): Use the already
        existing region breaking code when inserting breaks in region
        based multicol.
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::relayoutForPagination): Avoid
        re-balancing if the multicol's contents were not laid out. Apart
        from being good for performance, this is now necessary because of
        how explicit breaks are implemented.
        (WebCore::RenderMultiColumnBlock::layoutSpecialExcludedChild):
        Detect if the contents are going to be laid out, or skipped, so
        that we can tell if we need to (re-)balance the columns
        afterwards.
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::addForcedRegionBreak):
        Locate the appropriate multi-column set and call its
        addForcedBreak().
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::findRunWithTallestColumns):
        (WebCore::RenderMultiColumnSet::distributeImplicitBreaks): Figure
        out how many implicit breaks each single "content run" should
        contain. The taller the content run, the more implicit breaks.
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight): This is
        now a const method that only does half of what the old
        calculateBalancedHeight() did. The rest (such as actually storing
        the new column height) is done by recalculateBalancedHeight().
        (WebCore::RenderMultiColumnSet::clearForcedBreaks): Needs to be
        called between each layout pass, to clear the list of "content
        runs".
        (WebCore::RenderMultiColumnSet::addForcedBreak): Only useful when
        columns are to be balanced. It receives explicit (forced) breaks
        and stores them as "content runs". When layout is done, we'll go
        through the list of content runs, and see where implicit breaks
        should be inserted (if there's room for any). The goal is to
        insert implicit breaks in such a way that the final columns become
        as short as possible.
        (WebCore::RenderMultiColumnSet::recalculateBalancedHeight):
        Calculates and sets a new balanced column height. This used to be
        done directly in calculateBalancedHeight(), but that method is now
        const and it now only calculates the new height and returns it.
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        * rendering/RenderMultiColumnSet.h: Remove old data members
        intended for forced breaks (they were unused), and introduce a
        "content run" vector instead. A new content run is triggered by an
        explicit break. This is only used when column balancing is
        enabled. When not balanced, RenderMultiColumnSet doesn't need to
        do anything when explicit breaks are inserted.

2014-01-20  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict 'preload' behavior
        https://bugs.webkit.org/show_bug.cgi?id=127297

        Reviewed by Jer Noble.

        Tests: media/video-restricted-no-preload-auto.html
               media/video-restricted-no-preload-metadata.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Apply restrictions to preload attribute before
            passing to media engine.
        (WebCore::HTMLMediaElement::loadResource): Ditto.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::effectivePreloadForElement): New, limit preload according to restrictions.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Limit preload to metadata only. Drive-by
            static deviceClass initialization cleanup.

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Support MetadataPreloadingNotPermitted and
            AutoPreloadingNotPermitted.

2014-01-20  Andreas Kling  <akling@apple.com>

        Let RenderImage construct its RenderImageResource.
        <https://webkit.org/b/127290>

        Everyone who creates a RenderImage immediately follows up with
        creating a RenderImageResource and assigning it to the image.

        Let the RenderImage constructor do this instead, and make the
        imageResource() accessors return references. This exposed a
        number of unnecessary null checks.

        Also modernized the touched code with std::unique_ptr.

        Reviewed by Antti Koivisto.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createElementRenderer):
        (WebCore::HTMLImageElement::didAttachRenderers):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::createInputRenderer):
        (WebCore::ImageInputType::attach):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::styleDidChange):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded):
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::notifyFinished):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::foregroundIsKnownToBeOpaqueInRect):
        (WebCore::RenderImage::minimumReplacedHeight):
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        (WebCore::RenderImage::embeddedContentBox):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::imageResource):
        (WebCore::RenderImage::cachedImage):
        * rendering/RenderImageResource.h:
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createContentRenderer):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::~RenderSVGImage):
        (WebCore::RenderSVGImage::updateImageViewport):
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::paintForeground):
        * rendering/svg/RenderSVGImage.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::didAttachRenderers):

2014-01-20  Antti Koivisto  <antti@apple.com>

        Update overlay scrollbars in single pass
        https://bugs.webkit.org/show_bug.cgi?id=127289

        Reviewed by Anders Carlsson.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        
            Multi-pass scrollbar resolution is only needed for traditional scrollbars. Overlay scrollbars don't affect layout.

2014-01-20  Jochen Eisinger  <jochen@chromium.org>

        Never send a non-http(s) referrer header even with a referrer policy
        https://bugs.webkit.org/show_bug.cgi?id=127172

        Reviewed by Alexey Proskuryakov.

        This mirrors the code SecurityPolicy::shouldHideReferrer which is used
        for ReferrerPolicyDefault.

        No new tests, only affects an embedder that registers other schemes,
        e.g. chrome://

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):

2014-01-20  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Background layer with -webkit-cross-fade doesn't blend
        when having -webkit-background-blending applied. Turns out the problem was
        the blending parameter not being passed to WebCore::CrossfadeGeneratedImage::draw

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

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-crossfade-image.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw): set blendMode on context.

2013-11-22  Sergio Villar Senin  <svillar@igalia.com>

        Null-pointer dereference in WebCore::CSSValue::isPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=124769

        Reviewed by Andreas Kling.

        Test: fast/gradients/crash-on-no-position-separator.html

        The function parseFillPosition() may not return valid values for
        centerX and centerY if the input data is malformed. We need to
        check that we get a valid pair of positions before checking that
        they're actually valid primitive values in the assertions.

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

2014-01-20  Mihai Tica  <mitica@adobe.com>

        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

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

        Subpixel layout: setSimpleLineLayoutEnabled() produces different layout when line position has CSS px fractions.
        https://bugs.webkit.org/show_bug.cgi?id=126892

        Reviewed by Antti Koivisto.

        SimpleLineLayout needs to copy normal linebox layout's subpixel rounding strategy to produce
        the same layout.

        Covered by existing tests.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2014-01-20  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Col width is not honored when dynamically updated and it would make table narrower
        https://bugs.webkit.org/show_bug.cgi?id=104711

        Reviewed by Antti Koivisto.

        Increasing the table width by increasing the colgroup width
        was working but decreasing the table width by decreasing the
        colgroup width is not working.

        Test: fast/dom/HTMLTableColElement/resize-table-width-using-col-width.html

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        When colgroup width is defined table cell should adjust according to
        that. On decreasing colgroup width the cells maxPreferredLogicalWidth
        was still set to the earlier value. Setting the
        setPreferredLogicalWidthsDirty to true so that cells pref width is
        calculated again.

2014-01-20  Edit Balint  <edbalint@inf.u-szeged.hu>

        [CoordinatedGraphics] Segmentation fault at  CoordinatedGraphicsScene::clearImageBackingContents

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

        Reviewed by Csaba Osztrogonác.

        Unexpected behavior occurs in some test cases which leads to segmentation fault.

        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::removeImageBacking):

2014-01-20  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: tall line causes taller multicol container than necessary
        https://bugs.webkit.org/show_bug.cgi?id=122550

        Detect and report all column breaks, also when there's no pagination strut involved.

        This may end up becoming the overall smallest space shortage in some cases,
        so we need to report it, to avoid column height over-stretching.

        Reviewed by David Hyatt.

        Test: fast/multicol/newmulticol/balance10.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):

2014-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] GVariant floating references are not correctly handled by GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=127246

        Reviewed by Martin Robinson.

        Do not adopt GVariant floating references, they will be converted
        to a full reference by GRefPtr.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData):
        (WebCore::PasteboardHelper::fillDataObjectFromDropData):

2014-01-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Use unsigned type for the size of CSSParserValueList
        https://bugs.webkit.org/show_bug.cgi?id=127211

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp: Changed variable type from int to unsigned.
        (WebCore::CSSParser::parseValue):

2014-01-19  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix after r162293

        Fix debug build.

        [ 13%] Building CXX object Source/WebCore/CMakeFiles/WebCore.dir/html/parser/HTMLTreeBuilder.cpp.o
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp: In member function ‘void WebCore::HTMLTreeBuilder::processStartTagForInTable(WebCore::AtomicHTMLToken*)’:
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: error: no match for ‘operator!’ in ‘!(WebCore::HTMLTreeBuilder::InsertionMode)12’
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note: candidate is:
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note: operator!(bool) <built-in>
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note:   no known conversion for argument 1 from ‘WebCore::HTMLTreeBuilder::InsertionMode’ to ‘bool’
        make[2]: *** [Source/WebCore/CMakeFiles/WebCore.dir/html/parser/HTMLTreeBuilder.cpp.o] Error 1
        make[1]: *** [Source/WebCore/CMakeFiles/WebCore.dir/all] Error 2
        make: *** [all] Error 2

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Fix ASSERT.

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

        Stop using MutexTryLocker in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127254

        Reviewed by Andreas Kling.

        Instead use std::mutex and std::unique_lock with the std::try_to_lock constructor.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::insertEvent):
        (WebCore::AudioParamTimeline::cancelScheduledValues):
        (WebCore::AudioParamTimeline::valueForContextTime):
        (WebCore::AudioParamTimeline::valuesForTimeRange):
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::process):
        (WebCore::ConvolverNode::reset):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        (WebCore::MediaElementAudioSourceNode::process):
        (WebCore::MediaElementAudioSourceNode::lock):
        (WebCore::MediaElementAudioSourceNode::unlock):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        (WebCore::MediaStreamAudioSourceNode::process):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::process):
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::setCurve):
        (WebCore::WaveShaperProcessor::setOversample):
        (WebCore::WaveShaperProcessor::process):
        * Modules/webaudio/WaveShaperProcessor.h:

2014-01-19  Alberto Garcia  <berto@igalia.com>

        Does not build with SVG disabled
        https://bugs.webkit.org/show_bug.cgi?id=127248

        Reviewed by Sam Weinig.

        Add missing #if ENABLE(SVG) guard.

        * dom/ElementData.h:

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

        Use a strong enum for HTMLTreeBuilder::InsertionMode
        https://bugs.webkit.org/show_bug.cgi?id=127252

        Reviewed by Antti Koivisto.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::constructTree):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processTemplateStartTag):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::closeTheCell):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::defaultForInitial):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

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

        Convert LoaderRunLoopCF.cpp and WebCoreThreadRun.cpp over to modern threading primitives
        https://bugs.webkit.org/show_bug.cgi?id=127251

        Reviewed by Antti Koivisto.

        Also add a condition to the loaderRunLoop() function to protect against spurious wake-ups.

        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoopMutex):
        (WebCore::loaderRunLoopConditionVariable):
        (WebCore::runLoaderThread):
        (WebCore::loaderRunLoop):

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

        Modernize ReverbConvolver
        https://bugs.webkit.org/show_bug.cgi?id=127250

        Reviewed by Andreas Kling.

        Use std::unique_ptr instead of OwnPtr and the STL threading primitives instead of the WTF ones.

        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::ReverbConvolver::~ReverbConvolver):
        (WebCore::ReverbConvolver::backgroundThreadEntry):
        (WebCore::ReverbConvolver::process):
        * platform/audio/ReverbConvolver.h:

2014-01-18  Andy Estes  <aestes@apple.com>

        [iOS] Rename GestureEventIOS.{cpp,h} to GestureEvent.{cpp,h} to fix the build

        InFilesCompiler.pm assumes that <interface name>.h exists for each
        interface it processes. We renamed GestureEvent.h to GestureEventIOS.h
        but kept the interface named GestureEvent, so a non-existant file was
        being referenced by InFilesCompiler.pm (this was hard to detect since
        GestureEvent.h still existed in the SDK due to not having submitted
        WebKitAdditions recently).

        Since we cannot rename the GestureEvent interface, and since there is
        no conflicting GestureEvent in open source, we can just rename
        GestureEventIOS.{cpp,h} back to GestureEvent.{cpp,h}.

        * dom/ios/TouchEvents.cpp: Updated to include GestureEvent.cpp.

2014-01-18  Alexey Proskuryakov  <ap@apple.com>

        Memory leak in JSSubtleCrypto::wrapKey
        https://bugs.webkit.org/show_bug.cgi?id=127241

        Reviewed by Sam Weinig.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::wrapKey):
        Delete algorithmPtr and parametersPtr that aren't smart pointers because of lambdas.

2014-01-18  Andy Estes  <aestes@apple.com>

        Fix the iOS Production build.

        * Configurations/WebCore.xcconfig:

2014-01-18  Alberto Garcia  <berto@igalia.com>

        [CodeGeneratorJS] Sort output of StructureFlags and function parameters

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

        Reviewed by Alexey Proskuryakov.

        The order of the keys in a hash is undefined and subject to change
        between different Perl versions, so we have to sort them to make
        sure that the output is always the same.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateParametersCheckExpression):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.h:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Replace a couple of uses of WTF::Function with std::function
        https://bugs.webkit.org/show_bug.cgi?id=127218

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatch):
        (WebCore::ScrollingThread::dispatchBarrier):
        (WebCore::ScrollingThread::shared):
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        (WebCore::ScrollingThread::initializeRunLoop):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Modernize HTML parser code
        https://bugs.webkit.org/show_bug.cgi?id=127236

        Reviewed by Andreas Kling.

        * html/parser/AtomicHTMLToken.h:
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::detach):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::releaseNext):
        (WebCore::HTMLElementStack::ElementRecord::setNext):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser):
        * html/parser/HTMLMetaCharsetParser.h:
        * html/parser/HTMLParserScheduler.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::HTMLResourcePreloader::takeAndPreload):
        (WebCore::HTMLResourcePreloader::preload):
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::beginDOCTYPE):
        (WebCore::HTMLToken::releaseDoctypeData):
        * html/parser/HTMLTokenizer.h:
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):
        * html/parser/HTMLViewSourceParser.h:
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::XSSInfo):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        (WebCore::TextResourceDecoder::checkForMetaCharset):
        * loader/TextResourceDecoder.h:

2014-01-18  Benjamin Poulain  <benjamin@webkit.org>

        Make ElementData JIT friendly
        https://bugs.webkit.org/show_bug.cgi?id=127209

        Reviewed by Geoffrey Garen.

        The offsets of ElementData's flags were not accessible by the JIT. This patch
        refactor ElementData to use explicit flags so that they can be used from
        the code generators.

        * dom/Element.cpp:
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::removeAttribute):
        * dom/ElementData.cpp:
        (WebCore::ElementData::destroy):
        (WebCore::ElementData::ElementData):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::ShareableElementData::~ShareableElementData):
        (WebCore::ElementData::arraySizeAndFlagsFromOther):
        * dom/ElementData.h:
        (WebCore::ElementData::hasName):
        (WebCore::ElementData::isUnique):
        (WebCore::ElementData::updateFlag):
        (WebCore::ElementData::arraySize):
        (WebCore::ElementData::setHasNameAttribute):
        (WebCore::ElementData::styleAttributeIsDirty):
        (WebCore::ElementData::setStyleAttributeIsDirty):
        (WebCore::ElementData::presentationAttributeStyleIsDirty):
        (WebCore::ElementData::setPresentationAttributeStyleIsDirty):
        (WebCore::ElementData::animatedSVGAttributesAreDirty):
        (WebCore::ElementData::setAnimatedSVGAttributesAreDirty):
        (WebCore::ElementData::length):
        (WebCore::ElementData::attributeBase):
        (WebCore::ElementData::presentationAttributeStyle):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::synchronizeStyleAttributeInternal):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::invalidateStyleAttribute):
        (WebCore::StyledElement::presentationAttributeStyle):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes):

2014-01-18  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: IntRect::infiniteRect() overflows when subpixel layout is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=126899

        Reviewed by Tim Horton.

        Use LayoutUnits when setting the infinite values on IntRect::infiniteRect() to ensure
        it won't overflow later when the IntRect gets converted to LayoutRect.

        Covered by existing tests.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::infiniteRect):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove support for the viewsource attribute
        https://bugs.webkit.org/show_bug.cgi?id=127232

        Reviewed by Andreas Kling.

        The 'viewsource' attribute on frames is nonstandard, not used by anyone (the inspector has
        its own syntax highlighting) and not audited.

        This patch removes parsing of the viewsource attribute and the associated tests. A subsequent
        patch will remove the code as well.

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

2014-01-18  Anders Carlsson  <andersca@apple.com>

        XMLTreeViewer shouldn't use the view source mode
        https://bugs.webkit.org/show_bug.cgi?id=127229

        Reviewed by Andreas Kling.

        Add the relevant styles from view-source.css to XMLViewer.css.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.css:
        (body):
        (.comment):
        (.tag):
        (.attribute-name):
        (.attribute-value):
        * xml/XMLViewer.js:
        (createComment):
        (createTag):
        (createAttribute):

2014-01-18  Andreas Kling  <akling@apple.com>

        Remove unused "touchDragDropEnabled" setting.
        <https://webkit.org/b/127227>

        Reviewed by Sam Weinig.

        * page/Settings.in:

2014-01-18  Brian Burg  <bburg@apple.com>

        Web Inspector: Page should use std::unique_ptr for InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=127068

        Reviewed by Joseph Pecoraro.

        Make Page and WorkerGlobalScope keep a std::unique_ptr to InspectorController
        and WorkerInspectorController. Store page references and return controller
        references where possible.

        Convert call sites to use an InspectorController reference.
        Convert instantiations of InspectorFrontendClient to use std::unique_ptr.
        Convert InspectorOverlay to keep Page references.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
        * dom/Node.cpp:
        (WebCore::Node::inspect):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::setInspectorFrontendClient):
        (WebCore::InspectorController::hasInspectorFrontendClient):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::inspectedPage):
        (WebCore::InspectorController::developerExtrasEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowWidth):
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::InspectorOverlay):
        (WebCore::InspectorOverlay::getHighlight):
        (WebCore::InspectorOverlay::highlightQuad):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):
        (WebCore::InspectorOverlay::drawQuadHighlight):
        (WebCore::InspectorOverlay::overlayPage):
        (WebCore::InspectorOverlay::reset):
        * inspector/InspectorOverlay.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::instrumentationForPage): remove null checks.
        (WebCore::instrumentationForWorkerGlobalScope): remove null checks.
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::addInspectElementItem):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::inspectorController):
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::hasLocalDebugger):
        (WebCore::PageDebuggable::parentProcessIdentifier):
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        (WebCore::PageDebuggable::dispatchMessageFromRemoteFrontend):
        (WebCore::PageDebuggable::setIndicating):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::syncDisplayState):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):
        (WebCore::Internals::emitInspectorDidBeginFrame):
        (WebCore::Internals::emitInspectorDidCancelFrame):
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::closeDummyInspectorFrontend):
        (WebCore::Internals::setInspectorResourcesDataSizeLimits):
        (WebCore::Internals::setJavaScriptProfilingEnabled):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h: remove clearInspector(). 
        (WebCore::WorkerGlobalScope::workerInspectorController):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::connectToWorkerGlobalScopeInspectorTask):
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask):
        (WebCore::dispatchOnInspectorBackendTask):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownFinishTask::performTask):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE_THREADED_HTML_PARSER defines everywhere
        https://bugs.webkit.org/show_bug.cgi?id=127225

        Reviewed by Andreas Kling.

        This concludes the removal of over 8.8 million lines of threaded parser code.

        * Configurations/FeatureDefines.xcconfig:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove the remaining threaded parser code
        https://bugs.webkit.org/show_bug.cgi?id=127224

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::decrementActiveParserCount):
        * html/parser/AtomicHTMLToken.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::detach):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::forcePlaintextForTextDocument):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::textPosition):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/HTMLParserIdioms.h:
        * html/parser/HTMLTokenizer.cpp:
        * html/parser/HTMLTokenizer.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::checkLoadComplete):
        * page/Settings.in:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove threaded parser code from the preload scanners
        https://bugs.webkit.org/show_bug.cgi?id=127222

        Reviewed by Andreas Kling.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::CSSPreloadScanner):
        Use nullptr.

        (WebCore::CSSPreloadScanner::scan):
        Move scanCommon here and simplify the code.

        * html/parser/CSSPreloadScanner.h:
        Remove scanCommon.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor):
        TagId is a strong enum now, update enum values.

        (WebCore::TokenPreloadScanner::initiatorFor):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::match):
        Indent this.

        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        TagId is a strong enum now, update enum values.

        (WebCore::TokenPreloadScanner::StartTagScanner::charset):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::resourceType):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::shouldPreload):
        Ditto.

        (WebCore::TokenPreloadScanner::scan):
        Merge scan and scanCommon.

        * html/parser/HTMLPreloadScanner.h:

2014-01-18  Lauro Neto  <lauro.neto@openbossa.org>

        Remove Nix files from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127176

        Reviewed by Anders Carlsson.

        * PlatformNix.cmake: Removed.
        * css/mediaControlsNix.css: Removed.
        * css/mediaControlsNixFullscreen.css: Removed.
        * editing/nix/EditorNix.cpp: Removed.
        * page/nix/EventHandlerNix.cpp: Removed.
        * platform/audio/nix/AudioBusNix.cpp: Removed.
        * platform/audio/nix/AudioDestinationNix.cpp: Removed.
        * platform/audio/nix/AudioDestinationNix.h: Removed.
        * platform/audio/nix/FFTFrameNix.cpp: Removed.
        * platform/graphics/nix/IconNix.cpp: Removed.
        * platform/graphics/nix/ImageNix.cpp: Removed.
        * platform/nix/CursorNix.cpp: Removed.
        * platform/nix/DragDataNix.cpp: Removed.
        * platform/nix/DragImageNix.cpp: Removed.
        * platform/nix/ErrorsNix.cpp: Removed.
        * platform/nix/ErrorsNix.h: Removed.
        * platform/nix/FileSystemNix.cpp: Removed.
        * platform/nix/GamepadsNix.cpp: Removed.
        * platform/nix/LanguageNix.cpp: Removed.
        * platform/nix/LocalizedStringsNix.cpp: Removed.
        * platform/nix/MIMETypeRegistryNix.cpp: Removed.
        * platform/nix/NixKeyboardUtilities.cpp: Removed.
        * platform/nix/NixKeyboardUtilities.h: Removed.
        * platform/nix/PasteboardNix.cpp: Removed.
        * platform/nix/PlatformKeyboardEventNix.cpp: Removed.
        * platform/nix/PlatformScreenNix.cpp: Removed.
        * platform/nix/RenderThemeNix.cpp: Removed.
        * platform/nix/RenderThemeNix.h: Removed.
        * platform/nix/ScrollbarThemeNix.cpp: Removed.
        * platform/nix/ScrollbarThemeNix.h: Removed.
        * platform/nix/SharedTimerNix.cpp: Removed.
        * platform/nix/SoundNix.cpp: Removed.
        * platform/nix/TemporaryLinkStubs.cpp: Removed.
        * platform/nix/WidgetNix.cpp: Removed.
        * platform/nix/support/MultiChannelPCMData.cpp: Removed.
        * platform/text/nix/TextBreakIteratorInternalICUNix.cpp: Removed.

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove DocumentParser::pinToMainThread() and related code
        https://bugs.webkit.org/show_bug.cgi?id=127221

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::setContent):
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserOptions.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove HTMLParserThread
        https://bugs.webkit.org/show_bug.cgi?id=127220

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLParserThread.cpp: Removed.
        * html/parser/HTMLParserThread.h: Removed.

2014-01-17  Andreas Kling  <akling@apple.com>

        GC soon after responding to fake memory pressure.
        <https://webkit.org/b/127210>

        Ask JSC to garbage collect "soon" after handling the fake memory
        pressure signal on Mac. This seems to stabilize the post-pressure
        numbers on Membuster3 a bit on my laptop. The difference is mostly
        made up of JSC::CodeBlock objects.

        Reviewed by Geoffrey Garen.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove files only used by the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=127219
        <rdar://problem/13331277>

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/AtomicHTMLToken.h:
        * html/parser/BackgroundHTMLInputStream.cpp: Removed.
        * html/parser/BackgroundHTMLInputStream.h: Removed.
        * html/parser/BackgroundHTMLParser.cpp: Removed.
        * html/parser/BackgroundHTMLParser.h: Removed.
        * html/parser/CompactHTMLToken.cpp: Removed.
        * html/parser/CompactHTMLToken.h: Removed.
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLIdentifier.cpp: Removed.
        * html/parser/HTMLIdentifier.h: Removed.
        * html/parser/HTMLParserIdioms.h:
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLTreeBuilderSimulator.cpp: Removed.
        * html/parser/HTMLTreeBuilderSimulator.h: Removed.

2014-01-17  Andreas Kling  <akling@apple.com>

        Micro-optimize RenderBoxModelObject::computedCSSPadding().
        <https://webkit.org/b/127208>

        Make computedCSSPadding() take the Length as a const reference
        to avoid creating a temporary copy. This was showing up (0.2%)
        on DoYouEvenBench.

        Reviewed by Anders Carlsson.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPadding):

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

        Add a callOnMainThreadAndWait variant in SocketStreamHandle
        https://bugs.webkit.org/show_bug.cgi?id=127180

        Reviewed by Geoffrey Garen.

        WTF::callOnMainThreadAndWait was only used inside SocketStreamHandleCFNet.cpp, 
        so add an improved version there which is implemented in terms of callOnMainThread and
        with the bonus of handling spurious wake-ups correctly (the old version didn't).

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::callOnMainThreadAndWait):
        (WebCore::SocketStreamHandle::pacExecutionCallback):
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):

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

        Clean up PageCache classes
        https://bugs.webkit.org/show_bug.cgi?id=127202

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::~CachedFrameBase):
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::clear):
        (WebCore::CachedFrame::setCachedFramePlatformData):
        * history/CachedFrame.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * history/CachedPage.h:
        * history/HistoryItem.h:
        (WebCore::HistoryItem::isInPageCache):
        * history/PageCache.cpp:
        (WebCore::PageCache::add):
        (WebCore::PageCache::take):
        (WebCore::PageCache::remove):
        * history/PageCache.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):

2014-01-17  Andy Estes  <aestes@apple.com>

        Work around a preprocessor warning in mediaControlsApple.js
        https://bugs.webkit.org/show_bug.cgi?id=127204

        Reviewed by Dan Bernstein.

        * Modules/mediacontrols/mediaControlsApple.js: Changed '' to String().

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162184>
        (https://bugs.webkit.org/show_bug.cgi?id=126856)

        Remove symbol for WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(unsigned short const*, int).
        Add symbol for WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(WTF::StringView).

        * WebCore.exp.in:

2014-01-17  Andreas Kling  <akling@apple.com>

        Remove unused TOUCH_ADJUSTMENT code.
        <https://webkit.org/b/127181>

        There are no ports using the ENABLE(TOUCH_ADJUSTMENT) feature
        anymore, so nuke it from orbit.

        Reviewed by Anders Carlsson.

        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * page/Settings.in:
        * page/TouchAdjustment.cpp: Removed.
        * page/TouchAdjustment.h: Removed.
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-17  Beth Dakin  <bdakin@apple.com>

        Need a way to test the tile cache with margins enabled
        https://bugs.webkit.org/show_bug.cgi?id=127194
        -and corresponding-
        <rdar://problem/15571327>

        Reviewed by Tim Horton.

        This patch adds a new function to InternalSettings that will allow layout tests to 
        flip the setting Settings::setBackgroundShouldExtendBeyondPage(). This patch also         
        makes changing that setting take effect immediately. 

        To make this setting dynamic, we can no longer generate the Setting function, so 
        we have to export the symbol manually.
        * WebCore.exp.in:

        This new function on FrameView will call into RenderLayerBacking to add or remove 
        margins.
        * page/FrameView.cpp:
        (WebCore::FrameView::setBackgroundExtendsBeyondPage):
        * page/FrameView.h:

        Again, we’re no longer using the boiler-plate generated Setting functions, so now 
        we can call into FrameView to make the background extend.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
        * page/Settings.h:
        (WebCore::Settings::backgroundShouldExtendBeyondPage):
        * page/Settings.in:

        Whenever tile margins are set, call setNeedsRevalidateTiles() to make the change 
        dynamic.
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setTileMargins):

        Move the call to TiledBacking::setTileMargins() into a helper function so that the 
        same code can be used for FrameView.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):
        * rendering/RenderLayerBacking.h:

        New InternalSetting.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setBackgroundShouldExtendBeyondPage):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

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

        Remove another unused FrameLoaderClient callback
        https://bugs.webkit.org/show_bug.cgi?id=127192

        Reviewed by Dan Bernstein.

        FrameLoaderClient::dispatchDocumentElementAvailable() was only used by the Chromium port, so remove it.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::dispatchDocumentElementAvailableIfNeeded):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

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

        Remove FrameLoaderClient::didPerformFirstNavigation()
        https://bugs.webkit.org/show_bug.cgi?id=127191

        Reviewed by Dan Bernstein.

        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListClippedAtTarget):

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

        Move didPerformFirstNavigation() logic to -[WebView _didCommitLoadForFrame:]
        https://bugs.webkit.org/show_bug.cgi?id=127189

        Reviewed by Dan Bernstein.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didPerformFirstNavigation):
        Add an empty implementation of didPerformFirstNavigation() to make it easier to remove it from subclasses.

2014-01-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] HTMLMediaSession should set AudioSession category
        https://bugs.webkit.org/show_bug.cgi?id=127137

        Reviewed by Sam Weinig.

        * html/HTMLMediaSession.cpp:
        (WebCore::initializeAudioSession): New, set the audio session to "media" on iOS.
        (WebCore::HTMLMediaSession::HTMLMediaSession): Call initializeAudioSession.

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162178>
        (https://bugs.webkit.org/show_bug.cgi?id=127147)

        Declare WebMediaSessionHelper outside of namespace WebCore to resolve error that
        "Objective-C declarations may only appear in global scope".

        * platform/audio/ios/MediaSessionManagerIOS.mm:

2014-01-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Stacked floats with shape-outside should allow inline content to interact with the non-outermost float
        https://bugs.webkit.org/show_bug.cgi?id=122576

        Reviewed by David Hyatt.

        Make inline content interact with stacked floats with shape-outside
        per the spec. This means that content can interact with floats on the
        line that are not the outermost float.

        This refactors ComputeFloatOffsetAdapter into a superclass and two
        subclasses: one adaptor for determining the offset for float layout,
        and one for determining the offset for inline layout.

        The logic in LineWidth::shrinkAvailableWidthForNewFloatIfNeeded has
        been updated to handle stacked floats with shape-outside properly and
        has been considerably simplified in the process. It was previously
        doing a whole bunch of unnecessary work.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-stacked-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-stacked-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-stacked-002.html

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::~ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::~ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::~ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining):
        (WebCore::shapeInfoForFloat):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):
        * rendering/shapes/ShapeOutsideInfo.h:

2014-01-17  Zoltan Horvath  <zoltan@webkit.org>

        [CSS3] Add rendering support for -webkit-text-align-last
        https://bugs.webkit.org/show_bug.cgi?id=99584

        Reviewed by David Hyatt.

        Add support for the text-align-last CSS3 property, according to the latest specification:
        http://dev.w3.org/csswg/css-text-3/#text-align-last-property

        Tests: fast/css3-text/css3-text-align-last/text-align-last-with-text-align-justify.html
               fast/css3-text/css3-text-align-last/text-align-last-with-text-align-non-justify.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::textAlignmentForLine):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162208>
        (https://bugs.webkit.org/show_bug.cgi?id=127139)

        __MAC_OS_X_VERSION_MIN_REQUIRED isn't defined when building for iOS. Instead, explicitly
        check that we're not PLATFORM(IOS) to avoid defining the enum value CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain.

        * platform/network/cf/CookieJarCFNet.cpp:

2014-01-17  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Basic shapes' computed position should be a horizontal and vertical offset
        https://bugs.webkit.org/show_bug.cgi?id=127010

        Reviewed by Rob Buis.

        This patch updates the computed position values used for blending to be a horizontal
        left offset and a vertical top offset. When positions include a center, bottom, or
        right position offset, it is converted to the appropriate top/left coordinate as
        a calc expression. Serialized values still use the original bottom/right directions
        when present, and also omit the top/left keywords where possible.

        Updated parsing and animation tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate): Use the simplified BasicShapeCenterCoordinate,
        which includes an offset and whether the direction is from the top/left or bottom/right.
        (WebCore::valueForBasicShape): Ditto.
        (WebCore::convertToCenterCoordinate): Ditto.
        (WebCore::basicShapeForValue): Ditto.
        (WebCore::floatValueForCenterCoordinate): Ditto.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Remove the RenderBox parameter, which is no longer needed.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCenterCoordinate::updateComputedLength): Calculate the computed
        position offset for this center coordinate.
        (WebCore::BasicShapeRectangle::blend): Remove the RenderBox parameter.
        (WebCore::DeprecatedBasicShapeCircle::blend): Ditto.
        (WebCore::BasicShapeCircle::blend): Ditto.
        (WebCore::DeprecatedBasicShapeEllipse::blend): Ditto.
        (WebCore::BasicShapeEllipse::blend): Ditto.
        (WebCore::BasicShapePolygon::blend): Ditto.
        (WebCore::BasicShapeInsetRectangle::blend): Ditto.
        (WebCore::BasicShapeInset::blend): Ditto.
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::BasicShapeCenterCoordinate): Simplify
        BasicShapeCenterCoordinate to contain an offset and a direction. Also add a
        computed length, which is an offset from the top/left direction.
        (WebCore::BasicShapeCenterCoordinate::direction):
        (WebCore::BasicShapeCenterCoordinate::computedLength):
        (WebCore::BasicShapeCenterCoordinate::blend):

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

        More non-Mac build fix.

        * platform/network/cf/CookieJarCFNet.cpp:

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

        Unprefix text-emphasis CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=127160

        Reviewed by Sam Weinig.

        Add synonym CSS properties. We don't want to delete the old ones because
        we've shipped with them included.

        Test: fast/css3-text/css3-text-decoration/text-decoration-unprefix.html

        * css/CSSPropertyNames.in:

2014-01-17  Alberto Garcia  <berto@igalia.com>

        [GTK] WebKitGtk/testcopyandpaste fails in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=127173

        Reviewed by Carlos Garcia Campos.

        Remove duplicate "PasteGlobalSelection" entry.

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):

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

        Pack ResourceRequest harder.
        <https://webkit.org/b/126982>

        Re-arrange the members of ResourceRequest to reduce padding,
        shrinking it by 8 bytes.

        Reviewed by Anders Carlsson.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):

2014-01-17  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting deleted functions
        https://bugs.webkit.org/show_bug.cgi?id=127166

        Reviewed by Andreas Kling.

        * bindings/js/JSLazyEventListener.h:
        * dom/ContainerNode.h:
        * dom/Document.h:
        * dom/Element.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderElement.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameBase.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderVideo.h:
        * rendering/RenderWidget.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * xml/XPathValue.h:

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

        [ATK] Modernize the for loops in ATK AX code
        https://bugs.webkit.org/show_bug.cgi?id=127120

        Reviewed by Mario Sanchez Prada.

        Update the for loops to be range-based in ATK accessibility code.
        This work is complementary to r161979.

        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (accessibilityTitle):
        (accessibilityDescription):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getNChildrenForTable):
        (getChildForTable):
        (getIndexInParentForCellInRow):

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

        [Soup] Remove unnecessary using-directives for the std namespace
        https://bugs.webkit.org/show_bug.cgi?id=127122

        Reviewed by Martin Robinson.

        * platform/network/soup/ResourceRequestSoup.cpp: Remove the unnecessary using-directive for the std namespace
        as no symbols from that namespace are in use in this implementation file.
        * platform/network/soup/ResourceResponseSoup.cpp: Ditto.

2014-01-16  Tim Horton  <timothy_horton@apple.com>

        On iOS, zooming in with a TileController-backed main frame makes hundreds of tiles
        https://bugs.webkit.org/show_bug.cgi?id=126531
        <rdar://problem/15745862>

        Reviewed by Anders Carlsson.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::scaledExposedRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Scale the FrameView-space exposedRect into document space, to match the visibleRect.

        Flipping on WKView's clipsToExposedRect now works correctly even in Safari
        or MiniBrowser with zooming.

2014-01-15  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Ryosuke Niwa.

        Change all the TextBreakIterator creation functions to take StringViews. Remove a few
        now unnecessary up-conversions to UTF-16 in the process.

        * dom/CharacterData.cpp:
        * editing/TextCheckingHelper.cpp:
        * editing/VisibleUnits.cpp:
        * platform/graphics/StringTruncator.cpp:
        * platform/graphics/mac/ComplexTextController.cpp:
        * platform/text/TextBoundaries.cpp:
        * platform/text/TextBreakIterator.cpp:
        * platform/text/TextBreakIterator.h:
        * rendering/RenderText.cpp:

2014-01-16  Anders Carlsson  <andersca@apple.com>

        Run clang-modernize and let it add a bunch of missing overrides.

        Rubber-stamped by Sam Weinig.

        * dom/BeforeLoadEvent.h:
        * dom/ClassNodeList.h:
        * dom/Comment.h:
        * dom/CompositionEvent.h:
        * dom/DecodedDataDocumentParser.h:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationEvent.h:
        * dom/DocumentMarker.cpp:
        * dom/DocumentType.h:
        * dom/EntityReference.h:
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.h:
        * dom/MessageEvent.h:
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.h:
        * dom/NameNodeList.h:
        * dom/Notation.h:
        * dom/OverflowEvent.h:
        * dom/PendingScript.h:
        * dom/PopStateEvent.h:
        * dom/ProcessingInstruction.h:
        * dom/ScriptElement.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptableDocumentParser.h:
        * dom/ScriptedAnimationController.h:
        * dom/StringCallback.cpp:
        * dom/WheelEvent.h:
        * html/FTPDirectoryDocument.h:
        * html/FileInputType.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLDocument.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLViewSourceDocument.h:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/MediaDocument.cpp:
        * html/MediaDocument.h:
        * html/MediaKeyEvent.h:
        * html/PluginDocument.cpp:
        * html/RadioNodeList.h:
        * html/TextDocument.h:
        * html/canvas/EXTDrawBuffers.h:
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLContextEvent.h:
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLFramebuffer.cpp:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLVertexArrayObjectOES.h:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLViewSourceParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TrackEvent.h:
        * svg/SVGAElement.h:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontData.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathBuilder.h:
        * svg/SVGPathByteStreamBuilder.h:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathSegArcAbs.h:
        * svg/SVGPathSegArcRel.h:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubicAbs.h:
        * svg/SVGPathSegCurvetoCubicRel.h:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.h:
        * svg/SVGPathSegCurvetoCubicSmoothRel.h:
        * svg/SVGPathSegCurvetoQuadraticAbs.h:
        * svg/SVGPathSegCurvetoQuadraticRel.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h:
        * svg/SVGPathSegLinetoAbs.h:
        * svg/SVGPathSegLinetoHorizontalAbs.h:
        * svg/SVGPathSegLinetoHorizontalRel.h:
        * svg/SVGPathSegLinetoRel.h:
        * svg/SVGPathSegLinetoVerticalAbs.h:
        * svg/SVGPathSegLinetoVerticalRel.h:
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathSegMovetoAbs.h:
        * svg/SVGPathSegMovetoRel.h:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathTraversalStateBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGZoomEvent.h:
        * svg/animation/SVGSMILElement.cpp:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImageChromeClient.h:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.h:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.h:

2014-01-16  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r162145): media/video-controls-visible-audio-only.html fails
        https://bugs.webkit.org/show_bug.cgi?id=127147

        Reviewed by Eric Carlson.

        Reset the MediaSessionManager's restrictions to their default values before
        each run.

        Add a new virtual method "resetRestrictions()" so that each port-specific
        MediaSessionManager can reset the restrictions to their default values.
        Call this from Internals::resetToConsistentState() so that tests which change
        the restrictions don't affect later tests.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::resetRestrictions):
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::~MediaSessionManager):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2014-01-16  Alex Christensen  <achristensen@webkit.org>

        Compile fix for WinCairo after r162138.
        https://bugs.webkit.org/show_bug.cgi?id=127140

        Reviewed by Beth Dakin.

        * page/FrameView.cpp:
        (WebCore::FrameView::extendedBackgroundRect):
        Use unscaledDocumentRect for extendedBackgroundRect without accelerated compositing.

2014-01-16  Brady Eidson  <beidson@apple.com>

        IDB: delete object store support
        <rdar://problem/15779641> and https://bugs.webkit.org/show_bug.cgi?id=127123

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::DeleteObjectStoreOperation::transaction):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        More non-Mac build fix.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * platform/network/cf/CookieJarCFNet.cpp: Remove a spurious semicolon.

2014-01-16  Andy Estes  <aestes@apple.com>

        Another iOS build fix.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::m_objcObserver):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        [Mac] [iOS] Add support for CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain
        https://bugs.webkit.org/show_bug.cgi?id=127139

        Reviewed by Brady Eidson.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Pass first party URL down, because reading cookies depends on it when this policy
        in in action.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        Use a new CFNetwork API that takes first party URL.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        Pass first party URL (and null in deleteCookie, as there is none).

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Removed a call to shouldRelaxThirdPartyCookiePolicy(), which no longer exists
        in trunk.

2014-01-16  Andy Estes  <aestes@apple.com>

        Fix the iOS build after r162150.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-01-16  Dean Jackson  <dino@apple.com>

        glReadPixels should use UNSIGNED_BYTE on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127148

        Reviewed by Benjamin Poulain.

        We were incorrectly mapping GL_UNSIGNED_INT_8_8_8_8_REV to
        GL_RGBA on iOS. It's only used in glReadPixels, so should
        be GL_UNSIGNED_BYTE.

        This is covered by lots of tests in the Khronos test suite,
        that now pass on iOS.

        * platform/graphics/ios/GraphicsContext3DIOS.h:

2014-01-16  Anders Carlsson  <andersca@apple.com>

        Change all uses of FINAL to final now that all our compilers support it
        https://bugs.webkit.org/show_bug.cgi?id=127142

        Reviewed by Benjamin Poulain.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/VideoStreamTrack.h:
        * Modules/notifications/Notification.h:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/websockets/WebSocket.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.h:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:
        * css/CSSCanvasValue.h:
        * css/CSSFontSelector.h:
        * css/CSSStyleSheet.h:
        * dom/Attr.h:
        * dom/BeforeUnloadEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Clipboard.cpp:
        * dom/Comment.h:
        * dom/DatasetDOMStringMap.h:
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentEventQueue.h:
        * dom/DocumentType.h:
        * dom/Element.h:
        * dom/EntityReference.h:
        * dom/EventContext.h:
        * dom/EventTarget.h:
        * dom/FocusEvent.h:
        * dom/LiveNodeList.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/Node.h:
        * dom/Notation.h:
        * dom/ProcessingInstruction.h:
        * dom/PseudoElement.h:
        * dom/ShadowRoot.h:
        * dom/StaticNodeList.h:
        * dom/StyledElement.h:
        * dom/TemplateContentDocumentFragment.h:
        * dom/Text.h:
        * dom/WebKitNamedFlow.h:
        * editing/ios/EditorIOS.mm:
        * editing/mac/EditorMac.mm:
        * editing/markup.cpp:
        * fileapi/Blob.cpp:
        * fileapi/FileReader.h:
        * html/ClassList.h:
        * html/DOMSettableTokenList.h:
        * html/FTPDirectoryDocument.cpp:
        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        * html/HTMLAllCollection.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBDIElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLDListElement.h:
        * html/HTMLDataListElement.h:
        * html/HTMLDetailsElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDocument.h:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLModElement.h:
        * html/HTMLNameCollection.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.h:
        * html/HTMLUnknownElement.h:
        * html/HTMLVideoElement.h:
        * html/HTMLViewSourceDocument.h:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/LabelableElement.h:
        * html/LabelsNodeList.h:
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        * html/MediaDocument.h:
        * html/MediaFragmentURIParser.h:
        * html/PluginDocument.cpp:
        * html/PluginDocument.h:
        * html/RangeInputType.h:
        * html/TextDocument.h:
        * html/parser/TextDocumentParser.h:
        * html/parser/TextViewSourceParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.h:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TrackListBase.h:
        * html/track/WebVTTElement.h:
        * inspector/CommandLineAPIModule.h:
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/WorkerInspectorController.h:
        * loader/SinkDocument.cpp:
        * loader/SinkDocument.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/icon/IconLoader.h:
        * mathml/MathMLSelectElement.h:
        * page/DOMTimer.h:
        * page/DOMWindow.h:
        * page/EventSource.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/MainFrame.h:
        * page/PageDebuggable.h:
        * page/PageSerializer.cpp:
        * page/Performance.h:
        * page/SuspendableTimer.h:
        * page/animation/KeyframeAnimation.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * platform/ClockGeneric.h:
        * platform/efl/ScrollbarThemeEfl.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.h:
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/ios/WebSafeGCActivityCallbackIOS.h:
        * platform/ios/WebSafeIncrementalSweeperIOS.h:
        * platform/mac/PlatformClockCA.h:
        * platform/mac/PlatformClockCM.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/mac/MediaStreamCenterMac.h:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.h:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/text/LocaleNone.cpp:
        * platform/text/PlatformLocale.cpp:
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTextTrackCue.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/ContentData.h:
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.h:
        * svg/SVGDocument.h:
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFilter.h:
        * workers/AbstractWorker.h:
        * workers/SharedWorker.h:
        * workers/Worker.h:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.h:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XSLStyleSheet.h:

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

        Draw all underline segments in a particular run in the same call
        https://bugs.webkit.org/show_bug.cgi?id=127082

        Reviewed by Simon Fraser.

        Instead of running CGContextFillRect() in a loop, we can instead call CGContextFillRects()

        In my tests, this seems to have about 0.5% speedup.

        This patch creates some redundant code, but I think that refactoring would make the code
        much less readable. I also am hesitant to make drawLineForText call drawLinesForText because
        of the overhead of the vector that would be needed.

        As there is no behavior change, no new tests are necessary

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLinesForText):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLinesForText):
        * rendering/InlineTextBox.cpp:
        (WebCore::drawSkipInkUnderline):

2014-01-16  Brady Eidson  <beidson@apple.com>

        Use KeyedCoding as a persistent storage mechanism for blobs
        https://bugs.webkit.org/show_bug.cgi?id=127012

        Reviewed by Anders Carlsson.

        Add basic KeyedDecoder interface that is the inverse of KeyedEncoder:
        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeVerifiedEnum):
        (WebCore::KeyedDecoder::decodeObject):
        (WebCore::KeyedDecoder::decodeObjects):

        Use KeyedEncoder/Decoder to encode/decode IDBKeyPath:
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::encode):
        (WebCore::IDBKeyPath::decode):
        * Modules/indexeddb/IDBKeyPath.h:

        * WebCore.exp.in:

2014-01-16  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict inline <video> playback
        https://bugs.webkit.org/show_bug.cgi?id=127113

        Reviewed by Jer Noble.

        Test: media/video-fullscreeen-only-playback.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Drive-by change to not tell the media session that
            playback is starting if the media player is already playing. Enter fullscreen if the media
            session says it is required.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::clientWillBeginPlayback): Make it const.
        (WebCore::HTMLMediaSession::requiresFullscreenForVideoPlayback): New, see if the specified
            media element must be played in fullscreen based on the media session settings, document
            settings, and attributes.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.h: pauseSession shouldn't be virtual.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): Return immediately if ConcurrentPlaybackNotPermitted
            is not set.
        (WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback): New.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::MediaSessionManageriOS): Set InlineVideoPlaybackRestricted if
            running on an iPhone or iPod class device.

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Support InlineVideoPlaybackRestricted.

2014-01-16  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Timothy Horton.

        Rename webGLPolicyForSite to webGLPolicyForURL.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForURL):

2014-01-16  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Guarding HTMLMediaSession with ENABLE(VIDEO)
        https://bugs.webkit.org/show_bug.cgi?id=127126

        Reviewed by Eric Carlson.

        No new tests needed.

        * html/HTMLMediaSession.cpp:
        * html/HTMLMediaSession.h:

2014-01-16  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting explicit override control
        https://bugs.webkit.org/show_bug.cgi?id=127111

        Reviewed by Anders Carlsson.

        Now all compilers support explicit override control, this workaround can be removed.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.mm:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/MediaKeyNeededEvent.h:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:
        * Modules/indieui/UIRequestEvent.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaConstraintsImpl.h:
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/MediaStreamTrackSourcesRequest.h:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
        * Modules/mediastream/RTCStatsRequestImpl.h:
        * Modules/mediastream/RTCStatsResponse.h:
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/VideoStreamTrack.h:
        * Modules/networkinfo/NetworkInfoConnection.h:
        * Modules/notifications/DOMWindowNotifications.h:
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/speech/SpeechRecognition.h:
        * Modules/speech/SpeechRecognitionError.h:
        * Modules/speech/SpeechRecognitionEvent.h:
        * Modules/speech/SpeechSynthesis.h:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeInput.h:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioProcessingEvent.h:
        * Modules/webaudio/BiquadDSPKernel.h:
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayDSPKernel.h:
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/webaudio/WaveShaperProcessor.h:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/websockets/CloseEvent.h:
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.h:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSEventListener.h:
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/JSMutationCallback.h:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WebCoreTypedArrayController.h:
        * bindings/js/WorkerScriptDebugServer.h:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.h:
        * bridge/runtime_root.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:
        * css/CSSBasicShapes.h:
        * css/CSSCanvasValue.h:
        * css/CSSCharsetRule.h:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceRule.h:
        * css/CSSFontSelector.h:
        * css/CSSGroupingRule.h:
        * css/CSSHostRule.h:
        * css/CSSImportRule.h:
        * css/CSSMediaRule.h:
        * css/CSSPageRule.h:
        * css/CSSStyleRule.h:
        * css/CSSStyleSheet.h:
        * css/CSSSupportsRule.h:
        * css/CSSUnknownRule.h:
        * css/FontLoader.cpp:
        * css/FontLoader.h:
        * css/PropertySetCSSStyleDeclaration.h:
        * css/WebKitCSSFilterRule.h:
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.h:
        * css/WebKitCSSRegionRule.h:
        * css/WebKitCSSViewportRule.h:
        * dom/Attr.h:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Clipboard.cpp:
        * dom/ClipboardEvent.h:
        * dom/ContainerNode.h:
        * dom/DOMImplementation.cpp:
        * dom/DatasetDOMStringMap.h:
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.h:
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentEventQueue.h:
        * dom/DocumentFragment.h:
        * dom/Element.h:
        * dom/ErrorEvent.h:
        * dom/EventContext.h:
        * dom/EventTarget.h:
        * dom/FocusEvent.h:
        * dom/KeyboardEvent.h:
        * dom/LiveNodeList.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/MutationRecord.cpp:
        * dom/Node.h:
        * dom/PageTransitionEvent.h:
        * dom/ProcessingInstruction.h:
        * dom/ProgressEvent.h:
        * dom/PseudoElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/ShadowRoot.h:
        * dom/StaticNodeList.h:
        * dom/StyledElement.h:
        * dom/TagNodeList.h:
        * dom/TemplateContentDocumentFragment.h:
        * dom/Text.h:
        * dom/TextEvent.h:
        * dom/TouchEvent.h:
        * dom/TransitionEvent.h:
        * dom/UIEvent.h:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitNamedFlow.h:
        * dom/WebKitTransitionEvent.h:
        * editing/AppendNodeCommand.h:
        * editing/ApplyBlockElementCommand.h:
        * editing/ApplyStyleCommand.h:
        * editing/BreakBlockquoteCommand.h:
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/EditCommand.h:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertNodeBeforeCommand.h:
        * editing/InsertTextCommand.h:
        * editing/MergeIdenticalElementsCommand.h:
        * editing/RemoveCSSPropertyCommand.h:
        * editing/RemoveNodeCommand.h:
        * editing/ReplaceNodeWithSpanCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * editing/SetSelectionCommand.h:
        * editing/SpellChecker.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionCommand.h:
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.h:
        * editing/WrapContentsInDummySpanCommand.h:
        * editing/ios/EditorIOS.mm:
        * editing/markup.cpp:
        * fileapi/Blob.cpp:
        * fileapi/Blob.h:
        * fileapi/File.h:
        * fileapi/FileReader.h:
        * fileapi/FileThreadTask.h:
        * history/BackForwardList.h:
        * html/BaseButtonInputType.h:
        * html/BaseCheckableInputType.h:
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        * html/BaseClickableWithKeyInputType.h:
        * html/BaseDateAndTimeInputType.h:
        * html/BaseTextInputType.h:
        * html/ButtonInputType.h:
        * html/CheckboxInputType.h:
        * html/ClassList.h:
        * html/ColorInputType.h:
        * html/DOMSettableTokenList.h:
        * html/DateInputType.h:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.h:
        * html/EmailInputType.h:
        * html/FTPDirectoryDocument.cpp:
        * html/FileInputType.h:
        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDetailsElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLDocument.h:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.h:
        * html/HTMLMediaSource.h:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.h:
        * html/HTMLUnknownElement.h:
        * html/HTMLVideoElement.h:
        * html/HiddenInputType.h:
        * html/ImageDocument.cpp:
        * html/ImageInputType.h:
        * html/LabelableElement.h:
        * html/LabelsNodeList.h:
        * html/MediaController.h:
        * html/MonthInputType.h:
        * html/NumberInputType.h:
        * html/PasswordInputType.h:
        * html/PluginDocument.h:
        * html/RadioInputType.h:
        * html/RangeInputType.h:
        * html/ResetInputType.h:
        * html/SearchInputType.h:
        * html/SubmitInputType.h:
        * html/TelephoneInputType.h:
        * html/TextFieldInputType.h:
        * html/TextInputType.h:
        * html/TimeInputType.h:
        * html/URLInputType.h:
        * html/WeekInputType.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.h:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/TextDocumentParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/InsertionPoint.h:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/MediaControlsGtk.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.cpp:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.h:
        * html/track/AudioTrack.h:
        * html/track/AudioTrackList.h:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackList.h:
        * html/track/TrackListBase.h:
        * html/track/VideoTrack.h:
        * html/track/VideoTrackList.h:
        * html/track/WebVTTElement.h:
        * inspector/CommandLineAPIModule.h:
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageConsoleAgent.h:
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.h:
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        * loader/FrameNetworkingContext.h:
        * loader/ImageLoader.h:
        * loader/NavigationScheduler.cpp:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/PingLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontClient.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedImageClient.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentClient.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedStyleSheetClient.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/icon/IconLoader.h:
        * mathml/MathMLElement.h:
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLMathElement.h:
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.h:
        * page/CaptionUserPreferencesMediaAF.h:
        * page/Chrome.h:
        * page/DOMTimer.h:
        * page/DOMWindow.h:
        * page/DOMWindowExtension.h:
        * page/EventSource.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/PageDebuggable.h:
        * page/PageSerializer.cpp:
        * page/Performance.h:
        * page/SuspendableTimer.h:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.h:
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * pdf/ios/PDFDocument.cpp:
        * pdf/ios/PDFDocument.h:
        * platform/CalculationValue.h:
        * platform/ClockGeneric.h:
        * platform/MainThreadTask.h:
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        * platform/RefCountedSupplement.h:
        * platform/ScrollView.h:
        * platform/Scrollbar.h:
        * platform/Timer.h:
        * platform/animation/TimingFunction.h:
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/HRTFPanner.h:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/nix/AudioDestinationNix.h:
        * platform/efl/RenderThemeEfl.h:
        * platform/efl/ScrollbarEfl.h:
        * platform/efl/ScrollbarThemeEfl.h:
        * platform/graphics/AudioTrackPrivate.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/VideoTrackPrivate.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        * platform/graphics/egl/GLContextFromCurrentEGL.h:
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SpotLightSource.h:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/TextTrackRepresentationIOS.h:
        * platform/graphics/surfaces/GLTransportSurface.h:
        * platform/graphics/surfaces/egl/EGLContext.h:
        * platform/graphics/surfaces/egl/EGLSurface.h:
        * platform/graphics/surfaces/egl/EGLXSurface.h:
        * platform/graphics/surfaces/glx/GLXContext.h:
        * platform/graphics/surfaces/glx/GLXSurface.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/ios/DeviceMotionClientIOS.h:
        * platform/ios/DeviceOrientationClientIOS.h:
        * platform/ios/ScrollAnimatorIOS.h:
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/WebSafeGCActivityCallbackIOS.h:
        * platform/ios/WebSafeIncrementalSweeperIOS.h:
        * platform/mac/PlatformClockCA.h:
        * platform/mac/PlatformClockCM.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/MediaStreamCenterMac.h:
        * platform/mock/DeviceMotionClientMock.h:
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/BlobResourceHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/nix/RenderThemeNix.h:
        * platform/nix/ScrollbarThemeNix.h:
        * platform/text/LocaleICU.h:
        * platform/text/LocaleNone.cpp:
        * platform/text/PlatformLocale.cpp:
        * platform/text/mac/LocaleMac.h:
        * platform/text/win/LocaleWin.h:
        * platform/win/PopupMenuWin.h:
        * plugins/PluginView.h:
        * rendering/AutoTableLayout.h:
        * rendering/ClipPathOperation.h:
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/FixedTableLayout.h:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTextTrackCue.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/mathml/RenderMathMLUnderOver.h:
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.h:
        * rendering/style/ContentData.h:
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StylePendingImage.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextRunRenderingContext.h:
        * storage/StorageAreaImpl.h:
        * storage/StorageNamespaceImpl.h:
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDocument.h:
        * svg/SVGElement.h:
        * svg/SVGElementInstance.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGGraphicsElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGTransformable.h:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFilter.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        * svg/properties/SVGPropertyTearOff.h:
        * testing/InternalSettings.cpp:
        * testing/Internals.cpp:
        * testing/MockCDM.cpp:
        * testing/MockCDM.h:
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.h:
        * workers/SharedWorker.h:
        * workers/SharedWorkerGlobalScope.h:
        * workers/SharedWorkerThread.h:
        * workers/Worker.h:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.cpp:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XSLStyleSheet.h:

2014-01-16  Beth Dakin  <bdakin@apple.com>

        Speculative Win Cairo build fix.

        These need to be inside an ifdef.
        * page/FrameView.cpp:
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):

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

        text-emphasis-position CSS property doesn't recognize 'left' and 'right'
        https://bugs.webkit.org/show_bug.cgi?id=126611

        Reviewed by Simon Fraser.

        This patch allows the text-emphasis-position to accept the "left" and
        "right" CSS values. In horizontal writing modes, these values no not
        change behavior. In vertical writing modes, however, these values specify
        which side to place the emphasis mark. Similarly, in vertical writing
        modes, the "above" and "below" values should not change behavior.

        However, in order to keep existing behavior, if neither "left" nor "right"
        is specified, we should draw as if the appropriate value were
        specified ("over" -> "right" and "under" -> "left"). Note that this
        will have to be updated when we implement the
        "text-orientation: sideways-left" CSS property.

        Tests: fast/text/emphasis-horizontal-left-right.html
               fast/text/emphasis-vertical-over-right.html
               fast/text/emphasis-vertical-over-under.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderEmphasisPositionFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextEmphasisPosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::valueToEmphasisPosition):
        (WebCore::ApplyPropertyTextEmphasisPosition::applyValue):
        (WebCore::ApplyPropertyTextEmphasisPosition::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove):
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:

2014-01-16  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit is not firing AXMenuOpenedNotification
        https://bugs.webkit.org/show_bug.cgi?id=126993

        Reviewed by Mario Sanchez Prada.

        To monitor for menu open notifications, we need to know which children are added to
        the render tree, so the childrenChanged() method has been updated to allow for that.
        Once we know the new child, we can then check what kind of role it has.

        I also found a flakiness issue with DRT where posting a notification back to DRT
        would sometimes cause a new notification to be queued, which would then be lost when the
        queue was cleared. This was fixed by copying the notifications to post before iterating them.

        Test: platform/mac/accessibility/aria-menu-open-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::checkForOpenMenu):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::childrenChanged):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::styleWillChange):

2014-01-16  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit is not firing AXMenuItemSelectedNotification
        https://bugs.webkit.org/show_bug.cgi?id=127081

        Reviewed by Mario Sanchez Prada.

        Monitor for when a menu item either gains focus() or has aria-selected set,
        in which case, we need to fire a specific notification.

        Test: platform/mac/accessibility/aria-menu-item-selected-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):
            This method was declared in the header, but never implemented, leading to compilation issues.
        (WebCore::AXObjectCache::handleMenuItemSelected):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
            Allow the core class to handle focus changes first, then pass off to platform
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
            Allow menu items to expose a description attribute.

2014-01-16  Andy Estes  <aestes@apple.com>

        [iOS] Fix build issues with exported headers

        * Configurations/WebCore.xcconfig: Allowed UIKit to link against
        WebCore.
        * page/ios/WebEventRegion.h: Removed ENABLE(TOUCH_EVENTS), which are
        always enabled on iOS.

2014-01-16  Dirk Schulze  <krit@webkit.org>

        Rename functions in SVGDocumentExtension
        https://bugs.webkit.org/show_bug.cgi?id=127046

        Reviewed by Sam Weinig.

        Change some function names in SVGDocumentExtension
        to make them more descriptive.

        Simple refactoring. No new tests.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isIdOfPendingResource):
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources):
        (WebCore::SVGDocumentExtensions::isPendingResource):
        (WebCore::SVGDocumentExtensions::clearHasPendingResourcesIfPossible):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResourceForRemoval):
        (WebCore::SVGDocumentExtensions::markPendingResourcesForRemoval):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemovalMap): The name is not great but a bit more descriptive.
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::buildPendingResourcesIfNeeded):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):

2014-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][EFL][NIX] Do not use PrintContext, Frame and DocumentLoader in Errors
        https://bugs.webkit.org/show_bug.cgi?id=127047

        Reviewed by Martin Robinson.

        Using PrintContext, Frame and DocumentLoader in platform is a
        layering violation.
        Change printing error methods to receive a failing URL instead of
        receiving a PrintContext that was used only to get the failing
        URL.

        * platform/efl/ErrorsEfl.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/efl/ErrorsEfl.h:
        * platform/gtk/ErrorsGtk.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/gtk/ErrorsGtk.h:
        * platform/nix/ErrorsNix.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/nix/ErrorsNix.h:

2014-01-15  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Enable accelerated compositing for fixed elements in named flows
        https://bugs.webkit.org/show_bug.cgi?id=125144

        Reviewed by David Hyatt.

        Add support for compositing for fixed positioned element that are collected
        inside a named flow. Prior to this patch, the fixed positioned elements were
        positioned and sized properly but only in the non-compositing scenario.

        Tests: compositing/regions/abs-in-named-flow-from-fixed-in-named-flow.html
               compositing/regions/fixed-in-diff-named-flows-zIndex.html
               compositing/regions/fixed-in-named-flow-clip-descendant.html
               compositing/regions/fixed-in-named-flow-from-abs-in-named-flow.html
               compositing/regions/fixed-in-named-flow-from-outflow.html
               compositing/regions/fixed-in-named-flow-got-transformed-parent.html
               compositing/regions/fixed-in-named-flow-lost-transformed-parent.html
               compositing/regions/fixed-in-named-flow-overlap-composited.html
               compositing/regions/fixed-in-named-flow-position-changed.html
               compositing/regions/fixed-in-named-flow-transformed-parent.html
               compositing/regions/fixed-in-named-flow-zIndex.html
               compositing/regions/fixed-in-named-flow.html
               compositing/regions/fixed-transformed-in-named-flow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:

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

        Fix the iOS build after r162114

        Unreviewed.

        * WebCore.exp.in: Move the symbol to the right section and add the missing symbols for iOS.

2014-01-15  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix painting when the composited region has overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124887

        Reviewed by Alexandru Chiculita.

        When the layer of the region is composited, the region receives a GraphicsLayer of its own
        so the clipping coordinates (caused by overflow:hidden) must be relative to the
        GraphicsLayer coordinates in which the region gets painted.

        Also, while the painting is done relative to the location of the region's content box, the
        clipping is bound to the padding box of the region.

        Tests: compositing/regions/paint-inside-composited-region-overflow-hidden-versus-div.html
               compositing/regions/paint-inside-composited-region-overflow-hidden-versus-region.html

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

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

        Move user agent code to WebCore and unify some code between OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=127080

        Reviewed by Sam Weinig.

        Move the duplicated code from WebView and WebPageProxy to two files
        in WebCore: UserAgentMac and UserAgentIOS.

        * Configurations/WebCore.xcconfig:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ios/UserAgentIOS.mm: Added.
        (WebCore::platformSystemRootDirectory):
        (WebCore::osMarketingVersion):
        (WebCore::standardUserAgentWithApplicationName):
        * page/mac/UserAgent.h: Added.
        * page/mac/UserAgentMac.mm: Added.
        (WebCore::systemMarketingVersionForUserAgentString):
        (WebCore::standardUserAgentWithApplicationName):
        * platform/ios/WebCoreSystemInterfaceIOS.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-01-15  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * platform/text/TextAllInOne.cpp:

2014-01-15  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Clean up REMOTE_INSPECTOR code in OpenSource after the iOS merge
        https://bugs.webkit.org/show_bug.cgi?id=127069

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in:

2014-01-15  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Ryosuke Niwa.

        Move the contents of TextBreakIteratorICU.cpp to TextBreakIterator.cpp and remove TextBreakIteratorICU.cpp.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/TextBreakIterator.cpp:
        * platform/text/TextBreakIteratorICU.cpp: Removed.

2014-01-15  Eric Carlson  <eric.carlson@apple.com>

        MediaSessionManager shouldn't use std::map
        https://bugs.webkit.org/show_bug.cgi?id=127003

        Reviewed by Sam Weinig.

        No new tests, no functional change.

        Use an array instead of std::map.
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::addRestriction):
        (WebCore::MediaSessionManager::removeRestriction):
        (WebCore::MediaSessionManager::restrictions):
        (WebCore::MediaSessionManager::sessionWillBeginPlayback):
        * platform/audio/MediaSessionManager.h:

2014-01-15  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Unreviewed rollout, this caused a regression.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::setIsVisuallyIdle):
        (WebCore::Page::setIsVisible):
        (WebCore::Page::visibilityState):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):

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

        [WebGL] Resizing and entering/exiting full screen draws garbage
        https://bugs.webkit.org/show_bug.cgi?id=127077

        Reviewed by Dean Jackson.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs): Simplified logic regarding FBO switching.
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Make sure a few things
        are turned off that might affect blitting data from one FBO to another.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Actually turn dithering off!
        (WebCore::GraphicsContext3D::reshape): Mark the context as dirty when resizing so that
        the GL view is redrawn during resizing events.

2014-01-15  Roger Fong  <roger_fong@apple.com>

        Remove unnecessary call to webGLContextCreated
        https://bugs.webkit.org/show_bug.cgi?id=127000

        Reviewed by Brent Fulgham.

        Note that the functionality of webGLContextCreated will be handled by webGLPolicyForSite now.

        Tests: Unskipping tests skipped in r162002.

        * html/HTMLCanvasElement.cpp: Remove webGLContextCreated call.
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        Have the returned load policy default to WebGLAllow so as to not break clients that don't implement the method.
        (WebCore::FrameLoaderClient::webGLPolicyForSite):
        webGLPolicyForSite is now assuming the role of webGLContextCreated as well, pass in the whole site URL instead of just the host.
        * page/ChromeClient.h: Remove webGLContextCreated method.
        (WebCore::ChromeClient::decrementActivePageCount):

2014-01-15  Beth Dakin  <bdakin@apple.com>

        Repeating background images should continue into margin tiles
        https://bugs.webkit.org/show_bug.cgi?id=127021
        -and corresponding-
        <rdar://problem/15571300>

        Reviewed by Simon Fraser.

        This patch makes repeating background images continue into margin tiles. 

        RenderObject::repaintRectangle() now takes an addition bool parameter which 
        indicates whether or not the repaint rect should be clipped to the layer size.
        * WebCore.exp.in:

        These new functions on FrameView provide a way for code in the render tree to know 
        if the TiledBacking has a margin. tiledBacking() is now const. It should have 
        always been const, and it needs to be const to make these new functions const.
        * page/FrameView.cpp:
        (WebCore::FrameView::tiledBacking):
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::tiledBacking):

        If we’re painting the root background and it is an extended background, we need to 
        inflate the repaint rect to span the extended background. 
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):

        To get the phase right on repeated background images on a page with margin tiles, 
        we need to make sure we factor the size of the margin tiles into the left and top 
        values that we use when calculating background image geometry.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

        setBackingNeedsRepaintInRect() now takes GraphicsLayer::ShouldClipToLayer as a 
        parameter, just like setBackingNeedsRepaint(). 
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):

        setContentsNeedDisplayInRect() also takes a GraphicsLayer::ShouldClipToLayer now, 
        and it passes that information down to the GraphicsLayer.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderLayerBacking.h:

        These two RenderObject functions now take an optional bool parameter which 
        indicates whether or not the rect should be clipped to the layer size. They use a 
        bool instead of the GraphicsLayer enum in order to avoid including GraphicsLayer.h 
        from within RenderObject.h. This seems like a simpler solution than adding a new 
        stand-alone file for this very simple enum.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaintRectangle):
        * rendering/RenderObject.h:

        RenderView::backgroundRect needs to return the extendedBackgroundRect when it had 
        one.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::backgroundRect):

2014-01-15  Brian Burg  <bburg@apple.com>

        Web Inspector: capture probe samples on the backend
        https://bugs.webkit.org/show_bug.cgi?id=126668

        Reviewed by Joseph Pecoraro.

        Test: inspector-protocol/debugger/setProbe-multiple-actions.html

        Add the probe breakpoint action type. A probe action
        evaluates an expression on the script call frame, and
        the result is aggregated on a per-probe basis. Each
        evaluated expression result is called a probe sample.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::evaluateBreakpointAction): Teach
        the debug server to evaluate a probe.

        (WebCore::ScriptDebugServer::dispatchDidSampleProbe): Added.
        (WebCore::ScriptDebugServer::handleBreakpointHit): Increment a hit count.
        (WebCore::ScriptDebugServer::getActionsForBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::objectGroupForBreakpointAction): Added. Create an object
        group for each breakpoint action. Currently only probes make objects.
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enable): Remove stale comment.
        (WebCore::breakpointActionTypeForString): Add new case.
        (WebCore::InspectorDebuggerAgent::breakpointActionsFromProtocol): Make
        this a member function instead of a static function, so it can increment
        the breakpoint action identifier counter.
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl): Propagate the
        assigned breakpoint action identifiers.
        (WebCore::InspectorDebuggerAgent::setBreakpoint): Propagate the
        assigned breakpoint action identifiers.
        (WebCore::InspectorDebuggerAgent::removeBreakpoint): Release object
        groups for any actions that were associated with the removed breakpoint.
        (WebCore::InspectorDebuggerAgent::didSampleProbe): Added.
        (WebCore::InspectorDebuggerAgent::clearResolvedBreakpointState): Renamed from clear().
        (WebCore::InspectorDebuggerAgent::didClearGlobalObject): Renamed from reset().
        * inspector/InspectorDebuggerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearMainFrameWindowObject):
        * inspector/ScriptBreakpoint.h:
        (WebCore::ScriptBreakpointAction::ScriptBreakpointAction): Add identifier member.
        * inspector/ScriptDebugListener.h:

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

        [WebGL] Validation function for compressed formats incorrect
        https://bugs.webkit.org/show_bug.cgi?id=127023

        Reviewed by Dean Jackson.

        No new tests. Covered by existing WebGL compressed texture tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData): Revise to match specifications.

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

        Remove the CSS selector profiler.
        <https://webkit.org/b/127039>

        The selector profiler was painting a mostly fictional picture of what
        selectors we were spending time on. It never really grokked the fast
        path selectors, nor did it understand recent additions like the extra
        cascading pass or the selector JIT.

        Somewhat ironically, this may end up making some selectors run faster
        since it removes a number of brances in hot code.

        Reviewed by Sam Weinig.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/protocol/CSS.json:

2014-01-15  Frédéric Wang  <fred.wang@free.fr>

        [SVG] Accept HTML and MathML namespaces as valid requiredExtensions
        https://bugs.webkit.org/show_bug.cgi?id=88188

        Reviewed by Chris Fleizach.

        When HTML and MathML are used as foreign objects of an SVG image, it is
        important for Web authors to be able to specify a fallback content for
        SVG-only readers or browsers without MathML support. We rely on the
        requiredExtensions for that purpose and we use the XHTML/MathML
        namespaces as suggested in SVG Tiny 1.2 and implemented in Gecko.

        Tests: svg/custom/conditional-processing-1.svg
               svg/custom/conditional-processing-2.html
               svg/dom/SVGTests.html

        * svg/SVGSwitchElement.cpp: Remove an incorrect FIXME comment and replace it with a reference to bug 74749.
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp: Check if the list of required extensions contains only the XHTML/MathML namespaces.
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162066.
        http://trac.webkit.org/changeset/162066
        https://bugs.webkit.org/show_bug.cgi?id=127056

        The added test still fails on some bots (Requested by ap on
        #webkit).

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):

2014-01-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix intialization order of ResourceResponse constructor

        Fixes the following build failure:

            WebCore/platform/network/mac/ResourceResponseMac.mm:83:7: error: field 'm_nsResponse' will be initialized after field 'm_initLevel' [-Werror,-Wreorder]
                , m_nsResponse(nsResponse)
                  ^

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::ResourceResponse): Reorder member
        initializers to match the order that they are defined in the
        header.

2014-01-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Comment out part of r162036 which broke WebGL on many ports.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2014-01-15  Zoltan Horvath  <zoltan@webkit.org>

        WordMeasurement is a struct, not a class
        https://bugs.webkit.org/show_bug.cgi?id=125373

        Reviewed by Anders Carlsson.

        Change class to struct, because there is no reason for WordMeasurement to be a class.

        No new tests, no behavior change.

        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:

2014-01-15  Mihai Tica  <mitica@adobe.com>

        Reapplying:
        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-15  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Hit-testing goes through clipped layer in fast/regions/overflow-first-and-last-regions-in-container-hidden.html
        https://bugs.webkit.org/show_bug.cgi?id=126886

        Reviewed by Mihnea Ovidenie.

        Currently, when hit testing a location inside a flow thread we ignore the clipping rectangle of
        the region. This leads to false positives when the location is over the clipped out content of a
        flow thread. The patch verifies that the location is inside the clipping rectangle of the region before
        forwarding the hit test verification to the flow thread layer.

        Test: fast/regions/hover-and-js-in-visual-overflow-hidden.html

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

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

        Suspend resource requests during computedStyle
        https://bugs.webkit.org/show_bug.cgi?id=127034

        Reviewed by Andreas Kling.

        We have some cases where getting computed style leads to crashes in loadPendingImages. 
        This is probably caused by load callbacks resulting in re-entering WebKit and killing the StyleResolver.
        
        As a speculative fix suspend resource loads (and so callbacks) when getting the computed style.
        We do similar suspension during style recalc for the same reason.

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * loader/ResourceLoadScheduler.h:
        (WebCore::ResourceLoadScheduler::Suspender::Suspender):
        (WebCore::ResourceLoadScheduler::Suspender::~Suspender):

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

        DocumentFragment should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115641

        Reviewed by Ryosuke Niwa.

        http://www.w3.org/TR/2013/WD-dom-20131107/#interface-documentfragment
        This allows us to do `new DocumentFragment` instead of
        `document.createDocumentFragment()`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/86855c44a5a127716840fb377281b1c428e5eb2d%5E%21

        Test: fast/dom/DocumentFragment/document-fragment-constructor.html

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

2014-01-14  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix after r161980.

        CachedResourcesLoader.h should not belong to the CSS_SHADERS flag since it is used
        out of the flag so it causes a compile failure when svg and css shaders are concurrently disabled.

        * css/StyleResolver.cpp:

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

        Pack ResourceResponse harder.
        <https://webkit.org/b/127005>

        Re-arrange the members of ResourceResponse to reduce padding,
        shrinking it by 8 bytes.

        This nudges CachedResource and CachedImage into smaller size
        classes, yielding a ~700 kB progression on Membuster3.

        Reviewed by Anders Carlsson.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2014-01-14  Dirk Schulze  <krit@webkit.org>

        Remove unnecessary WebkitCSSSVGDocumentValue
        https://bugs.webkit.org/show_bug.cgi?id=126997

        Reviewed by Andreas Kling.

        Removing redundant code path. WebkitCSSSVGDocumentValue
        can be expressed by a CSSPrimitiveValue.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFilter):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:
        * css/WebKitCSSSVGDocumentValue.cpp: Removed.
        * css/WebKitCSSSVGDocumentValue.h: Removed.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::customCSSText):

2014-01-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect repaint of fixed element with transformed parent
        https://bugs.webkit.org/show_bug.cgi?id=125756

        Reviewed by Simon Fraser.

        When collecting the layers for fixed positioned elements with named flow
        as a containing block, use layers collection at named flow layer level
        instead of relying on the positioned elements collection.

        With this approach, there are situations with nested named flows laid out in
        auto-height regions and thus assuming 2 step layouts, in which is enough to lay
        out the inner named flow once instead of twice with a performance gain.
        In such situations, the layers lists for the inner named flow are not yet updated
        when collectFixedPositionedLayers is called to paint the fixed positioned layers.
        Therefore I called updateLayerListsIfNeeded for all named flows layers, via the flow thread controller, before inspecting the named flow layers to avoid hitting the assertions when
        accessing the named flows layers lists.

        Tests: fast/regions/repaint/fixed-in-named-flow-cb-changed.html
               fast/regions/repaint/fixed-in-named-flow-cb-changed2.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateNamedFlowsLayerListsIfNeeded):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/FlowThreadController.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions): Emit
        error state expected by Khronos test suite.

2014-01-14  Brady Eidson  <beidson@apple.com>

        IDB: create object store support
        <rdar://problem/15779639> and https://bugs.webkit.org/show_bug.cgi?id=127011

        Reviewed by Anders Carlsson.

        Split the 3 objects declared in IDBDatabaseMetadata into their own header files:
        * Modules/indexeddb/IDBDatabaseMetadata.h:
        * Modules/indexeddb/IDBIndexMetadata.h:
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        * Modules/indexeddb/IDBObjectStoreMetadata.h:
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):

        Add cross thread copying for IDBDatabaseMetadata:
        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBIndexMetadata>::copy):
        (WebCore::IDBObjectStoreMetadata>::copy):
        * platform/CrossThreadCopier.h:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-14  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Crash in NavigatorBase::vendor loading apple.com
        https://bugs.webkit.org/show_bug.cgi?id=127028

        Reviewed by Daniel Bates.

        Export function pointers to be filled in with WebKitSystemInterface functions.

        * WebCore.exp.in:

2014-01-14  Jeffrey Pfau  <jpfau@apple.com>

        Build fix after r162034

        Rubber-stamped by Benjamin Poulain.

        * WebCore.exp.in:

2014-01-14  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Resource finish time is sometimes earlier than response received time.

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

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFinishLoading): Use currentTime() and not the
        passed in finishTime.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Follow up build fix attempt.

        * WebCore.exp.in:

2014-01-14  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Brent Fulgham.

        * WebCore.xcodeproj/project.pbxproj: Copy over HTMLCanvasElement.h to the private headers directory.
        * html/HTMLCanvasElement.cpp: Show the policy dialog and retrieve policies as necessary.
        (WebCore::HTMLCanvasElement::getContext): Make sure that WebGL is allowed on the site.
                                                  If it isn't, be sure to notify the frame loader client that
                                                  the site is trying to create a WebGL context.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForHost): Used to get the WebGL load policy for a site.
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::webGLContextCreated): Called when a site is creating a WebGL context.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Create separate progress tracker clients
        https://bugs.webkit.org/show_bug.cgi?id=127025

        Reviewed by Sam Weinig.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::~ProgressTracker):
        * loader/ProgressTrackerClient.h:

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] WebGLRenderingContext::validateCompressedTexDimensions improperly calculates values
        https://bugs.webkit.org/show_bug.cgi?id=126926

        Reviewed by Dean Jackson.

        Test coverage in fast/canvas/webgl/webgl-compressed-texture-size-limit.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Pass target to
        validation function.
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions): Revise
        calculation to also confirm size is in bounds.
        (WebCore::WebGLRenderingContext::validateCompressedTexSubDimensions): Pass
       target to validation function.
        * html/canvas/WebGLRenderingContext.h: Modify signature.

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        On iOS, we never want to make scrollbar layers
        https://bugs.webkit.org/show_bug.cgi?id=127024
        <rdar://problem/15745768>

        Reviewed by Dean Jackson.

        On platforms that delegate scrolling, don't try to make layers
        for scrollbars.
        
        This fixes a crash in RenderLayerCompositor::updateOverflowControlsLayers()
        where m_overflowControlsHostLayer is null.

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

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Avoid PLATFORM() macros in exported headers.

        * platform/ios/WebEvent.h:

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Build fix for 32-bit simulator and device

        CGFloat is defined to be float, double for 32-bit, and 64-bit devices respectively.
        Because WebCore::createCGColorWithDeviceWhite() takes CGFloat arguments we need to
        list both the float and double-variants of this symbol in WebCore.exp.in. Currently
        we only list the version whose arguments are of type double.

        * WebCore.exp.in:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Clean up exports and headers for iOS.
        
        Don't use ENABLE() macro in an exported header.

        * platform/ios/wak/WAKResponder.h:

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Move symbol __ZN7WebCore34registerQLPreviewConverterIfNeededEP5NSURLP8NSStringP6NSData to
        section USE(QUICK_LOOK)

        * WebCore.exp.in:

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Clean up DNSResolveQueue
        https://bugs.webkit.org/show_bug.cgi?id=127007

        Reviewed by Geoffrey Garen.

        Move the shared() getter out of line and make it use NeverDestroyed.
        Add a Timer member variable instead of inheriting from TimerBase. 
        Use std::atomic<int> for the m_requestsInFlight member variable.

        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::shared):
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::timerFired):
        * platform/network/DNSResolveQueue.h:
        (WebCore::DNSResolveQueue::decrementRequestCount):

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Two more exports for iOS.

        * WebCore.exp.in:

2014-01-14  Csaba Osztrogonác  <ossy@webkit.org>

        One more buildfix after r161999.

        * Modules/webaudio/MediaStreamAudioSource.h:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Export __ZN7WebCore11FileChooser16chooseMediaFilesERKN3WTF6VectorINS1_6StringELm0ENS1_15CrashOnOverflowEEERKS3_PNS_4IconE
        to fix WK1 iOS linking.

        * WebCore.exp.in:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        iOS build fixing: export required by iOS WebKit1.

        * WebCore.exp.in:

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162000.
        http://trac.webkit.org/changeset/162000
        https://bugs.webkit.org/show_bug.cgi?id=127009

        API versioning is wrong (Requested by rfong on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:

2014-01-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Move CSSPrimitiveValue <-> LayoutBox Conversion to CSSPrimitiveValueMappings
        https://bugs.webkit.org/show_bug.cgi?id=126719

        Reviewed by Dirk Schulze.

        The standard location for conversions to/from CSSPrimitiveValues is CSSPrimitiveValueMappings.
        This patch moves the conversion for LayoutBoxes from BasicShapeFunctions to
        CSSPrimitiveValueMappings.h.

        Refactoring, no new tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LayoutBox):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):

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

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Brent Fulgham.

        * WebCore.xcodeproj/project.pbxproj: Copy over HTMLCanvasElement.h to the private headers directory.
        * html/HTMLCanvasElement.cpp: Show the policy dialog and retrieve policies as necessary.
        (WebCore::HTMLCanvasElement::getContext): Make sure that WebGL is allowed on the site.
                                                  If it isn't, be sure to notify the frame loader client that
                                                  the site is trying to create a WebGL context.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForHost): Used to get the WebGL load policy for a site.
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::webGLContextCreated): Called when a site is creating a WebGL context.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Get rid of ThreadRestrictionVerifier
        https://bugs.webkit.org/show_bug.cgi?id=127004

        Reviewed by Sam Weinig.

        Remove now unneeded calls.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::readFromDatabase):

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Directly allocate NSMutableDictionary in QLPreviewConverterDictionary() and QLContentDictionary()
        https://bugs.webkit.org/show_bug.cgi?id=126999
        <rdar://problem/15810305>

        Reviewed by Joseph Pecoraro.

        Fixes an issue where we may crash when subsequently accessing WebCore::QLPreviewConverterDictionary()
        or WebCore::QLContentDictionary(). Currently neither of these functions retain'ed the NSMutable dictionary
        returned by [NSMutableDictionary dictionary]. Instead, we should allocate and initialize NSMutableDictionary
        directly to ensure that the dictionary is retained.

        * platform/network/ios/QuickLook.mm:
        (QLPreviewConverterDictionary):
        (QLContentDictionary):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-14  Mark Rowe  <mrowe@apple.com>

        WebCore icon database appears to leak sudden termination assertions
        <https://webkit.org/b/126971> / <rdar://problem/15808797>

        Introduce an RAII wrapper around disableSuddenTermination / enableSuddenTermination
        and adopt it in IconDatabase to address the incorrect management of sudden termination.

        IconDatabase now owns up to two SuddenTerminationDisabler objects. One ensures that
        sudden termination is disabled while we're waiting on the sync timer to fire. The second
        ensures that sudden termination is disabled while we're waiting on the sync thread to
        process any pending work.

        Reviewed by Alexey Proskuryakov.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::wakeSyncThread): Disable sudden termination until the sync thread
        has finished this unit of work.
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer): Disable sudden termination until the
        sync timer has fired.
        (WebCore::IconDatabase::syncTimerFired): Clear the member variable to reenable sudden termination.
        (WebCore::IconDatabase::syncThreadMainLoop): Taken ownership of the SuddenTerminationDisabler
        instance when we start processing a unit of work. Discard the object when our work is complete.
        * loader/icon/IconDatabase.h:
        * platform/SuddenTermination.h:
        (WebCore::SuddenTerminationDisabler::SuddenTerminationDisabler): Disable sudden termination when created.
        (WebCore::SuddenTerminationDisabler::~SuddenTerminationDisabler): Enable it when destroyed.

2014-01-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: For Remote Inspection link WebProcess's to their parent UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=126995

        Reviewed by Timothy Hatcher.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::parentProcessIdentifier):
        Client method intended for WebKit2 so a WebProcess can link to its UIProcess.

        * page/PageDebuggable.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::parentProcessIdentifier):
        Provide parent process identifier if there is one.

2014-01-14  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes, part 2

        * WebCore.exp.in:
        Export some more symbols.

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

        Add ENABLE(WEB_REPLAY) feature flag to the build system
        https://bugs.webkit.org/show_bug.cgi?id=126949

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

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

        Crash in WebCore::MediaSourcePrivateAVFObjC::hasAudio const + 13
        https://bugs.webkit.org/show_bug.cgi?id=126768

        Reviewed by Eric Carlson.

        Null-check m_mediaSourcePrivate before calling.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasVideo):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAudio):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

2014-01-14  Piotr Grad  <p.grad@samsung.com>

        [GStreamer] Playback rate is not set when pipeline is not ready.
        https://bugs.webkit.org/show_bug.cgi?id=126692

        Reviewed by Philippe Normand.

        No new tests. Covered by existing tests.

        Added new method updatePlaybackRate which is called when playback rate change is possible.
        Added m_lastPlaybackRate in order to retrieve last correct playback rate and notify upper
        layers about that setting playback rate failed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161978.
        http://trac.webkit.org/changeset/161978
        https://bugs.webkit.org/show_bug.cgi?id=126992

        Test case causes crash on some hardware (Requested by bfulgham
        on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161964 and r161965.
        http://trac.webkit.org/changeset/161964
        http://trac.webkit.org/changeset/161965
        https://bugs.webkit.org/show_bug.cgi?id=126988

        Tests do not pass on the bots because of slight color
        differences. The tests should be redone with squared results
        and blending that leads to stable colors. (Requested by krit_
        on #webkit).

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):

2014-01-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Shape images are now <image> types, not just URIs
        https://bugs.webkit.org/show_bug.cgi?id=125224

        Reviewed by Andreas Kling.

        Added support for image-set valued shapes. Added an optional ResourceLoaderOptions
        parameter to CSSImageSetValue::cachedImageSet() to enable CORS-enabled fetch of
        image-set images. This change is based on a similar patch for ordinary shape image values:
        https://bugs.webkit.org/show_bug.cgi?id=123114.

        Tests: fast/shapes/shape-inside/shape-inside-image-set.html
               fast/shapes/shape-outside-floats/shape-outside-image-set.html

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageSetValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage):
        (WebCore::StyleResolver::loadPendingShapeImage):
        * css/StyleResolver.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):

2014-01-13  Chris Fleizach  <cfleizach@apple.com>

        AX: Modernize AccessibilityChildrenVector loops
        https://bugs.webkit.org/show_bug.cgi?id=126915

        Reviewed by Anders Carlsson.

        Change appropriate for loops to use the new style.
        Use auto where appropriate.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        (WebCore::AccessibilityARIAGridRow::parentTable):
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::listBoxOptionIndex):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::selectedRadioButton):
        (WebCore::AccessibilityNodeObject::selectedTabItem):
        (WebCore::AccessibilityNodeObject::ariaLabeledByText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::clearChildren):
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::ariaFlowToElements):
        (WebCore::AccessibilityRenderObject::isTabItemSelected):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaOwnsElements):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        (WebCore::AccessibilityRenderObject::updateAttachmentViewParents):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::mathRadicandObject):
        (WebCore::AccessibilityRenderObject::mathRootIndexObject):
        (WebCore::AccessibilityRenderObject::mathNumeratorObject):
        (WebCore::AccessibilityRenderObject::mathDenominatorObject):
        (WebCore::AccessibilityRenderObject::mathUnderObject):
        (WebCore::AccessibilityRenderObject::mathOverObject):
        (WebCore::AccessibilityRenderObject::mathBaseObject):
        (WebCore::AccessibilityRenderObject::mathSubscriptObject):
        (WebCore::AccessibilityRenderObject::mathSuperscriptObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::visibleRows):
        (WebCore::AccessibilityTable::cells):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertMathPairsToNSArray):
        (-[WebAccessibilityObjectWrapperBase accessibilityTitle]):
        (-[WebAccessibilityObjectWrapperBase accessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase accessibilityHelpText]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (convertToNSArray):
        (convertStringsToNSArray):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] SoupNetworkSession::setAcceptLanguages should receive a const reference
        https://bugs.webkit.org/show_bug.cgi?id=126966

        Reviewed by Gustavo Noronha Silva.

        We don't really need to modify the Vector just to ignore the C
        locale.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::buildAcceptLanguages): Rework it to not modify the
        passed vector to ignore the C locale when it's present.
        (WebCore::SoupNetworkSession::setAcceptLanguages): Use const Vector<String>&.
        * platform/network/soup/SoupNetworkSession.h:

2014-01-14  Piotr Grad  <p.grad@samsung.com>

        HTMLMediaElement::potentiallyPlaying can be more simple.
        https://bugs.webkit.org/show_bug.cgi?id=111

        Reviewed by Eric Carlson.

        Tests: No new tests, just refactorings.

        Expression is simplified because the first 'if' statement depends on the same condition
        as pausedToBuffer value.

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

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

        Remove deprecated DeferrableOneShotTimer constructor.
        <https://webkit.org/b/126984>

        Remove the deprecated constructor for callback functions that take
        the timer by pointer instead of by reference.

        This shrinks DeferrableOneShotTimer by 8 bytes.

        Reviewed by Anders Carlsson.

        * platform/Timer.h:
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):

2014-01-14  Dirk Schulze  <krit@webkit.org>

        Make CachedSVGDocument independent of CSS Filters
        https://bugs.webkit.org/show_bug.cgi?id=126133

        Reviewed by Antti Koivisto.

        Clean-up the pendingSVGDocuments code in StyleResolver.
        CachedSVGDocumentReference is responsible for requesting the
        SVG document instead of WebKitCSSSVGDocumentValue.
        CachedSVGDocumentReference can be used by other SVG resource like
        clip-path and mask now so that these may load external resources
        as well.
        WebKitCSSSVGDocumentValue does not provide any further value
        and will be removed in the next patch.

        Refactoring, no new test cases.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h: Replace Map with a Set.
        (WebCore::StyleResolver::State::pendingSVGDocuments): Use the Set from now on.
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::load):
        * loader/cache/CachedSVGDocumentReference.h: Is responsible for 
            requesting the SVG document.
        (WebCore::CachedSVGDocumentReference::create):
        (WebCore::CachedSVGDocumentReference::loadRequested):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::createCachedSVGDocumentReference):
        * platform/graphics/filters/FilterOperation.h:

2014-01-14  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] AXChildrenChanged notification handling is a performance black hole
        https://bugs.webkit.org/show_bug.cgi?id=126970

        Reviewed by Gustavo Noronha Silva.

        Remove code that is causing a huge performance problem when
        loading big pages, just to be able to emit the children-changed:add
        signal at the exact time a child is added.

        This removal does not imply that the signal won't be ever emitted,
        just that it will be emitted a bit later (when the new child is
        asynchronously added to the tree), which should be good enough
        anyway for Accessible Technologies, without impacting perfformance
        in such a negative way.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Removed
        extremely expensive referring loop when AXChildrenChanged is received.

2014-01-14  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Background layer with -webkit-cross-fade doesn't blend
        when having -webkit-background-blending applied. Turns out the problem was
        the blending parameter not being passed to WebCore::CrossfadeGeneratedImage::draw

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

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-crossfade-image.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw): set blendMode on context.

2014-01-14  Mihai Tica  <mitica@adobe.com>

        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-14  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove accidentally added PLATFORM(QT) from Source/WebCore/editing/EditorCommand.cpp after r161638
        https://bugs.webkit.org/show_bug.cgi?id=126980

        Reviewed by Andreas Kling.

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):

2014-01-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] The list of fixed positioned layers in named flows should be sorted by z-index
        https://bugs.webkit.org/show_bug.cgi?id=126978

        Reviewed by Antti Koivisto.

        Return the list of fixed positioned layers sorted by z-index from
        FlowThreadController::collectFixedPositionedLayers instead of manually sort it
        every time we need it (RenderLayer::paintFixedLayersInNamedFlows, RenderLayer::hitTestFixedLayersInNamedFlows).
        Refactoring covered by existing regions tests.

        * rendering/FlowThreadController.cpp:
        (WebCore::compareZIndex):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

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

        Pack ResourceLoaderOptions harder.
        <https://webkit.org/b/126972>

        Make all ResourceLoaderOptions members bitfields to reduce padding,
        shrinking it from 28 to 4 bytes.

        Reviewed by Antti Koivisto.

        * loader/ResourceLoaderOptions.h:

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

        Pack ResourceError harder.
        <https://webkit.org/b/126969>

        Re-arrange the members of ResourceError to reduce padding,
        shrinking it by 8 bytes.

        Reviewed by Antti Koivisto.

        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::ResourceErrorBase):

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

        Pack RenderLayer harder.
        <https://webkit.org/b/126967>

        Re-arrange the members of ScrollableArea a bit so that RenderLayer
        can combine its bitfields with the ones in ScrollableArea.
        This makes RenderLayer fit into a snugger size class, saving 32 bytes
        per layer.

        296 kB progression on Membuster3.

        Reviewed by Antti Koivisto.

        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:

            Put bitfield members at the end of ScrollableArea so inheriting
            classes can synergize with the padding.

        * rendering/RenderLayer.h:

            Make m_blendMode a bitfield to avoid bloating the class.

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebCore build fixes

        Add WebKit and WebKit2 as allowable clients of WebCore.

        * Configurations/WebCore.xcconfig:

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes, part 1

        * WebCore.xcodeproj/project.pbxproj:
        Move some headers to 'private', from 'project'.

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161907.
        http://trac.webkit.org/changeset/161907
        https://bugs.webkit.org/show_bug.cgi?id=126963

        fast/canvas/webgl/webgl-compressed-texture-size-limit.html
        fails on many bots (Requested by ap on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):

2014-01-13  David Kilzer  <ddkilzer@apple.com>

        Fix typedef of DragDataRef from id back to id<NSDraggingInfo>
        <http://webkit.org/b/126958>
        <rdar://problem/14814649>

        Reviewed by Mark Rowe.

        * WebCore.exp.in: Export different symbols based on
        __has_feature(objc_protocol_qualifier_mangling) since clang
        mangles the type differently with that change.

        * platform/DragData.h:
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::DragData):
        - Revert r154493 by switching back to id<NSDraggingInfo>.

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161939.
        http://trac.webkit.org/changeset/161939
        https://bugs.webkit.org/show_bug.cgi?id=126956

        didn't work with mac, of course (Requested by thorton on
        #webkit).

        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes

        * WebCore.xcodeproj/project.pbxproj:
        Make some headers private instead of project for WK2's use.

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

        Make NetworkStateNotifier.h a private header, needed by iOS.

        * WebCore.xcodeproj/project.pbxproj:

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

        More work towards getting iOS WK1 building.

        Some more Private headers for iOS.

        * WebCore.xcodeproj/project.pbxproj:

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

        Highlighting password field then making a Sticky Note via Safari Services exposes password
        https://bugs.webkit.org/show_bug.cgi?id=126946

        Reviewed by Enrica Casucci.

        Using the Services menu has a slightly different codepath than Editor::copy() does. This
        patch duplicates the canCopy() check that Editor::copy() does.

        Testing is not possible because the Services menu is not accessible to our tests.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::stringSelectionForPasteboard):
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText):
        (WebCore::Editor::dataSelectionForPasteboard):

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Crash due to forceLostContext
        https://bugs.webkit.org/show_bug.cgi?id=126947

        Reviewed by Dean Jackson.

        Covered by webgl/conformance/textures/origin-clean-conformance.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::isContextLost): Make const.
        (WebCore::WebGLRenderingContext::platformLayer): Don't attempt to use
        a lost context.
        * html/canvas/WebGLRenderingContext.h: isContextLost should be const.

2014-01-13  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] WebCorePlatform build can sometimes fail due to missing generated headers
        https://bugs.webkit.org/show_bug.cgi?id=126911

        Reviewed by Daniel Bates.

        * PlatformGTK.cmake: Add an explicit dependency from WebCorePlatform to WebCore.

2014-01-13  Benjamin Poulain  <benjamin@webkit.org>

        Use the Selector Code Generator for resolving style
        https://bugs.webkit.org/show_bug.cgi?id=126199

        Reviewed by Ryosuke Niwa.

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

2014-01-13  Benjamin Poulain  <benjamin@webkit.org>

        Update the SelectorQuery code using compiled selector after r161196
        https://bugs.webkit.org/show_bug.cgi?id=126860

        Reviewed by Andreas Kling.

        Update tree traversal code to the current traversal functions.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithContext):

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

        Various iOS WebKit1 build fixes.

        * WebCore.xcodeproj/project.pbxproj: iOS WebKit1 needs various
        headers to be Private.

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

        Map RootInlineBox to containing region via bit+hashmap.
        <https://webkit.org/b/126917>

        The vas majority of RootInlineBox objects don't have a containing
        RenderRegion, so let's store that in a bit+hashmap configuration
        instead of having a dedicated pointer member for it.

        148 kB progression on Membuster3.

        Reviewed by Antti Koivisto.

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):

            Added m_hasContainingRegion bit.

        (WebCore::containingRegionMap):

            Global map between RootInlineBox and RenderRegion.

        (WebCore::RootInlineBox::~RootInlineBox):

            Remove self from aforementioned global map if needed.

        (WebCore::RootInlineBox::paint):

            Tweak a condition to avoid double hash lookup.

        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::clearContainingRegion):
        (WebCore::RootInlineBox::setContainingRegion):

            Store the containing region in a bit+hashmap.

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

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

        Add uint8_t specialization for WebCore::writeLittleEndian()
        https://bugs.webkit.org/show_bug.cgi?id=126924

        Reviewed by Darin Adler.

        Specialize WebCore::writeLittleEndian() for datatype uint8_t so as to avoid
        a compiler warning when right shifting a uint8_t by 8 because the result of
        such a computation is undefined.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian<uint8_t>): Added.

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

        r161638 broke the Windows build
        https://bugs.webkit.org/show_bug.cgi?id=126916

        * DerivedSources.make:

2014-01-13  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict media playback
        https://bugs.webkit.org/show_bug.cgi?id=126780

        Reviewed by Jer Noble.

        Test: media/video-concurrent-playback.html

        * WebCore.exp.in: Export functions needed by Internals.

        Add HTMLMediaSession.
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        Add a media session object to manage HTMLMediaElement restrictions.
        * html/HTMLMediaSession.cpp: Added.
        * html/HTMLMediaSession.h: Added.

        Move media restriction management to a MediaSession.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Use the media session to manage restrictions.
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        (WebCore::HTMLMediaElement::insertedInto): Ditto.
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        (WebCore::HTMLMediaElement::loadInternal): Ditto.
        (WebCore::HTMLMediaElement::loadResource): Ditto.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::autoplay): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::pause): Ditto
        (WebCore::HTMLMediaElement::pauseInternal): Ditto
        (WebCore::HTMLMediaElement::suspend): Ditto
        (WebCore::HTMLMediaElement::resume): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Tell media session playback is about to start.
        (WebCore::HTMLMediaElement::deliverNotification): Ditto.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerIsFullscreenPermitted): Ditto.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Ditto.
        (WebCore::HTMLMediaElement::pausePlayback): New, allows the media session to pause playback.
        * html/HTMLMediaElement.h:

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen): Use the media session to manage restrictions.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::beginInterruption): Add logging.
        (WebCore::MediaSession::endInterruption): Ditto.
        (WebCore::MediaSession::pauseSession): New, allows the session manager to pause playback.
        * platform/audio/MediaSession.h:

        Add per-media type restrictions.
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Initialize restrictions.
        (WebCore::MediaSessionManager::addRestriction): New.
        (WebCore::MediaSessionManager::removeRestriction): New.
        (WebCore::MediaSessionManager::restrictions): New.
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): New. If only one session if the same
            type is allowed to play, pause all others.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h: Added.
        * platform/audio/ios/MediaSessionManagerIOS.mm: Added.
        (WebCore::MediaSessionManager::sharedManager):
        (WebCore::m_objcObserver):
        (-[WebAVAudioSessionHelper initWithCallback:]):
        (-[WebAVAudioSessionHelper dealloc]):
        (-[WebAVAudioSessionHelper interruption:]):

        * platform/audio/mac/AudioDestinationMac.h: Add pausePlayback.

        Allow tests to set media session restrictions.
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-13  Alexey Proskuryakov  <ap@apple.com>

        Fix the build more.

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

2014-01-13  Alexey Proskuryakov  <ap@apple.com>

        Fix the build.

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

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

        Fix copy of SystemMemory.h in iOS WebKit build.
        
        Move SystemMemory.h from platform/SystemMemory.h to platform/ios/SystemMemory.h.
        Add it to the project file.
        Make it a Private header.
        Add PLATFORM(IOS) #idfefs around its contents.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/SystemMemory.h: Renamed from Source/WebCore/platform/SystemMemory.h.

2014-01-13  Youenn Fablet  <youennf@gmail.com>

        Dispatch a progress event before dispatching abort, error or timeout event
        https://bugs.webkit.org/show_bug.cgi?id=126575

        Reviewed by Alexey Proskuryakov.

        Added sending of progress event after readystatechange event (switching to DONE state) in case of abort, error or timeout. 
        Fixed assertions in XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchErrorEvents): added sending of progress event before the specific error event
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): fixed assertion
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent): fixed assertion

2014-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add SoupNetworkSession class to wrap a SoupSession
        https://bugs.webkit.org/show_bug.cgi?id=126813

        Reviewed by Gustavo Noronha Silva.

        Add SoupNetworkSession class that wraps a SoupSession and move all
        the code related to the SoupSession from ResourceHandle to
        SoupNetworkSession, including the static methods to get the
        default session and create testing and private sessions.

        * GNUmakefile.list.am: Add new files to compilation.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * platform/network/NetworkStorageSession.h: Use SoupNetworkSession
        instead of SoupSession.
        * platform/network/ResourceHandle.h:
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieJarForSession): Use SoupNetworkSession to get the
        SoupSession.
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::DNSResolveQueue::platformResolve): Ditto.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Use
        SoupNetworkSession instead of SoupSession.
        (WebCore::NetworkStorageSession::~NetworkStorageSession):
        (WebCore::NetworkStorageSession::defaultStorageSession): Create a
        NetworkStorageSession with a NULL SoupNetworkSession which means
        that the default SoupNetworkSession will be used.
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession):
        Call SoupNetworkSession::createPrivateBrowsingSession() to create
        the private session.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Call
        SoupNetworkSession::createTestingSession() to create the testing
        session.
        (WebCore::NetworkStorageSession::soupNetworkSession): Return the
        SoupNetworkSession or the default one.
        (WebCore::NetworkStorageSession::setSoupNetworkSession): Set a new
        SoupNetworkSession.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sessionFromContext): Use SoupNetworkSession to get the
        SoupSession.
        (WebCore::ResourceHandleInternal::soupSession): Simply call
        sessionFromContext(), since ensureSessionIsInitialized() is no
        longer needed, because the SoupSession are now initialized in the
        SoupNetworkSession constructor.
        (WebCore::ResourceHandle::didStartRequest): Function to notify the
        ResourceHandle that current request has just started for web timing.
        * platform/network/soup/SoupNetworkSession.cpp: Added.
        (WebCore::soupLogPrinter): Logger callback.
        (WebCore::SoupNetworkSession::defaultSession): Return a reference
        to the default SoupNetworkSession.
        (WebCore::SoupNetworkSession::createPrivateBrowsingSession):
        Create a new private session.
        (WebCore::SoupNetworkSession::createTestingSession): Create a new
        testing session.
        (WebCore::SoupNetworkSession::createForSoupSession): Create a new
        SoupNetworkSession for the given SoupSession.
        (WebCore::authenticateCallback): Callback emitted by the
        SoupSession when the request needs authentication.
        (WebCore::requestStartedCallback): Callback emitted by the
        SoupSession when as request has just started.
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::~SoupNetworkSession):
        (WebCore::SoupNetworkSession::setupLogger): Helper private
        function to setup the logger.
        (WebCore::SoupNetworkSession::setCookieJar): Set a new CookieJar
        in the session replacing the existing one.
        (WebCore::SoupNetworkSession::cookieJar): Return the current
        CookieJar of the session.
        (WebCore::SoupNetworkSession::setCache): Set a disk cache.
        (WebCore::SoupNetworkSession::cache): Return the current disk cache.
        (WebCore::SoupNetworkSession::setSSLPolicy): Set the SSL policy.
        (WebCore::SoupNetworkSession::sslPolicy): Get the current SSL policy.
        (WebCore::SoupNetworkSession::setHTTPProxy): Set the HTTP proxy.
        (WebCore::SoupNetworkSession::httpProxy): Get the current HTTP proxy.
        (WebCore::SoupNetworkSession::setupHTTPProxyFromEnvironment): Set
        the HTTP proxy using the environment variables.
        (WebCore::buildAcceptLanguages): Helper function build the accept
        language string in the format expected by soup (RFC 2616).
        (WebCore::SoupNetworkSession::setAcceptLanguages): Set the accept
        language for the given list of languages.
        * platform/network/soup/SoupNetworkSession.h: Added.
        (WebCore::SoupNetworkSession::soupSession): Return the SoupSession.

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Error messages should use source code labels, not internal mangled symbols.
        https://bugs.webkit.org/show_bug.cgi?id=126832

        Reviewed by Dean Jackson.

        Revised fast/canvas/webgl/glsl-conformance.html.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo): Correct missing 'break'.
        (WebCore::ANGLEWebKitBridge::compileShaderSource): Call 'getSymbolInfo'
        for SH_VARYINGS.
        * platform/graphics/GraphicsContext3D.h: Add new declarations.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp: Add case
        for SHADER_SYMBOL_TYPE_VARYING. This is a no-op to match existing
        behavior.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader): Demangle log output.
        (WebCore::GraphicsContext3D::mappedSymbolName): Added.
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Added.
        (WebCore::GraphicsContext3D::getProgramInfoLog): Demangle log output.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Demangle log output.

2014-01-13  David Kilzer  <ddkilzer@apple.com>

        [iOS] Include RenderElement.h to fix BaseChooserOnlyDateAndTimeInputType.cpp

        Fixes the following build failure:

            Undefined symbols for architecture x86_64:
              "__ZNK7WebCore13ContainerNode8rendererEv", referenced from:
                  __ZN7WebCore35BaseChooserOnlyDateAndTimeInputType22handleDOMActivateEventEPNS_5EventE in BaseChooserOnlyDateAndTimeInputType.o

        * html/BaseChooserOnlyDateAndTimeInputType.cpp: Include
        RenderElement.h.

2014-01-13  Andy Estes  <aestes@apple.com>

        [iOS] Build Fix: copy iOS-specific generated headers

        * Configurations/WebCore.xcconfig: Excluded DOMTouch* and DOMGesture* headers on Mac.
        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Zalan Bujtas  <zalan@apple.com>

        Enable SUBPIXEL_LAYOUT on Mac
        <https://webkit.org/b/126283>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-01-13  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        REGRESSION(r161715): Use of uninitialized value $ENV{"PLATFORM_NAME"}
        https://bugs.webkit.org/show_bug.cgi?id=126873

        Reviewed by Csaba Osztrogonác.

        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

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

        CTTE: Autoscroll renderer is always a RenderBox.
        <https://webkit.org/b/126884>

        Reviewed by Antti Koivisto.

        * page/EventHandler.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::autoscrollRenderer):

            Make autoscrollRenderer() return a RenderBox*.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):

            Only check if the autoscroll renderer is being torn down
            in RenderBox::willBeDestroyed() since it's not relevant for
            other renderer types.

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

        Text should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115640

        Reviewed by Csaba Osztrogonác.

        http://dom.spec.whatwg.org/#interface-text
        Make Text constructable so that one can do "new Text('abc')"
        instead of "document.createTexte('abc')".

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/cdd5a914daf3862379a5ce4596149bd690d0fa08

        Test: fast/dom/Text/text-constructor.html

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

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

        Avoid unnecessary copies of AccessibilityObject::AccessibilityChildrenVector
        https://bugs.webkit.org/show_bug.cgi?id=126876

        Reviewed by Andreas Kling.

        AccessibilityObject::children() returns a reference to the Vector of that AccessibilityObject's children.
        The majority of callsites stores the return value in a temporary value instead of a reference, causing
        a copy each time. A reference to the return value should be used instead.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::selectedRadioButton):
        (WebCore::AccessibilityNodeObject::selectedTabItem):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::mathRadicandObject):
        (WebCore::AccessibilityRenderObject::mathRootIndexObject):
        (WebCore::AccessibilityRenderObject::mathNumeratorObject):
        (WebCore::AccessibilityRenderObject::mathDenominatorObject):
        (WebCore::AccessibilityRenderObject::mathUnderObject):
        (WebCore::AccessibilityRenderObject::mathOverObject):
        (WebCore::AccessibilityRenderObject::mathBaseObject):
        (WebCore::AccessibilityRenderObject::mathSubscriptObject):
        (WebCore::AccessibilityRenderObject::mathSuperscriptObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject):
        (WebCore::notifyChildrenSelectionChange):
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink):
        (webkitAccessibleHypertextGetNLinks):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (listObjectForSelection):
        (optionFromList):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getNChildrenForTable):
        (getChildForTable):
        (webkitAccessibleRefChild):
        (getIndexInParentForCellInRow):
        (getInterfaceMaskFromObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

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

        Comment should be consructable.
        https://bugs.webkit.org/show_bug.cgi?id=115642

        Reviewed by Andreas Kling.

        http://dom.spec.whatwg.org/#comment
        This allows us to do `new Comment('abc')` instead of `document.createComment('abc')`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/06e4a37f6b11348606de5405edac1ada97499d2a%5E%21

        Test: fast/dom/Comment/comment-constructor.html

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

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161808.
        http://trac.webkit.org/changeset/161808
        https://bugs.webkit.org/show_bug.cgi?id=126874

        This patch make several files to be always regenerated on
        every make (Requested by KaL on #webkit).

        * GNUmakefile.am:
        * bindings/gobject/GNUmakefile.am:

2014-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161843.
        http://trac.webkit.org/changeset/161843
        https://bugs.webkit.org/show_bug.cgi?id=126871

        Caused CSS custom filter tests to assert (Requested by smfr on
        #webkit).

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderInfoLog):

2014-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161840.
        http://trac.webkit.org/changeset/161840
        https://bugs.webkit.org/show_bug.cgi?id=126870

        Caused jsscore and layout test failures (Requested by smfr on
        #webkit).

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        (WebCore::parseHTMLNonNegativeInteger):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::createSearchRegexSource):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty):
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash):
        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        (WebCore::Color::Color):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):
        * xml/XPathNodeSet.h:

2014-01-12  Jinwoo Song  <jinwoo7.song@samsung.com>

        Fix build warnings by unused parameter
        https://bugs.webkit.org/show_bug.cgi?id=126867

        Reviewed by Gyuyoung Kim.

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp: 
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion): Remove unused parameter 'operation'.

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

        Unreviewed build fix for WinCairo.

        * WebCore.vcxproj/WebCoreCairo.props: Add missing include path
        to locate SelectorCompiler.h.

2014-01-12  Maciej Stachowiak  <mjs@apple.com>

        Fix iOS build breakage from http://trac.webkit.org/changeset/161844
        https://bugs.webkit.org/show_bug.cgi?id=126866

        Reviewed by Simon Fraser.

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::cursorMovementIterator): Use initializeIterator instead of createSharedIterator,
        which does not exist.

2014-01-12  Darin Adler  <darin@apple.com>

        Add PLATFORM(COCOA) and USE(FOUNDATION)
        https://bugs.webkit.org/show_bug.cgi?id=126859

        Reviewed by Anders Carlsson.

        * config.h: Use PLATFORM(COCOA) instead of PLATFORM(MAC) || PLATFORM(IOS)
        to set USE(FILE_LOCK). Would be nice to use OS(DARWIN), but that would be
        a change in behavior that might be incorrect. Removed bogus comments in
        the USE(NEW_THEME) setting code. Removed redundant code to set USE(CA),
        which exactly duplicates code that already exists in Platform.h.

2014-01-12  Darin Adler  <darin@apple.com>

        Add deprecatedCharacters as a synonym for characters and convert most call sites
        https://bugs.webkit.org/show_bug.cgi?id=126858

        Reviewed by Anders Carlsson.

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPathLexer::IDBKeyPathLexer):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSubprotocol):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setExtensions):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasMisspelling):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::write):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        * dom/Document.cpp:
        (WebCore::Document::parseQualifiedName):
        * editing/Editor.cpp:
        (WebCore::Editor::misspelledWordAtCaretOrRange):
        (WebCore::Editor::misspelledSelectionString):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        * editing/TextCheckingHelper.h:
        (WebCore::TextCheckingParagraph::textDeprecatedCharacters):
        * editing/TextIterator.cpp:
        (WebCore::collapsedSpaceLength):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        (WebCore::containsKanaLetters):
        (WebCore::SearchBuffer::SearchBuffer):
        * editing/TextIterator.h:
        (WebCore::TextIterator::characters):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter):
        * editing/VisibleUnits.cpp:
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeSpaces):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::isSourceListNone):
        (WebCore::CSPSourceList::parse):
        (WebCore::NonceDirective::parse):
        (WebCore::MediaListDirective::parse):
        (WebCore::CSPDirectiveList::parse):
        (WebCore::CSPDirectiveList::parseReportURI):
        (WebCore::CSPDirectiveList::parseReflectedXSS):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        (WebCore::newLengthArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedURL):
        (WebCore::visitedLinkHash):
        * platform/SharedBuffer.cpp:
        (WebCore::utf8Buffer):
        * platform/URL.cpp:
        (WebCore::URL::port):
        (WebCore::encodeHostnames):
        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::rightClipToCharacterBuffer):
        (WebCore::rightClipToWordBuffer):
        (WebCore::leftTruncateToBuffer):
        (WebCore::truncateString):
        (WebCore::StringTruncator::width):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindBlob):
        (WebCore::SQLiteStatement::bindText):
        * platform/text/DecodeEscapeSequences.h:
        (WebCore::decodeEscapeSequences):
        * platform/text/TextBreakIterator.cpp:
        (WebCore::numGraphemeClusters):
        (WebCore::numCharactersInGraphemeClusters):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIteratorWithRules):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::encode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderText.cpp:
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::computeCanUseSimpleFontCodePath):
        * rendering/RenderText.h:
        (WebCore::RenderText::characters):
        (WebCore::RenderText::deprecatedCharacters):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::tryHyphenating):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::processRenderSVGInlineText):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::measureCharacterRange):
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::setValueAsString):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::parsePoint):
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGGlyphMap.h:
        (WebCore::SVGGlyphMap::addGlyph):
        (WebCore::SVGGlyphMap::collectGlyphsForString):
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::parseAttribute):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse):
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseNumberFromString):
        (WebCore::parseNumberOptionalNumber):
        (WebCore::parseRect):
        (WebCore::pointsListFromSVGData):
        (WebCore::parseGlyphName):
        (WebCore::parseKerningUnicodeString):
        (WebCore::parseDelimitedString):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parse):
        * svg/SVGStringList.cpp:
        (WebCore::SVGStringList::parse):
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::parse):
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformType):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::parseAttribute):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTUnicodeSort.cpp:
        (WebCore::xsltUnicodeSortFunction):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::parseAttributes):
        Use deprecatedCharacters instead of characters.

2014-01-12  Darin Adler  <darin@apple.com>

        Add type checking to isEqual methods
        https://bugs.webkit.org/show_bug.cgi?id=126862

        Reviewed by Anders Carlsson.

        * page/ios/WebEventRegion.mm:
        (-[WebEventRegion isEqual:]): Add type checking on the argument.
        Add a FIXME about the lack of a hash method override. Formatted to match
        the usual WebKit coding style.

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.

        * platform/text/icu/UTextProviderLatin1.cpp:
        (WebCore::uTextLatin1Clone):
        (WebCore::uTextLatin1Extract):
        (WebCore::uTextLatin1MapNativeIndexToUTF16):

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Remove all uses of AtomicallyInitializedStatic from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126861

        Reviewed by Darin Adler.

        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
        (WebCore::transactions):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::originMap):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::encodingRegistryMutex):
        (WebCore::newTextCodec):
        (WebCore::atomicCanonicalTextEncodingName):
        (WebCore::dumpTextEncodingNameMap):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::DefaultSharedWorkerRepository::instance):

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Use an std::atomic<uint32_t> when computing IDBDatabase transaction IDs
        https://bugs.webkit.org/show_bug.cgi?id=126853

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::nextTransactionId):

2014-01-12  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Darin Adler.

        - Do some initial cleanup before adding complete Latin-1 support.

        * platform/text/TextBreakIterator.cpp:
        Remove non-ICU acquireLineBreakIterator() implementation.

        * platform/text/TextBreakIterator.h:
        - Changes acquireLineBreakIterator() to take a StringView.

        * platform/text/TextBreakIteratorICU.cpp:
        - Refactor iterator initialization and setting of text on the iterator.
        - Add support for using a Latin-1 provider (this is not currently used).

        * platform/text/icu/UTextProviderLatin1.cpp:
        * platform/text/icu/UTextProviderLatin1.h:
        - Add back non-context aware Latin-1 provider (from r129662).
        - Rename context aware provider.

        * platform/text/icu/UTextProviderUTF16.cpp:
        * platform/text/icu/UTextProviderUTF16.h:
        - Rename context aware provider.

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

        [WebGL] Error messages should use source code labels, not internal mangled symbols.
        https://bugs.webkit.org/show_bug.cgi?id=126832

        Reviewed by Dean Jackson.

        Revised fast/canvas/webgl/glsl-conformance.html.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo): Correct missing 'break'.
        (WebCore::ANGLEWebKitBridge::compileShaderSource): Call 'getSymbolInfo'
        for SH_VARYINGS.
        * platform/graphics/GraphicsContext3D.h: Add new declarations.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader): Demangle log output.
        (WebCore::GraphicsContext3D::mappedSymbolName): Added.
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Added.
        (WebCore::GraphicsContext3D::getProgramInfoLog): Demangle log output.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Demangle log output.

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

        Try to fix the Windows build after r161839.

        * WebCore.vcxproj/WebCoreCommon.props:

2014-01-12  Darin Adler  <darin@apple.com>

        Reduce use of String::characters
        https://bugs.webkit.org/show_bug.cgi?id=126854

        Reviewed by Sam Weinig.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        Get rid of unneeded code to turn a WTF::String into an NSString, since that's
        built into the WTF::String class.

        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace): Use WTF::String's [] operator instead of
        an explicit call to the characters function. Small performance cost.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Ditto.

        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph): Use reverseFind instead of writing our own loop.
        (WebCore::endOfParagraph): Use find instead of writing our own loop.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces): Use characters16 instead of
        characters since we have already checked is8Bit.
        (WebCore::parseHTMLNonNegativeInteger): Ditto. Replace the length check with
        a check of isNull since a zero length string could be 8 bit, but it's not
        safe to call is8Bit on a null WTF::String. (That should probably be fixed.)

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::createSearchRegexSource): Use StringBuilder
        instead of String in code that builds up a string one character at a time.
        The old way was ridiculously slow because it allocated a new string for every
        character; the new way still isn't all that efficient, but it's better. Also
        changed to use strchr instead of WTF::String::find for special characters.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters): Use WTF::String's
        [] operator instead of an explicit call to the characters function.
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty): Ditto.
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty): Ditto.
        * platform/Length.cpp:
        (WebCore::newCoordsArray): Ditto.

        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash): Use characters16 instead of characters since
        we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor): Use characters16 since we already checked is8Bit.
        (WebCore::Color::Color): Ditto.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Use characters16 instead of characters since
        we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName): Use characters16 instead of
        characters since we already checked is8Bit. Also use isEmpty instead of !length.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun): Use characters16 instead of characters
        since we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width): Check for zero length instead of checking
        for null characters.

        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache): Rewrite ligatures
        for loop and give local variables a better name. Construct the substring with
        the substring function. Still a really inefficient approach -- allocating a new
        string for every character is absurdly expensive.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate): Use String instead of StringBuilder. Still
        not all that efficient, but better than before. Use substring to construct the
        substring.

        * xml/XPathNodeSet.h: Added begin and end functions so we can use a C++11 for
        loop with this class.

2014-01-12  Benjamin Poulain  <benjamin@webkit.org>

        Use the Selector Code Generator for matching in SelectorQuery
        https://bugs.webkit.org/show_bug.cgi?id=126185

        Reviewed by Ryosuke Niwa.

        Compile selectors on demand and use the generated binary to perform
        element matching in SelectorQuery.

        Tests: fast/selectors/querySelector-long-adjacent-backtracking.html
               fast/selectors/querySelector-long-child-backtracking.html
               fast/selectors/querySelector-mixed-child-adjacent-backtracking.html
               fast/selectors/querySelector-multiple-simple-child-backtracking.html
               fast/selectors/querySelector-simple-adjacent-backtracking.html
               fast/selectors/querySelector-simple-child-backtracking.html

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithContext):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Simplify creation of XMLHttpRequestStaticData
        https://bugs.webkit.org/show_bug.cgi?id=126852

        Reviewed by Sam Weinig.

        Add a staticData() getter that does the initialization and get rid of the explicit
        calls to initializeXMLHttpRequestStaticData().

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):
        (WebCore::staticData):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::isAllowedHTTPHeader):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Final WebCore link error: update a symbol in WebCoreSystemInterfaceIOS.mm.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Use std::call_once instead of AtomicallyInitializedStatic in DatabaseBackendBase
        https://bugs.webkit.org/show_bug.cgi?id=126851

        Reviewed by Sam Weinig.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::guidForOriginAndName):
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        (WebCore::DatabaseBackendBase::closeDatabase):
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::getCachedVersion):
        (WebCore::DatabaseBackendBase::setCachedVersion):

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

        Try to fix the Windows build after r161830.

        * platform/network/NetworkStateNotifier.h:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Don't build JSTouch* and JSGesture* files on Mac.

        * Configurations/WebCore.xcconfig:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Clean up NetworkStateNotifier class
        https://bugs.webkit.org/show_bug.cgi?id=126850

        Reviewed by Andreas Kling.

        Use std::call_once instead of AtomicallyInitializedStatic and a std::function
        instead of a custom function pointer typedef.

        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::networkStateNotifier):
        (WebCore::NetworkStateNotifier::addNetworkStateChangeListener):
        (WebCore::NetworkStateNotifier::notifyNetworkStateChange):
        * platform/network/NetworkStateNotifier.h:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add implementations of Frame::viewportArguments() and
        Frame::setViewportArguments().

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportArguments):
        (WebCore::Frame::setViewportArguments):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add JSWebKitPlaybackTargetAvailabilityEvent.* to the project.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Stub out some DragImage functions for iOS.
        
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/DragImageIOS.mm: Added.
        (WebCore::dragImageSize):
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        We need DragImage.cpp code even when ENABLE_DRAG_SUPPORT is
        not defined, because these are actually generic snapshotting
        functions.

        * platform/DragImage.cpp:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix linker errors: add DateTimeFormat.cpp to the project,
        and make DateInputType::DateInputType not inline.

        * WebCore.xcodeproj/project.pbxproj:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::DateInputType):
        * platform/DragImage.cpp:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix a bunch of linker errors related to exported functions.
        I removed some iOS symbols from the .exp.in file; we may have
        to add some back.

        * WebCore.exp.in:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add generated JSTouch* and JSGestureEvent.* files to the project.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        Move implementation of AuthenticationChallenge::setAuthenticationClient() to source file for USE(CFNETWORK)
        <http://webkit.org/b/126848>

        Reviewed by Simon Fraser.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::setAuthenticationClient):
        Move implementation to here...
        * platform/network/cf/AuthenticationChallenge.h: ...from here.
        Remove duplicate header definitions inside USE(CFNETWORK).

2014-01-12  Sam Weinig  <sam@webkit.org>

        Fix windows.

        * WebCore.vcxproj/WebCore.vcxproj:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Replace more uses of AtomicallyInitializedStatic with std::call_once
        https://bugs.webkit.org/show_bug.cgi?id=126847

        Reviewed by Sam Weinig.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::shared):
        (WebCore::registryMutex):
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoAlgorithmRegistry.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
        * workers/WorkerThread.cpp:
        (WebCore::threadSetMutex):
        (WebCore::workerThreads):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):

2014-01-11  Sam Weinig  <sam@webkit.org>

        Split ICU UText providers out into their own files
        https://bugs.webkit.org/show_bug.cgi?id=126834

        Reviewed by Anders Carlsson.

        Moves the implementation of our custom UText providers out into
        their own files.
        - UTextProviderLatin1.h/cpp contains the Latin-1 provider.
        - UTextProviderUTF16.h/cpp contains the UTF-16 provider.
        - UTextProvider.h/cpp contains code common to all the providers.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/TextAllInOne.cpp:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator):
        (WebCore::wordBreakIterator):
        (WebCore::acquireLineBreakIterator):
        (WebCore::sentenceBreakIterator):
        (WebCore::setUpIteratorWithRules):
        * platform/text/icu: Added.
        * platform/text/icu/UTextProvider.cpp: Added.
        (WebCore::fixPointer):
        (WebCore::uTextCloneImpl):
        * platform/text/icu/UTextProvider.h: Added.
        (WebCore::uTextProviderContext):
        (WebCore::uTextInitialize):
        (WebCore::uTextAccessPinIndex):
        (WebCore::uTextAccessInChunkOrOutOfRange):
        * platform/text/icu/UTextProviderLatin1.cpp: Added.
        * platform/text/icu/UTextProviderLatin1.h: Added.
        * platform/text/icu/UTextProviderUTF16.cpp: Added.
        * platform/text/icu/UTextProviderUTF16.h: Added.

2014-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix some CoreVideo linker errors on iOS by softlinking with more CoreVideo
        symbols.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

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

        REGRESSION(r160806): line-height is not applied when only present in :link style.
        <http://webkit.org/b/126839>
        <rdar://problem/15799899>

        Reviewed by Antti Koivisto.

        Test: fast/css/line-height-link-style.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::Property::apply):

            Use the CSSValue for SelectorChecker::MatchLink when applying
            style inside a link.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix link errors for iOS: Part 3

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.
        * WebCore.xcodeproj/project.pbxproj:
        - Add missing references to AuthenticationCF.cpp and
          CookieJarCFNet.cpp.

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Remove unsafe uses of AtomicallyInitializedStatic
        https://bugs.webkit.org/show_bug.cgi?id=126838

        Reviewed by Andreas Kling.

        AtomicStrings are per thread so any static initialization of them is potentially dangerous
        unless it's certain that they're only ever used from the same thread.
        
        This goes against using them with AtomicallyInitializedStatic, so just create AtomicStrings where needed.
        (This is highly unlikely to have any real negative performance impact since these two functions
        aren't called very frequently).

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix link errors for iOS: Part 2

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] First of many iOS fixes to WebCore.exp.in

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.
        - Upstream some changes to iOS-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Don't link to Mac-only frameworks when building iOS
        <http://webkit.org/b/126841>

        * Configurations/WebCore.xcconfig:
        (OTHER_LDFLAGS_iphonesimulator): Remove common frameworks that
        are already in the Xcode project.
        (OTHER_LDFLAGS_macosx): Add Mac-only frameworks removed from the
        Xcode project.
        * Configurations/WebCoreTestShim.xcconfig:
        (OTHER_LDFLAGS[sdk=macosx*]): Link to Carbon.framework for Mac
        since it was removed from the Xcode project.
        * WebCore.xcodeproj/project.pbxproj: Remove Mac-only frameworks.

2014-01-12  Tobias Mueller  <tobiasmue@gnome.org>

        --disable-dependency-tracking causes build failure due to missing directories
        https://bugs.webkit.org/show_bug.cgi?id=94488
        
        Reviewed by Gustavo Noronha Silva.

        Ensure output directory existing
        before generating DerivedSources. This allows for
        --disable-dependency-tracking to be run.

        * GNUmakefile.am: Added new target DerivedSources/ANGLE which is a directory to be created
        * bindings/gobject/GNUmakefile.am: Added new target DerivedSources/webkitdom which is a directory to be created

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] WebFontCache is Mac-only

        * WebCore.exp.in: Move export to Mac-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Upstream WebEventRegion.{h|mm} to fix the build

        * WebCore.xcodeproj/project.pbxproj: Add to project.
        * page/ios/WebEventRegion.h: Added.
        * page/ios/WebEventRegion.mm: Added.
        (-[WebEventRegion initWithPoints::::]):
        (-[WebEventRegion copyWithZone:]):
        (-[WebEventRegion description]):
        (-[WebEventRegion hitTest:]):
        (-[WebEventRegion isEqual:]):
        (-[WebEventRegion quad]):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Use std::call_once instead of AtomicallyInitializedStatic when creating a HTTP header set
        https://bugs.webkit.org/show_bug.cgi?id=126837

        Reviewed by Sam Weinig.

        Use std::call_once when constructing the HTTPHeaderSet.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlResponseHeaderWhitelist):

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

        [iOS] Do not link to ApplicationServices.framework for iOS
        <http://webkit.org/b/126835>

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:
        (OTHER_LDFLAGS_macosx): Add -framework ApplicationServices.
        * WebCore.xcodeproj/project.pbxproj: Remove reference to
        ApplicationServices.framework.

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

        [iOS] Build fix for StyleResolver.cpp

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setCompositionFillColor): Added.

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

        [iOS] Fix build of RenderLayerCompositor::registerAllViewportConstrainedLayers()

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        Fix use of std::make_unique<>() and add an adoptPtr() call.

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

        [Mac] [Windows] Stop scheduling network requests in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126789
        <rdar://problem/15114727>

        Reviewed by Sam Weinig.

        We'll just send all requests to CFNetwork now, along with associated priorities.

        * WebCore.exp.in: WebKitSystemInterface functions are changing to support priorities
        for more than just pipelining.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/ResourceHandle.h: For syncronous requests, make it so that they
        don't count against HTTP connection limit, to avoid the possibility of hanging the process.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):
        (WebCore::initializeHTTPConnectionSettingsOnStartup):
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toPlatformRequestPriority):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

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

        [iOS] Fix build failure in WebCore::findEndWordBoundary()

        Filed Bug 126830 for the proper fix:
        <http://webkit.org/b/126830>

        * editing/VisibleUnits.cpp:
        (WebCore::endWordBoundary): Switch back to using
        WebCore::findWordBoundary() on iOS.

        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findEndWordBoundary): Add FIXME for iOS implementation
        that doesn't use NSAttributedString.

2014-01-11  Andy Estes  <aestes@apple.com>

        [iOS] Move text autosizing code from RenderBlock to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=126829

        Reviewed by Sam Weinig.

        Some newly-upstreamed iOS text autosizing code needs to move to
        RenderBlockFlow in order to build.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::isVisibleRenderText):
        (WebCore::resizeTextPermitted):
        (WebCore::RenderBlockFlow::immediateLineCount):
        (WebCore::isNonBlocksOrNonFixedHeightListItems):
        (WebCore::oneLineTextMultiplier):
        (WebCore::textMultiplier):
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::resetComputedFontSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustComputedFontSizesOnBlocks):
        (WebCore::RenderObject::resetTextAutosizing):

2014-01-11  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the build

        Only call CGContextFlush() when building for OS X < 10.9.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::deallocate):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        InspectorAgentRegistry should use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=126826

        Reviewed by Sam Weinig.

        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerRuntimeAgent.h:

2014-01-11  Sam Weinig  <sam@webkit.org>

        Extract the FormatConverter class out of GraphicsContext3D.cpp and into its own file
        https://bugs.webkit.org/show_bug.cgi?id=126820

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FormatConverter.cpp: Copied from Source/WebCore/platform/graphics/GraphicsContext3D.cpp.
        (WebCore::convertFloatToHalfFloat):
        (WebCore::FormatConverter::convert):
        * platform/graphics/FormatConverter.h: Copied from Source/WebCore/platform/graphics/GraphicsContext3D.cpp.
        (WebCore::FormatConverter::FormatConverter):
        (WebCore::FormatConverter::success):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        (WebCore::GraphicsContext3D::computeImageSizeInBytes):
        (WebCore::GraphicsContext3D::packImageData):
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::extractTextureData):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::hasAlpha):
        (WebCore::GraphicsContext3D::hasColor):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix updateScrollingLayerWithClient() for iOS.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::updateScrollingLayerWithClient):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Unfork GraphicsContext::drawNativeImage for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126824

        Reviewed by Dean Jackson.

        GraphicsContext::drawNativeImage had a different signature for iOS,
        which required #ifdefs at all the call sites. Unfork by passing the "scale"
        parameter everywhere (it's only used on iOS).

        * WebCore.exp.in:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/ios/IconIOS.mm:
        (WebCore::Icon::paint):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Work around USE(CFNETWORK) build failure on iOS.

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

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix LegacyWebArchive.cpp:567:91: error: calling 'utf8' with incomplete return type 'WTF::CString'
        
        * loader/archive/cf/LegacyWebArchive.cpp:

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

        [iOS] Fix the easy half of the build errors in RenderBlock.cpp

        * rendering/RenderBlock.cpp:
        (WebCore::isNonBlocksOrNonFixedHeightListItems):
        (WebCore::oneLineTextMultiplier):
        (WebCore::textMultiplier):
        (WebCore::RenderBlock::adjustComputedFontSizes):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Change touch-related headers to include WebKitAdditions headers,
        which have been renamed to have IOS suffixes.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ios/TouchConstructors.cpp:
        * dom/Touch.h:
        * dom/TouchEvent.h:
        * dom/TouchList.h:
        * dom/ios/TouchEvents.cpp:

2014-01-11  Anders Carlsson  <andersca@apple.com>

        ScriptDebugServer should use a separate member function for its timer handler
        https://bugs.webkit.org/show_bug.cgi?id=126819

        Reviewed by Sam Weinig.

        It's weird to have subclasses override a timer handler and sometimes invoke 
        the timer handler directly so make it a separate member function instead.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsTimerFired):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::start):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Simplify Timer and DeferrableOneShotTimer using std::function
        https://bugs.webkit.org/show_bug.cgi?id=126816

        Reviewed by Sam Weinig.

        * platform/Timer.h:
        (WebCore::Timer::Timer):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        CTTE Timer and DeferrableOneShotTimer
        https://bugs.webkit.org/show_bug.cgi?id=126814

        Reviewed by Antti Koivisto.

        Add new Timer and DeferrableOneShotTimer constructors whose member function pointers
        take a reference instead of a pointer.
        Also, convert a bunch of classes over to using these new constructors.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::keyRequestTimerFired):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::resumeTimerFired):
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::taskTimerFired):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationRequestCallback::timerFired):
        * Modules/notifications/NotificationCenter.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::evictionTimerFired):
        * css/CSSImageGeneratorValue.h:
        * dom/Document.cpp:
        (WebCore::Document::visualUpdatesSuppressionTimerFired):
        (WebCore::Document::styleRecalcTimerFired):
        (WebCore::Document::optimizedStyleSheetUpdateTimerFired):
        (WebCore::Document::sharedObjectPoolClearTimerFired):
        (WebCore::Document::styleResolverThrowawayTimerFired):
        (WebCore::Document::updateFocusAppearanceTimerFired):
        (WebCore::Document::resetHiddenFocusElementTimer):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::loadEventDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::timerFired):
        * dom/GenericEventQueue.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):
        * dom/ScriptRunner.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::animationTimerFired):
        * dom/ScriptedAnimationController.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        * editing/AlternativeTextController.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * editing/FrameSelection.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::swapRendererTimerFired):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
        (WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLSourceElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::loadTimerFired):
        * html/HTMLTrackElement.h:
        * html/MediaController.cpp:
        (MediaController::asyncEventTimerFired):
        (MediaController::clearPositionTimerFired):
        (MediaController::timeupdateTimerFired):
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/MediaDocument.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        * html/parser/HTMLParserScheduler.h:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::transitionTimerFired):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::hideFullscreenControlsTimerFired):
        * html/shadow/MediaControls.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        * html/track/LoadableTextTrack.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::UpdateRegionLayoutTask::UpdateRegionLayoutTask):
        (WebCore::UpdateRegionLayoutTask::timerFired):
        (WebCore::ChangeRegionOversetTask::ChangeRegionOversetTask):
        (WebCore::ChangeRegionOversetTask::timerFired):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::RevalidateStyleAttributeTask):
        (WebCore::RevalidateStyleAttributeTask::timerFired):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::InspectorBackendDispatchTask):
        (WebCore::InspectorBackendDispatchTask::timerFired):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkTimerFired):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::timerFired):
        * loader/ImageLoader.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::linkLoadTimerFired):
        (WebCore::LinkLoader::linkLoadingErrorTimerFired):
        * loader/LinkLoader.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::timerFired):
        * loader/NavigationScheduler.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:
        (WebCore::PingLoader::timeoutTimerFired):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::requestTimerFired):
        * loader/ResourceLoadScheduler.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::decodedDataDeletionTimerFired):
        (WebCore::CachedResource::CachedResourceCallback::timerFired):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::garbageCollectDocumentResourcesTimerFired):
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncTimerFired):
        * loader/icon/IconDatabase.h:
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/AutoscrollController.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::timerFired):
        * page/CaptionUserPreferences.h:
        * page/DeviceController.cpp:
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::cursorUpdateTimerFired):
        (WebCore::EventHandler::autoHideCursorTimerFired):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::hoverTimerFired):
        * page/EventHandler.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::connectTimerFired):
        * page/EventSource.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::deferredRepaintTimerFired):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::postLayoutTimerFired):
        * page/FrameView.h:
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::throttleHysteresisTimerFired):
        * page/PageThrottler.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        * page/animation/AnimationControllerPrivate.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollTimerFired):
        * platform/Scrollbar.h:
        * platform/Timer.h:
        (WebCore::Timer::Timer):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::reloadTimerFired):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/LayerPool.mm:
        (WebCore::LayerPool::pruneTimerFired):
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::timerFired):
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        (WebCore::SubimageCacheWithTimer::invalidateCacheTimerFired):
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):
        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::timerFired):
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::failureTimerFired):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::networkStateChangeTimerFired):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        * rendering/ImageQualityController.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::timerFired):
        * rendering/RenderButton.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::layerFlushTimerFired):
        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMarquee.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::regionLayoutUpdateEventTimerFired):
        (WebCore::RenderNamedFlowThread::regionOversetChangeEventTimerFired):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::animationTimerFired):
        * rendering/RenderProgress.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        #ifdef out the contents of Touch* files for iOS.
        
        * dom/Touch.h:
        * dom/TouchEvent.h:
        * dom/TouchList.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        No need to include <ApplicationServices/ApplicationServices.h> in
        the header. Can use <CoreGraphics/CoreGraphics.h> in the .cpp file.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix DOM headers: TARGET_OS_EMBEDDED -> TARGET_OS_IPHONE
        and a drive-by cleanup of DOMUIKitExtensions.mm #includes.

        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMUIKitExtensions.h:
        * bindings/objc/DOMUIKitExtensions.mm:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix use of GL_HALF_FLOAT_ARB on iOS.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix build of SourceBufferPrivateAVFObjC.mm on iOS.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix use of nonexistent kCGColorSpaceSRGB on iOS.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):

2014-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some ScriptDebugServer Cleanup
        https://bugs.webkit.org/show_bug.cgi?id=126793

        Reviewed by Timothy Hatcher.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        Move the special iOS WebThread EventLoop nesting handling here.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        Remove unused headers and functions.

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

        [iOS] Add USE(IOSURFACE_CANVAS_BACKING_STORE) to fix build

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer): The 'width' and 'height'
        variables are only used by code protected by
        USE(IOSURFACE_CANVAS_BACKING_STORE).

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

        [iOS] Multisampling is not available on iOS

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build for HTMLImageElement::willRespondToMouseClickEvents()

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::willRespondToMouseClickEvents):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Fix test crashes.
        
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::~ProgressTracker):
        Comment out the call to progressTrackerDestroyed for now.

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build for RenderEmbeddedObject::canHaveChildren()

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::canHaveChildren):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tweak ProgressTrackerClient functions
        https://bugs.webkit.org/show_bug.cgi?id=126808

        Reviewed by Sam Weinig.

        Rename the three progress state related member functions since it's up to the various
        WebKit implementations to decide what to do - not everyone wants to post a notification.
        Also add an originating progress frame parameter since WebKit2 doesn't report progress for
        subframe navigation and we need to be able to keep track of that.
        
        Finally, tweak ProgressTracker::completeProgress to get rid of an unnecessary hash lookup.

        * loader/EmptyClients.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressItem::ProgressItem):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress):
        * loader/ProgressTrackerClient.h:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix COMPILE_ASSERT by updating struct SameSizeAsStyleRareInheritedData

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build of SubframeLoader.cpp

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::loadPlugin):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix Mac after r161747. One part of that is iOS specific.

        Unreviewed build fix.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::releaseExecutableMemory):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Fix GCController::releaseExecutableMemory
        https://bugs.webkit.org/show_bug.cgi?id=126805

        Reviewed by Sam Weinig and Mark Lam.

        VM::dynamicGlobalObject has since been replaced by VMEntryScope.
        Update to check entryScope instead of the dynamicGlobalObject.
        Also, make this non-iOS only.

        * bindings/js/GCController.h:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::releaseExecutableMemory):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix HTMLMediaElement.o for iOS. Unreviewed build fix.

        There is now local variable mediaElement. Just call the
        functions since they are methods on this class.

        Fix RequireUserGestureToShowPlaybackTargetPickerRestriction typos.

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

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Move progress tracking functions from FrameLoaderClient to a new ProgressTrackerClient
        https://bugs.webkit.org/show_bug.cgi?id=126801

        Reviewed by Sam Weinig.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients):
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::~ProgressTracker):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:
        * loader/ProgressTrackerClient.h: Added.
        (WebCore::ProgressTrackerClient::~ProgressTrackerClient):
        (WebCore::ProgressTrackerClient::progressTrackerDestroyed):
        (WebCore::ProgressTrackerClient::willChangeEstimatedProgress):
        (WebCore::ProgressTrackerClient::didChangeEstimatedProgress):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderObject.o for iOS. Unreviewed build fix.

        r156285 renamed firstChild() to firstChildSlow(), so update
        occurances in IOS_TEXT_AUTOSIZING code. Also account for a
        RenderObject::style reference / pointer change.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::traverseNext):
        (WebCore::includeNonFixedHeight):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MediaPlayerPrivateMediaSourceAVFObjC.o for iOS. Unreviewed build fix.

        Import CALayer, which Mac must have been getting some other way.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix TileGrid.o for iOS. Unreviewed build fix.

        Explicitly use namespace std in std::pair.

        * platform/ios/TileGrid.mm:
        (WebCore::isFartherAway):
        (WebCore::TileGrid::dropDistantTiles):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderImage.o for iOS. Unreviewed build fix.

        inlineBoxWrapper() returns an InlineElementBox type, which is an InlineBox but
        without including InlineElementBox.h, iOS didn't know what an InlineElementBox was!

        * rendering/RenderImage.cpp:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix macros in Scrollbar::supportsUpdateOnSecondaryThread()

        Fixes the following build error:

            WebCore/platform/Scrollbar.cpp:552:22: error: '__MAC_OS_X_VERSION_MIN_REQUIRED' is not defined, evaluates to 0 [-Werror,-Wundef]
            #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000 && ENABLE(ASYNC_SCROLLING)
                                 ^

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderFileUploadControl.o for iOS. Unreviewed build fix.

        WebCore::theme() returns a reference now, not a pointer.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix HTMLPlugInImageElement.o for iOS. Unreviewed build fix.

        Forgot to upstream YouTubeEmbedShadowElement.*. Do so and
        add the files to the Xcode project so they build.

        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/YouTubeEmbedShadowElement.cpp: Added.
        (WebCore::YouTubeEmbedShadowElement::create):
        (WebCore::YouTubeEmbedShadowElement::YouTubeEmbedShadowElement):
        (WebCore::YouTubeEmbedShadowElement::pluginElement):
        (WebCore::YouTubeEmbedShadowElement::shadowPseudoId):
        * html/shadow/YouTubeEmbedShadowElement.h: Added.

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Update EditorIOS.mm to switch from pointers to references

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        (WebCore::Editor::insertParagraphSeparatorInQuotedContent):
        (WebCore::styleForSelectionStart):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::writeImageToPasteboard):
        (WebCore::Editor::WebContentReader::readWebArchive):
        (WebCore::Editor::WebContentReader::readRTFD):
        (WebCore::Editor::WebContentReader::readRTF):
        (WebCore::uniqueURLWithRelativePart):
        (WebCore::Editor::WebContentReader::readPlainText):
        (WebCore::Editor::webContentFromPasteboard):
        (WebCore::Editor::createFragmentAndAddResources):
        (WebCore::Editor::createFragmentForImageResourceAndAddResource):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push InspectorAgent down into JSC, give JSC an InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=126763

        Reviewed by Timothy Hatcher.

        No new tests, no observable change in functionality.

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/agent/InspectorAgent.h: Added.
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        InspectorAgent moved to JavaScriptCore. Include forwarding header.

        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::~PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        InspectorAgent was not used by these files, remove it.

        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorAgent):
        (WebCore::InstrumentingAgents::setInspectorAgent):
        Switch to Inspector::InspectorAgent where applicable.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        Manually add InspectorAgent to the InstrumentingAgents. It is one
        of the agents that is always available in InstrumentingAgents.

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

       Add TextAutoSizing.* for iOS, and fix DeviceOrientationController creation.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * rendering/TextAutoSizing.cpp: Added.
        (WebCore::cloneRenderStyleWithState):
        (WebCore::TextAutoSizingKey::TextAutoSizingKey):
        (WebCore::TextAutoSizingKey::~TextAutoSizingKey):
        (WebCore::TextAutoSizingKey::operator=):
        (WebCore::TextAutoSizingKey::ref):
        (WebCore::TextAutoSizingKey::deref):
        (WebCore::TextAutoSizingValue::numNodes):
        (WebCore::TextAutoSizingValue::addNode):
        (WebCore::TextAutoSizingValue::adjustNodeSizes):
        (WebCore::TextAutoSizingValue::reset):
        * rendering/TextAutoSizing.h: Added.
        (WebCore::TextAutoSizingKey::doc):
        (WebCore::TextAutoSizingKey::style):
        (WebCore::TextAutoSizingKey::isValidDoc):
        (WebCore::TextAutoSizingKey::isValidStyle):
        (WebCore::TextAutoSizingKey::deletedKeyDoc):
        (WebCore::TextAutoSizingKey::deletedKeyStyle):
        (WebCore::operator==):
        (WebCore::TextAutoSizingHash::hash):
        (WebCore::TextAutoSizingHash::equal):
        (WebCore::TextAutoSizingValue::create):
        (WebCore::TextAutoSizingValue::TextAutoSizingValue):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix GraphicsLayerCA.o for iOS. Unreviewed build fix.

        Use of systemMemoryLevel was missing include of SystemMemory.h.

        * platform/graphics/ca/GraphicsLayerCA.cpp:

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

        Fix iOS build.

        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        * bindings/objc/DOMExtensions.h:
        * platform/DragImage.h:

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

        Fix iOS build.
        
        Generated DOMTouch* and DOMGesture* files need to be in the project.
        Exclude them on Mac via EXCLUDED_SOURCE_FILE_NAMES_macosx.
        
        Use TARGET_OS_IPHONE instead of TARGET_OS_EMBEDDED in DOMPrivate.h

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMPrivate.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderThemeIOS.o for iOS. Unreviewed build fix.

        Typo referring to generated name. Should be "iOS" not "IOS".

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix WebAccessibilityObjectWrapperIOS.o for iOS. Unreviewed build fix.

        The upstreamed WebAccessibilityObjectWrapperIOS.mm was out of date, e.g.
        it was using GSFonts. Just upstream a newer version of the file. Also
        explicitly namespace qualify std::pair.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (AXAttributeStringSetStyle):

2014-01-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove willRespondToTouchEvents() which was used by chromium port
        https://bugs.webkit.org/show_bug.cgi?id=126739

        Reviewed by Alexey Proskuryakov.

        willRespondToTouchEvents() was added to check if a node listens to touch events in r126945.
        However, it is not used anywhere after chromium port is removed.

        * dom/Node.cpp:
        * dom/Node.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix SystemVersionMac.o for iOS. Unreviewed build fix.

        Add missing expected function. Maybe we can avoid including
        this file entirely on iOS, there was already a FIXME.

        * platform/mac/SystemVersionMac.mm:
        (WebCore::systemMarketingVersion):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix JSDOMWindowBase.o for iOS. Unreviewed build fix.

        Add missing iOS method declarations.

        * bindings/js/JSDOMWindowBase.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix InputType.o for iOS. Unreviewed build fix.

        The RuntimeEnabledFeatures function pointer type should have a
        const qualifier, because the implementations are all const.

        * html/InputType.cpp:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MediaPlayerPrivateIOS.o for iOS. Unreviewed build fix.

        Add missing MediaPlayerProxy Objective C methods and forward declarations.

        * platform/graphics/mac/MediaPlayerProxy.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix FrameSelection.o for iOS. Unreviewed build fix.

        r160966 renamed rendererIsEditable to hasEditableStyle.

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

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix DragData.o for iOS. Unreviewed build fix.

        String m_pasteboardName is unused on iOS, so ifdef it out.

        * platform/DragData.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix FrameIOS.o for iOS. Unreviewed build fix.

        Remove stale include to file that no longer exists. It was not needed.

        * page/ios/FrameIOS.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MonthInputType.o for iOS. Unreviewed build fix.

        When ENABLE_INPUT_MULTIPLE_FIELDS_UI was removed in r150876,
        the wrong class name lingered. Fix it to be the base class.

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

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

        [iOS] Build fix: make sure WTF_PLATFORM_IOS is defined when preprocessing

        * DerivedSources.make:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

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

        Use TARGET_OS_IPHONE in this API file, and #if TARGET_OS_MAC
        for a non-iOS function.

        * bindings/objc/DOMExtensions.h:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        Clean up architectures in xcconfig files
        <http://webkit.org/b/126794>

        Reviewed by Andy Estes.

        * Configurations/Base.xcconfig:
        * Configurations/WebCore.xcconfig: Remove armv6.
        * DerivedSources.make: Remove armv6, armv7f. Sort.
        - Add new arch.

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

        Fix iOS build

        * Configurations/WebCore.xcconfig:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyValue):

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

        Fix iOS build.
        
        * html/DateTimeLocalInputType.h:
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * loader/ios/DiskImageCacheIOS.h:

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

        iOS build fix: add StyleRareInheritedData::compositionFillColor

        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MonthInputType.o for iOS. Unreviewed build fix.

        When ENABLE_INPUT_MULTIPLE_FIELDS_UI was removed in r150876, the
        BaseMonthInputType typedef was removed. However a use of it lingered.
        Changing to match the base class name.

        * html/MonthInputType.h:
        (WebCore::MonthInputType::MonthInputType):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderButton.o for iOS. Unreviewed build fix.

        Missing prototype in header for override of the layout method.

        * rendering/RenderButton.h:

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

        A couple of iOS build fixes.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix PlatformScreenIOS.mm for iOS. Unreviewed build fix.

        PlatformScreen.h removed screenVerticalDPI and screenHorizontalDPI in r132419,
        so remove the stale implementations on iOS. Also, add a notImplemented version
        of screenColorProfile, which matches Mac and is unused in WebCore for this port.

        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenColorProfile):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE FrameTree
        https://bugs.webkit.org/show_bug.cgi?id=126795

        Reviewed by Tim Horton.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::transferChild):
        (WebCore::FrameTree::appendChild):
        (WebCore::FrameTree::actuallyAppendChild):
        (WebCore::FrameTree::uniqueChildName):
        (WebCore::FrameTree::scopedChild):
        (WebCore::FrameTree::scopedChildCount):
        (WebCore::FrameTree::child):
        (WebCore::FrameTree::find):
        (WebCore::FrameTree::isDescendantOf):
        (WebCore::FrameTree::traverseNext):
        (WebCore::FrameTree::traverseNextWithWrap):
        (WebCore::FrameTree::traversePreviousWithWrap):
        (WebCore::FrameTree::deepLastChild):
        (WebCore::FrameTree::top):
        * page/FrameTree.h:
        (WebCore::FrameTree::FrameTree):

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

        Fix iOS build.

        * loader/ResourceLoader.h:

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

        Fix iOS build.

        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::acceleratedImageDecodingEnabled):
        (WebCore::ImageSource::setAcceleratedImageDecodingEnabled):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed EFL build fix after r161678.

        static_cast a size_t to unsigned long for %lu format string.

        * page/Console.cpp:
        (WebCore::internalAddMessage):

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

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/NativeImagePtr.h:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addPathForRoundedRect):
        * platform/graphics/Path.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::getGraphicsResetStatusARB):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/ResourceRequestBase.cpp:

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

        Fix CharsetData.cpp build for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126792

        Reviewed by Mark Rowe.

        CharsetData.cpp should have an empty CharsetTable list for iOS.
        Achieve this with an iOS-specific encodings.txt file.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/mac/ios-encodings.txt: Added.

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE in NavigationScheduler
        https://bugs.webkit.org/show_bug.cgi?id=126788

        Reviewed by Tim Horton.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameScheduledNavigationImpl):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigationImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::shouldStartTimer):
        (WebCore::ScheduledNavigation::didStartTimer):
        (WebCore::ScheduledNavigation::didStopTimer):
        (WebCore::NavigationScheduler::NavigationScheduler):
        (WebCore::NavigationScheduler::clear):
        (WebCore::NavigationScheduler::shouldScheduleNavigation):
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::mustLockBackForwardList):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        (WebCore::NavigationScheduler::scheduleRefresh):
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::schedule):
        (WebCore::NavigationScheduler::startTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/NavigationScheduler.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):

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

        CSS word-spacing property does not obey percentages
        https://bugs.webkit.org/show_bug.cgi?id=126674

        Reviewed by Simon Fraser.

        One change between CSS2.1 and CSS3 is that the word-spacing CSS property can
        take percentages (of the width of the space character) in CSS3. In order to
        implement this, the datatype must be changed from a float to a Length, which
        can hold percentage values. Then, during layout, we can query the width of
        the space character and update the Font's word-spacing value appropriately.
        However, the RenderStyle still holds on to the Length (as a rare inherited
        value).

        Tests: fast/css3-text/css3-word-spacing-percentage/word-spacing-change-font.html
               fast/css3-text/css3-word-spacing-percentage/word-spacing-percentage-parse.html
               fast/css3-text/css3-word-spacing-percentage/word-spacing-percentage.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Use Font's computed value instead
        of style's Length value.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): word-spacing and letter-spacing no longer are
        parsed the same way.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyWordSpacing::applyValue): Construct a length from a given
        CSSValue and set the style's word spacing with it.
        (WebCore::ApplyPropertyWordSpacing::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Use ApplyPropertyWordSpacing.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Use Font's computed value instead
        of style's Length value.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths): Ditto.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Opt-out of the SimpleLineLayout
        if either the percentage or the length is nonzero.
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText): Use Font's computed value instead
        of style's Length value.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::wordSpacing):
        (WebCore::RenderStyle::setWordSpacing): Consult the Font's space with to compute
        percentage values, but hold on to the original Length.
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareInheritedData.h: Hold on to the specified Length

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

        Fix the iOS build.

        * platform/audio/mac/MediaSessionManagerMac.cpp:

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

        iOS doesn't have <OpenGL/gl.h>; fix iOS build.

        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:

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

        [iOS] Build Fix: Properly add $SDKROOT/usr/local/include/ to the search path when building PublicDOMInterfaces.h

        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unimplemented or static ScriptDebugServer features
        https://bugs.webkit.org/show_bug.cgi?id=126784

        Reviewed by Timothy Hatcher.

        These features are unimplemented in the backend, and unused by the
        current frontend. Most deal with features that were supported by v8
        and are as yet unimplemented by JSC. If we decide to add such features
        we can reimplement without conforming to an old implementation.

        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfiler.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::frameNavigated):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearMainFrameWindowObject):
        * inspector/protocol/Page.json:
        * inspector/protocol/Profiler.json:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Remove unused variable from TileGrid::dropTilesBetweenRects()

        Fixes the following build error:

            WebCore/platform/ios/TileGrid.mm:88:23: error: unused variable 'end' [-Werror,-Wunused-variable]
                TileMap::iterator end = m_tiles.end();
                                  ^

        * platform/ios/TileGrid.mm:
        (WebCore::TileGrid::dropTilesBetweenRects): Remove unused
        variable now that the for loop uses an auto iterator.

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

        Implement OES texture half float linear
        https://bugs.webkit.org/show_bug.cgi?id=125060

        Reviewed by Brent Fulgham.

        Test: fast/canvas/webgl/oes-texture-half-float-linear.html

        * CMakeLists.txt: Add new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Generate new file from IDL.
        * GNUmakefile.list.am: Add new files.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: New files for OESTextureHalfFloatLinear.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Map from extension name to native object.

        * html/canvas/OESTextureHalfFloatLinear.cpp: Added. New files. These are boiler-plate.
        * html/canvas/OESTextureHalfFloatLinear.h: Added.
        * html/canvas/OESTextureHalfFloatLinear.idl: Added.

        * html/canvas/WebGLExtension.h: Add new enum for the new extension.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension): Create the extension object if the
        context is asked for one.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add the new extension to the
        list of supported extensions. Actually remember to do it this time :)
        (WebCore::WebGLRenderingContext::checkTextureCompleteness): Need to check for the half-float
        extension as well, and update the log message.
        * html/canvas/WebGLRenderingContext.h: New extension object.

        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::needToUseBlackTexture): Check for half-float type.
        (WebCore::WebGLTexture::update): Mark a texture as half-float if necessary.
        * html/canvas/WebGLTexture.h:

        * platform/graphics/Extensions3D.h: Add a comment about the new extension.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): This extension is available
        when GL_ARB_texture_float is supported, so add the name to the translation.

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

        [WebGL] Correct uniform input validation for texture sampler uniform
        https://bugs.webkit.org/show_bug.cgi?id=126775

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/uniform-samplers-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::uniform1iv): Access Int32Array data properly.

2014-01-10  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Unreviewed build fix after r161644.

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Remove an unused FrameLoader function
        https://bugs.webkit.org/show_bug.cgi?id=126785

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setState):
        * loader/FrameLoader.h:

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

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/PlatformMouseEvent.h:
        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/PlatformTouchPoint.h:
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimator::create):
        * platform/URL.cpp:
        (WebCore::URL::parse):
        (WebCore::portAllowed):
        * platform/Widget.h:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Clean up and fix some issues with stdout formatting of console messages.

        * Fix URLs not printing line numbers unless column number is > 0.
        * Change "CONSOLEAPI" to "CONSOLE" for the source.
        * Clean up how console.trace outputs and print URL, line and column for each frame.
        * Print "(unknown)" for anonymous and native code call frames.

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

        Reviewed by Joseph Pecoraro.

        * page/Console.cpp:
        (WebCore::internalAddMessage):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printSourceURLAndPosition):
        (WebCore::PageConsole::printMessageSourceAndLevelPrefix):
        * page/PageConsole.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Fill in missing WebCoreThread function pointers
        https://bugs.webkit.org/show_bug.cgi?id=126776

        Reviewed by Timothy Hatcher.

        * platform/ios/wak/WebCoreThreadSystemInterface.cpp:
        (InitWebCoreThreadSystemInterface):

2014-01-10  Yongjun Zhang  <yongjun_zhang@apple.com>

        Clear unparented tiled layers on memory pressure.
        https://bugs.webkit.org/show_bug.cgi?id=126737

        Reviewed by Simon Fraser.

        TileController hold unparented tiles for a short period of time (1 -3 sec); we should clear these unparented
        tiles immediately if we are under memory pressure.
        
        The patch does 3 things to improve the behavior:
        1) When the system free memory is low (<35%), reduce the tiling threshold.  This could reduce
        the peak memory usage when system is under low memory since we will convert more web layers into
        tiled backing.
        2) Under memory pressure, immediately clear all unparented tiles.
        3) Add a cap (16 tiles) to limit the total number of unparented tiles in TileController's.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Add a new class TileControllerMemoryHandler.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::requiresTiledLayer):  Use a smaller tiling threshold if the system free memory is low.
        * platform/graphics/ca/mac/TileController.h:
        (WebCore::TileController::numberOfUnparentedTiles):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::startedNewCohort):
        (WebCore::TileController::removeUnparentedTilesNow): Remove all unparentd tiles.
        * platform/ios/MemoryPressureHandlerIOS.mm:
        * platform/ios/TileControllerMemoryHandlerIOS.cpp: Added.
        (WebCore::TileControllerMemoryHandler::removeTileController):
        (WebCore::TileControllerMemoryHandler::totalUnparentedTiledLayers):
        (WebCore::TileControllerMemoryHandler::tileControllerGainUnparentedTiles):
        (WebCore::TileControllerMemoryHandler::trimUnparentedTilesToTarget): Trims the number of unparented tiles until
            it reaches the target.
        (WebCore::tileControllerMemoryHandler):
        * platform/ios/TileControllerMemoryHandlerIOS.h: Added.
        (WebCore::TileControllerMemoryHandler::TileControllerMemoryHandler):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [CSS Blending] Log blending as a layer creation reason in the WI
        https://bugs.webkit.org/show_bug.cgi?id=126159

        Reviewed by Timothy Hatcher.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/protocol/LayerTree.json:

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

        Fix some iOS build errors during bindings generation.

        * bindings/objc/PublicDOMInterfaces.h: Included
        WebKitAdditions/PublicDOMInterfacesIOS.h and change
        -[DOMRGBColor color] to return a CGColorRef on iOS.

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Prevent some resources from showing up in Web Inspector as years in duration.

        No WebKit port passed a monotonic time to InspectorInstrumentation::didFinishLoading -- except Chromium.

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

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        Revert part of r102961 to use finishTime as-is and not expect a monotonic time.

2014-01-10  Dirk Schulze  <krit@webkit.org>

        Make clipping path from basic-shapes relative to <box> value
        https://bugs.webkit.org/show_bug.cgi?id=126206

        Reviewed by Simon Fraser.

        Tests: css3/masking/clip-path-circle-border-box.html
               css3/masking/clip-path-circle-bounding-box.html
               css3/masking/clip-path-circle-content-box.html
               css3/masking/clip-path-circle-margin-box.html
               css3/masking/clip-path-circle-padding-box.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Add switch to differ between boxes
            and use different reference boxes to size the clipping path.

2014-01-10  Youenn Fablet  <youennf@gmail.com>


        Correctly set XHR loadend attributes (loaded and total).
        https://bugs.webkit.org/show_bug.cgi?id=120828

        Reviewed by Alexey Proskuryakov.
        
        Added correct initialization of lengthComputable, loaded and total attributes 
        to XHR ProgressEvent events (load, loadstart, loadend, abort, error and timeout).

        XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload now keep persistent knowledge 
        of m_loaded and m_total values with this patch.
        
        Code refactoring to handle event dispatching in case of error in a single manner.
        XMLHttpRequestProgressEventThrottle::dispatchProgressEvent is renamed as dispatchThrottledProgressEvent
        XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadend is replaced by dispatchProgressEvent(const AtomicString&)
        
        Fixed assertion issues over bug 120828 patch

        Tests: http/tests/xmlhttprequest/loadstart-event-init.html
               http/tests/xmlhttprequest/onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/onload-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onload-progressevent-attributes.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): changed readystatechange event from ProgressEvent to Event (not cancellable, not bubblable) to better match the spec 
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::networkError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::abortError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::dispatchErrorEvents): dispatch progress events in case of error
        (WebCore::XMLHttpRequest::didTimeout): code refactoring to handle error event dispatching in a single way
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: before the patch, the fact that a progress event is being throttled is stored indirectly (m_loaded or m_total not equal to zero). With the patch, this information is stored in m_hasThrottledProgressEvent. The m_loaded and m_total values are no longer set back to zero after a progress event is dispatched. This allows using these values to correctly initialize other ProgressEvent events (in particular loadend, abort, timeout...) 
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent): always update the new m_loaded and m_total values. If progress event is not sent as part of the function call, store the fact that a progress event is being throttled through m_hasThrottledProgressEvent. 
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): used to send any ProgressEvent event that is not be throttled
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h: introduced m_hasThrottledProgressEvent which stores whether a progress event is being throttled and m_computableLength which is used to initialize ProgressEvent computableLength
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h: introduced m_loaded, m_total and m_lengthComputable, similarly to XMLHttpRequestProgressEventThrottle

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

        [CSS Shapes] Change parseBasicShape to return a CSSPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=126713

        Reviewed by Dirk Schulze.

        Avoid the duplicated code wrapping the CSSBasicShape in a CSSPrimitiveValue
        by having parseBasicShape return a CSSPrimitiveValue reference.

        Refactoring, no new tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        (WebCore::CSSParser::parseClipPath):
        (WebCore::CSSParser::parseBasicShape):
        * css/CSSParser.h:

2014-01-10  Piotr Grad  <p.grad@samsung.com>

        Possible crash in ApplicationCache::removeResource.
        https://bugs.webkit.org/show_bug.cgi?id=126695

        Reviewed by Alexey Proskuryakov.

        No new tests.

        Iterator variable was used after it was removed.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::removeResource):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Another build fix for the Production Mac build following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Move the logic for appending the port-specific IDL files {Touch, TouchEvent, TouchList}.idl to the
        list of binding IDLs (BINDING_IDLS) before the definition of variables DOM_CLASSES and JS_DOM_HEADERS
        so that we generate the DOM and JS bindings for these IDLs.

        * DerivedSources.make:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Remove supportMultipleWindows setting
        https://bugs.webkit.org/show_bug.cgi?id=126772

        Reviewed by Beth Dakin.

        This setting was added in https://bugs.webkit.org/show_bug.cgi?id=99716 for the Chromium port
        and is unused by everyone else so get rid of it.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * page/Settings.in:

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

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::initTouchEvent):
        * dom/TouchEvent.h:
        * dom/ViewportArguments.cpp:
        * dom/ViewportArguments.h:
        * history/HistoryItem.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * page/NavigatorBase.cpp:
        * page/Settings.cpp:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * platform/Cursor.cpp:
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor):
        * platform/DragData.h:
        * platform/DragImage.h:
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsIntoWindow):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::load):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

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

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::initProtocolHandlerWhitelist):
        * UseJSC.cmake:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        (WebCore::GCController::garbageCollectSoon):
        * bindings/js/GCController.h:

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the WebCore, WebKit build targets following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Tell Xcode that the supported platforms for all WebKit targets are iOS and OS X.

        * Configurations/Base.xcconfig:

2014-01-09  Andy Estes  <aestes@apple.com>

        [iOS] Upstream iOS changes to MigrateHeaders.make
        https://bugs.webkit.org/show_bug.cgi?id=126731

        Reviewed by David Kilzer.

        * WebCore.xcodeproj/project.pbxproj: Mark an iOS-specific header at
        Private that will later be migrated by WebKit.

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the Production Mac build following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Substitute JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production_ for JAVASCRIPTCORE_PRIVATE_HEADERS_Production_.

        * Configurations/WebCore.xcconfig:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Add a missing include.

        * Modules/webdatabase/DatabaseManager.h:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Use STL threading primitives in DatabaseDetails and DatabaseManager
        https://bugs.webkit.org/show_bug.cgi?id=126759

        Reviewed by Geoffrey Garen.

        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::threadID):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::didConstructDatabaseContext):
        (WebCore::DatabaseManager::didDestructDatabaseContext):
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:

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

        Unreviewed, rolling out r161629.
        http://trac.webkit.org/changeset/161629
        https://bugs.webkit.org/show_bug.cgi?id=126762

        Fails svg/custom/conditional-processing-2.html (Requested by
        ap on #webkit).

        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-10  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix since r161589.

        The changeset causes a compile failure with --no-svg.

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

2014-01-10  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [WebGL] Removing unnecessary pointer checks
        https://bugs.webkit.org/show_bug.cgi?id=124046

        Reviewed by Brent Fulgham.

        We do not need to check for a null array three times in
        the same call. Let's just do it once!

        No new tests. Covered by existing ones.

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferData):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Speculative build fix for Windows following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Reviewed by David Kilzer.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2014-01-10  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [WebGL] Wrong condition order in the if statement
        https://bugs.webkit.org/show_bug.cgi?id=125000

        Reviewed by Brent Fulgham.

        We should only pay the cost of string comparison once. The
        current logic requires a string comparison every time we
        pass through the function. Instead, by reordering the statements
        we can short-circuit through the boolean test after the initial
        setup is complete.

        No new tests. No behaviour changes.

        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::supportsExtension):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE in AudioContext::AutoLocker
        https://bugs.webkit.org/show_bug.cgi?id=126758

        Reviewed by Antti Koivisto.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::connect):
        (WebCore::AudioBasicInspectorNode::disconnect):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::refNode):
        (WebCore::AudioContext::deleteMarkedNodes):
        (WebCore::AudioContext::removeMarkedSummingJunction):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::AutoLocker::AutoLocker):
        (WebCore::AudioContext::AutoLocker::~AutoLocker):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::enableOutputsIfNecessary):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::setOversample):

2014-01-10  Antti Koivisto  <antti@apple.com>

        Use element iterators more
        https://bugs.webkit.org/show_bug.cgi?id=126756

        Reviewed by Anders Carlsson.

        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::invalidateStyleForAllLinks):
        (WebCore::VisitedLinkState::invalidateStyleForLink):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::renderMeter):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::renderProgress):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureInsertionPointList):
        * style/StyleResolveTree.cpp:

2014-01-10  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build after <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/audio/ios/AudioSessionIOS.mm: Import header PassOwnPtr.h so that we can use adoptPtr().

2014-01-10  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build after <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Substitute tab characters for space characters.

        * DerivedSources.make:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        DOMWindow::showModalDialog should use std::function
        https://bugs.webkit.org/show_bug.cgi?id=126753

        Reviewed by Antti Koivisto.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::JSDOMWindow::showModalDialog):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:

2014-01-10  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore and Tools miscellaneous changes
        https://bugs.webkit.org/show_bug.cgi?id=126698

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig:
        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:
        * Configurations/iOS.xcconfig: Added.
        * DerivedSources.make:
        * English.lproj/Localizable.strings:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp: Copied from Source/WebCore/editing/TextAffinity.h.
        (WebCore::stringForPlaybackTargetAvailability):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent):
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: Added.
        (WebCore::WebKitPlaybackTargetAvailabilityEventInit::WebKitPlaybackTargetAvailabilityEventInit):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::~WebKitPlaybackTargetAvailabilityEvent):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::create):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::availability):
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl: Copied from Source/WebCore/editing/DeleteButton.h.
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::canSuspend):
        (WebCore::Geolocation::suspend):
        (WebCore::Geolocation::resume):
        (WebCore::Geolocation::resumeTimerFired):
        (WebCore::Geolocation::resetAllGeolocationPermission):
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::setError):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::resetAllGeolocationPermission):
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::speak):
        * Modules/speech/SpeechSynthesis.h:
        (WebCore::SpeechSynthesis::userGestureRequiredForSpeechStart):
        (WebCore::SpeechSynthesis::removeBehaviorRestriction):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::databaseThread):
        (WebCore::DatabaseContext::setPaused):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManagerClient.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTask::performTask):
        (WebCore::Database::DatabaseTransactionTask::shouldPerformWhilePaused):
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::requestTermination):
        (WebCore::DatabaseUnpauseTask::create):
        (WebCore::DatabaseUnpauseTask::shouldPerformWhilePaused):
        (WebCore::DatabaseUnpauseTask::DatabaseUnpauseTask):
        (WebCore::DatabaseUnpauseTask::doPerformTask):
        (WebCore::DatabaseUnpauseTask::debugTaskName):
        (WebCore::DatabaseThread::setPaused):
        (WebCore::DatabaseThread::handlePausedQueue):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::isZeroByteFile):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish):
        (WebCore::DatabaseTracker::setDatabasesPaused):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::shouldPerformWhilePaused):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Resources/DictationPhraseWithAlternativesDot.png: Added.
        * Resources/DictationPhraseWithAlternativesDot@2x.png: Added.
        * Resources/SpellingDot.png: Added.
        * Resources/SpellingDot@2x.png: Added.
        * Resources/decrementArrow.tiff: Added.
        * Resources/hScrollControl_left.png: Added.
        * Resources/hScrollControl_middle.png: Added.
        * Resources/hScrollControl_right.png: Added.
        * Resources/incrementArrow.tiff: Added.
        * Resources/markedLeft.png: Added.
        * Resources/markedMiddle.png: Added.
        * Resources/markedRight.png: Added.
        * Resources/vScrollControl_bottom.png: Added.
        * Resources/vScrollControl_middle.png: Added.
        * Resources/vScrollControl_top.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::releaseExecutableMemory):
        * bindings/js/GCController.h:
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::~JSCallbackData):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        (WebCore::JSDOMWindowBase::commonVM):
        (WebCore::JSDOMWindowBase::commonVMExists):
        (WebCore::JSDOMWindowBase::commonVMInternal):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::touch):
        (WebCore::JSDOMWindow::touchList):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::webkitCompassHeading):
        (WebCore::JSDeviceOrientationEvent::webkitCompassAccuracy):
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/JSTouchCustom.cpp:
        * bindings/js/JSTouchListCustom.cpp:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::didContinue):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initializeThreading):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ios/TouchConstructors.cpp: Added.
        * bindings/objc/DOM.mm:
        (WebCore::wkQuadFromFloatQuad):
        (WebCore::kit):
        (WebCore::min4):
        (WebCore::max4):
        (WebCore::emptyQuad):
        (-[WKQuadObject initWithQuad:]):
        (-[WKQuadObject quad]):
        (-[WKQuadObject boundingBox]):
        (-[DOMNode boundingBox]):
        (-[DOMNode absoluteQuad]):
        (-[DOMNode absoluteQuadAndInsideFixedPosition:]):
        (-[DOMNode boundingBoxUsingTransforms]):
        (-[DOMNode lineBoxQuads]):
        (-[DOMNode _linkElement]):
        (-[DOMNode hrefURL]):
        (-[DOMNode hrefTarget]):
        (-[DOMNode hrefFrame]):
        (-[DOMNode hrefLabel]):
        (-[DOMNode hrefTitle]):
        (-[DOMNode boundingFrame]):
        (-[DOMNode innerFrameQuad]):
        (-[DOMNode computedFontSize]):
        (-[DOMNode nextFocusNode]):
        (-[DOMNode previousFocusNode]):
        (-[DOMRange boundingBox]):
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        (-[DOMElement _font]):
        (-[DOMHTMLLinkElement _mediaQueryMatchesForOrientation:]):
        (-[DOMHTMLLinkElement _mediaQueryMatches]):
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement scrollYOffset]):
        (-[DOMHTMLElement setScrollXOffset:scrollYOffset:]):
        (-[DOMHTMLElement setScrollXOffset:scrollYOffset:adjustForIOSCaret:]):
        (-[DOMHTMLElement absolutePosition::::]):
        (-[DOMHTMLInputElement _autocapitalizeType]):
        (-[DOMHTMLTextAreaElement _autocapitalizeType]):
        (-[DOMHTMLInputElement setValueWithChangeEvent:]):
        (-[DOMHTMLInputElement setValueAsNumberWithChangeEvent:]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (wrapperCacheLock):
        (getDOMWrapper):
        (addDOMWrapper):
        (removeDOMWrapper):
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMUIKitExtensions.h: Added.
        * bindings/objc/DOMUIKitExtensions.mm: Added.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):
        (GetClassName):
        (IsCoreFoundationType):
        (GetObjCType):
        (AddIncludesForType):
        (GenerateHeader):
        (GenerateImplementation):
        (WriteData):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fieldNamed):
        * bridge/objc/objc_instance.mm:
        * config.h:
        * dom/Document.cpp:
        (WebCore::Document::addAutoSizingNode):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/ios/TouchEvents.cpp: Added.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::inputText):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::enable):
        (WebCore::DeleteButtonController::disable):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:
        * editing/EditAction.h:
        * editing/EditCommand.h:
        (WebCore::EditCommand::isInsertTextCommand):
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        (WebCore::ClearTextCommand::ClearTextCommand):
        (WebCore::ClearTextCommand::editingAction):
        (WebCore::ClearTextCommand::CreateAndApply):
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::clearText):
        (WebCore::Editor::insertDictationPhrases):
        (WebCore::Editor::setDictationPhrasesAsChildOfElement):
        (WebCore::Editor::confirmMarkedText):
        (WebCore::Editor::setTextAsChildOfElement):
        (WebCore::Editor::notifyComponentsOnChangedSelection):
        (WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        (WebCore::Editor::copy):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::setIgnoreCompositionSelectionChange):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::shouldChangeSelection):
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeClearText):
        (WebCore::enabledCopy):
        (WebCore::enabledCut):
        (WebCore::enabledClearText):
        (WebCore::createCommandMap):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modifyMovingBackward):
        (WebCore::FrameSelection::setSelectedRange):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::shouldDeleteSelection):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        (WebCore::FrameSelection::shouldChangeSelection):
        (WebCore::FrameSelection::expandSelectionToElementContainingCaretSelection):
        (WebCore::FrameSelection::elementRangeContainingCaretSelection):
        (WebCore::FrameSelection::expandSelectionToWordContainingCaretSelection):
        (WebCore::FrameSelection::wordRangeContainingCaretSelection):
        (WebCore::FrameSelection::expandSelectionToStartOfWordContainingCaretSelection):
        (WebCore::FrameSelection::characterInRelationToCaretSelection):
        (WebCore::FrameSelection::characterBeforeCaretSelection):
        (WebCore::FrameSelection::characterAfterCaretSelection):
        (WebCore::FrameSelection::wordOffsetInRange):
        (WebCore::FrameSelection::spaceFollowsWordInRange):
        (WebCore::FrameSelection::selectionAtDocumentStart):
        (WebCore::FrameSelection::selectionAtSentenceStart):
        (WebCore::FrameSelection::selectionAtWordStart):
        (WebCore::FrameSelection::rangeByMovingCurrentSelection):
        (WebCore::FrameSelection::rangeByExtendingCurrentSelection):
        (WebCore::FrameSelection::selectRangeOnElement):
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
        (WebCore::FrameSelection::actualSelectionAtSentenceStart):
        (WebCore::FrameSelection::rangeByAlteringCurrentSelection):
        (WebCore::FrameSelection::clearCurrentSelection):
        (WebCore::FrameSelection::setCaretBlinks):
        (WebCore::FrameSelection::setCaretColor):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::suppressCloseTyping):
        (WebCore::FrameSelection::restoreCloseTyping):
        (WebCore::FrameSelection::setUpdateAppearanceEnabled):
        (WebCore::FrameSelection::suppressScrolling):
        (WebCore::FrameSelection::restoreScrolling):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doReapply):
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertTextCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TextAffinity.h:
        * editing/TextCheckingHelper.cpp:
        * editing/TextGranularity.h:
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::FriendlyEditCommand::setEndingSelection):
        (WebCore::TypingCommand::setEndingSelectionOnLastInsertCommand):
        * editing/TypingCommand.h:
        * editing/VisiblePosition.h:
        (WebCore::operator<):
        (WebCore::operator>):
        (WebCore::operator<=):
        (WebCore::operator>=):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        (WebCore::directionIsDownstream):
        (WebCore::atBoundaryOfGranularity):
        (WebCore::withinTextUnitOfGranularity):
        (WebCore::nextCharacterBoundaryInDirection):
        (WebCore::nextWordBoundaryInDirection):
        (WebCore::nextSentenceBoundaryInDirection):
        (WebCore::nextLineBoundaryInDirection):
        (WebCore::nextParagraphBoundaryInDirection):
        (WebCore::nextDocumentBoundaryInDirection):
        (WebCore::positionOfNextBoundaryOfGranularity):
        (WebCore::enclosingTextUnitOfGranularity):
        (WebCore::distanceBetweenPositions):
        (WebCore::wordRangeFromPosition):
        (WebCore::closestWordBoundaryForPosition):
        * editing/VisibleUnits.h:
        * editing/ios/DictationCommandIOS.cpp: Added.
        * editing/ios/DictationCommandIOS.h: Added.
        (WebCore::DictationCommandIOS::create):
        (WebCore::DictationCommandIOS::editingAction):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * fileapi/AsyncFileStream.cpp:
        * generate-export-file: Added.
        * inspector/InspectorCounters.h:
        * inspector/InspectorFrontendHost.h:
        * make-export-file-generator:
        * plugins/PluginPackage.h:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::willProvidePluginLayer):
        (WebCore::PluginViewBase::attachPluginLayer):
        (WebCore::PluginViewBase::detachPluginLayer):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementImplicitVisibility):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):
        (WebCore::Internals::isSelectPopupVisible):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        (WebCore::MediaPlayerPrivateIOS::engineDescription): Adding missing return keyword.

2014-01-10  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Remove unused CSSParser::parseFlowThread
        https://bugs.webkit.org/show_bug.cgi?id=126749

        Reviewed by Antti Koivisto.

        There are two versions of CSSParser::parseFlowThread. Remove the unused one:
        bool parseFlowThread(const String& flowName);

        Tests: No tests, code cleanup.

        * css/CSSParser.cpp:
        * css/CSSParser.h:

2014-01-10  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Build fix after r161589.
        https://bugs.webkit.org/show_bug.cgi?id=126747

        Reviewed by Anders Carlsson.

        * platform/network/ResourceHandle.cpp:
        Include NotImplemented.h for all platforms.

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Convert some for loops over to range-based for
        https://bugs.webkit.org/show_bug.cgi?id=126752

        Reviewed by Antti Koivisto.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::clearStorageID):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::clearStorageID):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::fillResourceList):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::estimatedSizeInStorage):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationControllerPrivate::startTimeResponse):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tighten up two functions in the inspector code
        https://bugs.webkit.org/show_bug.cgi?id=126751

        Reviewed by Antti Koivisto.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameStoppedLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        * inspector/InspectorPageAgent.h:

2014-01-10  Antti Koivisto  <antti@apple.com>

        Crash when mutating SVG text with transform
        https://bugs.webkit.org/show_bug.cgi?id=126744

        Reviewed by Dirk Schulze.

        Test: svg/custom/mutation-text-transform-crash.html
        
        Text-transform property triggers subtreeTextDidChange when an SVG text renderer is
        being added to the render tree. The function assumes the child is already fully in the tree
        but in this case we are still in middle of adding it.

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeTextDidChange):
        
            Bail out if the changed RenderSVGInlineText can't be found from m_layoutAttributes.
            This means that subtreeChildWasAdded hasn't been invoked yet for it and there is nothing
            to update. The required updates will happen in subtreeChildWasAdded.

2014-01-10  Frédéric Wang  <fred.wang@free.fr>

        [SVG] Accept HTML and MathML namespaces as valid requiredExtensions
        https://bugs.webkit.org/show_bug.cgi?id=88188

        Reviewed by Dirk Schulze.

        When HTML and MathML are used as foreign objects of an SVG image, it is
        important for Web authors to be able to specify a fallback content for
        SVG-only readers or browsers without MathML support. We rely on the
        requiredExtensions for that purpose and we use the XHTML/MathML
        namespaces as suggested in SVG Tiny 1.2 and implemented in Gecko.

        Tests: svg/custom/conditional-processing-1.svg
               svg/custom/conditional-processing-2.html
               svg/dom/SVGTests.html

        * svg/SVGSwitchElement.cpp: Remove an incorrect FIXME comment and replace it with a reference to bug 74749.
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp: Check if the list of required extensions contains only the XHTML/MathML namespaces.
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-10  Mihai Tica  <mitica@adobe.com>

        Add support for blendmode to Core Animation layer.
        Patch by Rik Cabanier, Dean Jackson and Mihai Tica.

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

        Reviewed by Dirk Schulze.

        Tests: css3/compositing/blend-mode-layers.html
               css3/compositing/blend-mode-overflow.html
               css3/compositing/blend-mode-reflection.html
               css3/compositing/blend-mode-should-not-have-compositing-layer.html
               css3/compositing/blend-mode-simple.html

        * WebCore.exp.in: export PlatformCALayer::setBlendMode for WebKit::PlatformCALayerRemote
        * WebCore.xcodeproj/project.pbxproj: Add PlatformCAFiltersMac.h
        * platform/graphics/GraphicsLayer.cpp: add blendMode member
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::blendMode):
        (WebCore::GraphicsLayer::setBlendMode):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setBlendMode):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): add call to updateBlendMode()
        (WebCore::GraphicsLayerCA::updateBlendMode):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.h: Added.
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::setBlendingFiltersOnLayer): set a compositing CAFilter on CALayer
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setBlendMode): call to PlatformCAFilters::setBlendingFiltersOnLayer
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateBlendMode):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::setBlendMode):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState): add m_subtreeHasBlending member
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): promote layer if subtree has blending
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing): log blending reason
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason): add blending reason
        * rendering/RenderLayerCompositor.h:

2014-01-10  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Implement visual overflow computation for inline elements
        https://bugs.webkit.org/show_bug.cgi?id=125291

        Reviewed by David Hyatt.

        The patch implements visual overflow computation for inline elements per region. The algorithm
        uses the container region of each root line box to determine the lines in a region generated by
        a RenderInline. The overflow of a RenderInline inside a region is the smallest rectangle that fits
        all the line boxes belonging to that region.

        The patch also correctly flips for writing mode the overflow of a renderer before clipping with it.

        Tests: fast/regions/overflow-in-variable-width-regions-inline-bt.html
               fast/regions/overflow-in-variable-width-regions-inline-continuation.html
               fast/regions/overflow-in-variable-width-regions-inline-lr.html
               fast/regions/overflow-in-variable-width-regions-inline-rl.html
               fast/regions/overflow-in-variable-width-regions-inline.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes): Always create line boxes for RenderInline
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInRegion):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:

2014-01-09  Jer Noble  <jer.noble@apple.com>

        [Mac] .mp3 media document controls missing their background
        https://bugs.webkit.org/show_bug.cgi?id=126683

        Reviewed by Eric Carlson.

        Test: media/media-document-audio-controls-visible.html

        <video> elements in a media document are created with an intrinsic size of 300x1,
        with the expectation that either the size will be updated if the media has a video
        track, or the controls will visibly overflow if the media is audio-only. Since the
        shadow root is a flex-box, the panel was being collapsed to 1px high, so give the panel
        a minimum height to prevent that. Also, disable "fading out" the controls in a
        media document for an audio-only file by adding a "no-video" class to the panel
        and adding a media document-only rule to force the controls to always be visible.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel.no-video):
        (audio::-webkit-media-controls-panel):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Call updateHasVideo().
        (Controller.prototype.addVideoListeners): Add video track listeners.
        (Controller.prototype.removeVideoListeners): Remove same.
        (Controller.prototype.updateHasVideo): Add a 'no-video' class to the panel if
            the video element has no video tracks.

2014-01-09  Anders Carlsson  <andersca@apple.com>

        Clean up ProgressTracker a little
        https://bugs.webkit.org/show_bug.cgi?id=126738

        Reviewed by Dan Bernstein.

        Use Frame& where the frame can never be null, avoid an extra hash lookup and
        switch the m_progressItems map over to std::unique_ptr.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::~FrameProgressTracker):
        (WebCore::FrameLoader::FrameProgressTracker::progressStarted):
        (WebCore::FrameLoader::FrameProgressTracker::progressCompleted):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):

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

        Fix a build break on EFL debug build
        https://bugs.webkit.org/show_bug.cgi?id=126735

        Reviewed by Anders Carlsson.

        No new tests, just build fix.

        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::sharedTimerFiredInternal):  Add parentheses.

2014-01-09  Anders Carlsson  <andersca@apple.com>

        Remove unused FrameLoader member functions
        https://bugs.webkit.org/show_bug.cgi?id=126734

        Reviewed by Andreas Kling.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:

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

        Unreviewed Windows build fix for r161563.

        Remove stale forward declaration causing namespace ambiguity
        later on in a Windows AllInOne file that picked it up. Also
        remove a few stale functions that are not used and accidentally
        got added back in when the file changed names.

        * bindings/js/ScriptGlobalObject.h:

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

        [WebGL] Expose texture_float_linear and texture_half_float to getSupportedExtensions
        https://bugs.webkit.org/show_bug.cgi?id=126732

        Reviewed by Tim Horton.

        When I added support for these two extensions, I forgot to add their
        names to the list in getSupportedExtensions.

        Covered by the Khronos test: conformance/extensions/get-extension.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add OES_texture_float_linear
        and OES_texture_half_float if the WebGL context supports them.

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

        Revert r161611, incorrect fix, will fix better.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Jer Noble  <jer.noble@apple.com>

        [Mac] Scrubbing performance of HD content with software decoding is poor.
        https://bugs.webkit.org/show_bug.cgi?id=126705

        Reviewed by Eric Carlson.

        Instead of issuing a new seek before the previous one completes, wait until that seek's
        completion handler is called, and then issue the new seek. This has the added benefit of
        coalescing multiple incoming seeks so that only the last one is acted upon.

        Save the parameters passed into seekToTime and bind them together in a std::function
        to be replayed once the in-flight seek completes. To handle the case where a completion
        handler fires after the media player is destroyed, add a weakPtrFactory and pass a
        WeakPtr into the completion handler.
        
        Clean up some ivars which are no longer necessary: remove m_seekCount and m_seekTime.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation): Initialize the
            WeakPtrFactory.
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance):
        (WebCore::MediaPlayerPrivateAVFoundation::seeking): m_seekTime -> m_seeking.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::finishSeek):

2014-01-08  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Report the intrinsic size of the media element
        https://bugs.webkit.org/show_bug.cgi?id=125156

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize): Pass to MediaSourcePrivateAVFObjC.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeChanged): Added; Pass to MediaPlayer.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::naturalSize): Return the union of the naturalSizes of all active buffers.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset): Notify the media player that the size changed.
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize): Return the size of the selected video track.
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm: Renamed from Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.cpp.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::assetTrack): Made const.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::naturalSize): Return the size of the AVAssetTrack.

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

        Unreviewed Windows build fix for r161563.

        Remove stale forward declaration causing namespace ambiguity
        later on in a Windows AllInOne file that picked it up.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Simon Fraser  <simon.fraser@apple.com>

        Enable async scrolling for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126730

        Reviewed by Tim Horton.

        Turn on ENABLE_ASYNC_SCROLLING for iOS.
        
        Disable rubber-banding and scrollbar-related Mac code for PLATFORM(IOS),
        provide stubs for scrolling nodes and scrolling state nodes, and an
        iOS scrolling tree, and scrolling coordinator.
        
        Move crollingCoordinator::create() into the platform implementation file.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isScrollingTreeIOS):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h: Copied from Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h.
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm.
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::~ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::pageDestroyed):
        (WebCore::ScrollingCoordinatorIOS::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorIOS::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorIOS::scrollingStateTreeCommitterTimerFired):
        (WebCore::ScrollingCoordinatorIOS::commitTreeState):
        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
        * page/scrolling/ios/ScrollingTreeIOS.cpp: Added.
        (WebCore::ScrollingTreeIOS::create):
        (WebCore::ScrollingTreeIOS::ScrollingTreeIOS):
        (WebCore::ScrollingTreeIOS::~ScrollingTreeIOS):
        (WebCore::derefScrollingCoordinator):
        (WebCore::ScrollingTreeIOS::invalidate):
        (WebCore::ScrollingTreeIOS::commitNewTreeState):
        (WebCore::ScrollingTreeIOS::updateMainFrameScrollPosition):
        (WebCore::ScrollingTreeIOS::createNode):
        * page/scrolling/ios/ScrollingTreeIOS.h: Copied from Source/WebCore/page/scrolling/ThreadedScrollingTree.h.
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h: Added.
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm: Added.
        (WebCore::ScrollingTreeScrollingNodeIOS::create):
        (WebCore::ScrollingTreeScrollingNodeIOS::ScrollingTreeScrollingNodeIOS):
        (WebCore::ScrollingTreeScrollingNodeIOS::~ScrollingTreeScrollingNodeIOS):
        (WebCore::ScrollingTreeScrollingNodeIOS::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeIOS::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::maximumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollBy):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollByWithoutContentEdgeConstraints):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:

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

        text-decoration-skip: ink does not work with line wraps
        https://bugs.webkit.org/show_bug.cgi?id=126729

        Reviewed by Simon Fraser.

        InlineTextBox's m_start and m_length fields are offsets into the renderer's string,
        not the generated TextRun. Because of this distinction, when multiple InlineTextBoxes
        were constructed for the same element, all the subsequent elements would use incorrect
        indices and therefore not have skipping decorations.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-multiline.html

        * platform/graphics/Font.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect):
        * rendering/InlineTextBox.cpp:
        (WebCore::drawSkipInkUnderline):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::dashesForIntersectionsWithRect):
        * rendering/TextPainter.h:

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

        Remove remaining blackberry files I could find in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * PlatformBlackBerry.cmake: Removed.
        * Resources/blackberry: Removed.
        * css/mediaControlsBlackBerry.css: Removed.
        * css/mediaControlsBlackBerryFullscreen.css: Removed.
        * css/themeBlackBerry.css: Removed.
        * editing/blackberry: Removed.
        * history/blackberry: Removed.
        * html/shadow/MediaControlsBlackBerry.cpp: Removed.
        * html/shadow/MediaControlsBlackBerry.h: Removed.
        * page/blackberry: Removed.
        * page/scrolling/blackberry: Removed.
        * plugins/blackberry: Removed.

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

        [WebGL] Return filtered results for getProgramParameter for ACTIVE_ATTRIBUTES and ACTIVE_UNIFORMS
        https://bugs.webkit.org/show_bug.cgi?id=126718
        <rdar://problem/15202048>

        Reviewed by Dean Jackson.

        Covered by webgl/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html and
        webgl/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getActiveAttrib): Added loging.
        (WebCore::WebGLRenderingContext::getActiveUniform): Added logging.
        (WebCore::WebGLRenderingContext::getAttribLocation): Drive-by-fix. Return
        -1 on link failure (an invalid location) rather than 0 (a valid
        location) when link fails.
        (WebCore::WebGLRenderingContext::getProgramParameter): Use new
        method to return filtered count.
        (WebCore::WebGLRenderingContext::getUniformLocation): Use nullptr
        rather than returning 0.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::ActiveShaderSymbolCounts::ActiveShaderSymbolCounts):
        (WebCore::GraphicsContext3D::ActiveShaderSymbolCounts::countForType):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::precisionsMatch): Drive-by-fix. Don't
        copy giant objects to read a single value.
        (WebCore::GraphicsContext3D::compileShader): Release filtered count
        when we change shader source code.
        (WebCore::GraphicsContext3D::getActiveAttribImpl): Renamed from getActiveAttrib.
        (WebCore::GraphicsContext3D::getActiveAttrib): Maps filtered indices to
        real OpenGL indices.
        (WebCore::GraphicsContext3D::getActiveUniformImpl): Renamed from getActiveUniform.
        (WebCore::GraphicsContext3D::getActiveUniform): Maps filtered indices to
        real OpenGL indices.
        (WebCore::GraphicsContext3D::originalSymbolName): Use C++11 loop.
        (WebCore::GraphicsContext3D::getAttribLocation): Added logging.
        (WebCore::GraphicsContext3D::getNonBuiltinActiveSymbolCount): Added.
        (WebCore::GraphicsContext3D::getShaderiv): Const correctness.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Ditto.
        (WebCore::GraphicsContext3D::getShaderSource): Ditto.

2014-01-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] First line gets incorrectly adjusted in shape-inside due to rounding
        https://bugs.webkit.org/show_bug.cgi?id=126601

        Reviewed by Bem Jones-Bey.

        In order to get consistent results of the first fit position of the content in shapes,
        firstIncludedIntervalLogicalTop should take a FloatSize rather than LayoutSize for
        minLogicalIntervalSize, because LayoutSize clamps the float value to int, when subpixel-layout
        is disabled, thus firstIncludedIntervalLogicalTop could end up calculating with an unprecize
        value. This change modifies firstIncludedIntervalLogicalTop to take FloatSize consistently.

        Test: fast/shapes/shape-inside/shape-inside-polygon-rounded-first-fit.html

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::adjustLogicalLineTop):
        (WebCore::ShapeInsideInfo::computeFirstFitPositionForFloat):

2014-01-09  Andy Estes  <aestes@apple.com>

        [iOS] Upstream WAK
        https://bugs.webkit.org/show_bug.cgi?id=126724

        Reviewed by David Kilzer.

        * Configurations/WebCore.xcconfig: Excluded new iOS-specific Private
        headers on the Mac build.
        * WebCore.xcodeproj/project.pbxproj: Added new files to the project.
        * platform/ios/wak/WAKAppKitStubs.h: Added.
        * platform/ios/wak/WAKAppKitStubs.m: Added.
        * platform/ios/wak/WAKClipView.h: Added.
        * platform/ios/wak/WAKClipView.m: Added.
        * platform/ios/wak/WAKResponder.h: Added.
        * platform/ios/wak/WAKResponder.m: Added.
        * platform/ios/wak/WAKScrollView.h: Added.
        * platform/ios/wak/WAKScrollView.mm: Added.
        * platform/ios/wak/WAKView.h: Added.
        * platform/ios/wak/WAKView.mm: Added.
        * platform/ios/wak/WAKViewPrivate.h: Added.
        * platform/ios/wak/WAKWindow.h: Added.
        * platform/ios/wak/WAKWindow.mm: Added.
        * platform/ios/wak/WKContentObservation.cpp: Added.
        * platform/ios/wak/WKContentObservation.h: Added.
        * platform/ios/wak/WKGraphics.h: Added.
        * platform/ios/wak/WKGraphics.mm: Added.
        * platform/ios/wak/WKTypes.h: Added.
        * platform/ios/wak/WKUtilities.c: Added.
        * platform/ios/wak/WKUtilities.h: Added.
        * platform/ios/wak/WKView.h: Added.
        * platform/ios/wak/WKView.mm: Added.
        * platform/ios/wak/WKViewPrivate.h: Added.
        * platform/ios/wak/WebCoreThread.h: Added.
        * platform/ios/wak/WebCoreThread.mm: Added.
        * platform/ios/wak/WebCoreThreadInternal.h: Added.
        * platform/ios/wak/WebCoreThreadMessage.h: Added.
        * platform/ios/wak/WebCoreThreadRun.cpp: Added.
        * platform/ios/wak/WebCoreThreadRun.h: Added.
        * platform/ios/wak/WebCoreThreadSafe.h: Added.
        * platform/ios/wak/WebCoreThreadSystemInterface.cpp: Added.
        * platform/ios/wak/WebCoreThreadSystemInterface.h: Added.

2014-01-09  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/network/cf/ResourceRequest.h: Always declare ResourceRequest::updateFromDelegatePreservingOldHTTPBody()
        instead of only declaring it when building without CFNetwork.

2014-01-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        For some reason, the Windows build is unhappy that NeverDestroyed<FontCache> calls the private constructor
        FontCache::FontCache() despite being a friend class of FontCache. Use DEFINE_STATIC_LOCAL instead of
        NeverDestroyed<> for now. I'll look to investigate this issue offline.

        * platform/graphics/FontCache.cpp:
        (WebCore::fontCache):
        * platform/graphics/FontCache.h:

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

        Remove blackberry from WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * platform/blackberry: Removed.
        * platform/graphics/blackberry: Removed.
        * platform/graphics/filters/blackberry: Removed.
        * platform/image-decoders/blackberry: Removed.
        * platform/mediastream/blackberry: Removed.
        * platform/network/blackberry: Removed.
        * platform/text/blackberry: Removed.

2014-01-09  Alexey Proskuryakov  <ap@apple.com>

        Fix a copy-paste mistake in an include guard.

        Rubber-stamped by Sam Weinig.

        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:

2014-01-09  Anders Carlsson  <andersca@apple.com>

        History::StateObjectType should be a strong enum
        https://bugs.webkit.org/show_bug.cgi?id=126725

        Reviewed by Beth Dakin.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/History.h:

2014-01-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mountain Lion Release (32-bit) build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:

2014-01-09  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/platform changes
        https://bugs.webkit.org/show_bug.cgi?id=126654

        Rubber-stamped by David Kilzer.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ContentFilter.h:
        * platform/DragData.h:
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseMediaFiles):
        * platform/FileChooser.h:
        * platform/FileSystem.cpp:
        (WebCore::setMetadataURL):
        * platform/FileSystem.h:
        * platform/KillRingNone.cpp:
        * platform/LocalizedStrings.cpp:
        (WebCore::fileButtonChooseMediaFileLabel):
        (WebCore::fileButtonChooseMultipleMediaFilesLabel):
        (WebCore::fileButtonNoMediaFileSelectedLabel):
        (WebCore::fileButtonNoMediaFilesSelectedLabel):
        * platform/LocalizedStrings.h:
        * platform/Logging.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::initializeUnsupportedTextMIMETypes):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        * platform/MemoryPressureHandler.h:
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::event):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/PlatformScreen.h:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::mainBundleIsEqualTo):
        * platform/RuntimeApplicationChecksIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/RuntimeApplicationChecksIOS.mm: Added.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleTouchEvent):
        * platform/ScrollAnimator.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::actualScrollX):
        (WebCore::ScrollView::actualScrollY):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleTouchEvent):
        (WebCore::ScrollableArea::isPinnedInBothDirections):
        (WebCore::ScrollableArea::isPinnedHorizontallyInDirection):
        (WebCore::ScrollableArea::isPinnedVerticallyInDirection):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isTouchScrollable):
        (WebCore::ScrollableArea::isOverflowScroll):
        (WebCore::ScrollableArea::didStartScroll):
        (WebCore::ScrollableArea::didEndScroll):
        (WebCore::ScrollableArea::didUpdateScroll):
        (WebCore::ScrollableArea::setIsUserScroll):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMinimumPosition):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMaximumPosition):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMinimumPosition):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMaximumPosition):
        * platform/Scrollbar.cpp:
        * platform/Scrollbar.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createPurgeableBuffer):
        (WebCore::SharedBuffer::data):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::shouldUsePurgeableMemory):
        * platform/SuddenTermination.h:
        * platform/Supplementable.h:
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::removeSupplement):
        (WebCore::Supplementable::requireSupplement):
        * platform/SystemMemory.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/ThreadCheck.h:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        (WebCore::ThreadGlobalData::setWebCoreThreadData):
        (WebCore::threadGlobalData):
        * platform/ThreadGlobalData.h:
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::ThreadTimers):
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        * platform/Timer.cpp:
        (WebCore::TimerBase::start):
        (WebCore::TimerBase::stop):
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:
        (WebCore::TimerBase::isActive):
        * platform/URL.cpp:
        (WebCore::enableURLSchemeCanonicalization):
        (WebCore::equal):
        (WebCore::URL::parse):
        * platform/URL.h:
        * platform/Widget.h:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioFileReaderIOS.cpp: Copied from Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp.
        (WebCore::createAudioBufferList):
        (WebCore::destroyAudioBufferList):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::readProc):
        (WebCore::AudioFileReader::getSizeProc):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/ios/AudioFileReaderIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        (WebCore::AudioFileReader::data):
        (WebCore::AudioFileReader::dataSize):
        * platform/audio/ios/AudioSessionIOS.mm:
        (SOFT_LINK_POINTER):
        (-[WebAudioSessionHelper initWithCallback:WebCore::]):
        (-[WebAudioSessionHelper dealloc]):
        (-[WebAudioSessionHelper interruption:]):
        (WebCore::AudioSession::setCategory):
        * platform/audio/mac/AudioDestinationMac.cpp:
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/cf/URLCF.cpp:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForCharCode):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::cacheFrameInfo):
        (WebCore::BitmapImage::updateSize):
        (WebCore::BitmapImage::originalSize):
        (WebCore::BitmapImage::originalSizeRespectingOrientation):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::ensureFrameInfoIsCached):
        (WebCore::BitmapImage::frameAtIndex):
        (WebCore::BitmapImage::frameIsCompleteAtIndex):
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex):
        (WebCore::BitmapImage::frameOrientationAtIndex):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/Color.cpp:
        (WebCore::Color::isDark):
        * platform/graphics/Color.h:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.cpp:
        (initFontCacheLockOnce):
        (FontLocker::FontLocker):
        (FontLocker::~FontLocker):
        (WebCore::fontCache):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::releaseFontData):
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        * platform/graphics/FontGlyphs.h:
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::drawRaisedEllipse):
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::clipRoundedRect):
        (WebCore::GraphicsContext::emojiDrawingEnabled):
        (WebCore::GraphicsContext::setEmojiDrawingEnabled):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::willBeDestroyed):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsLayerForMedia):
        (WebCore::GraphicsLayer::pixelAlignmentOffset):
        (WebCore::GraphicsLayer::hasFlattenedPerspectiveTransform):
        * platform/graphics/Icon.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::isSubsampled):
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayer::showPlaybackTargetPicker):
        (WebCore::MediaPlayer::hasWirelessPlaybackTargets):
        (WebCore::MediaPlayer::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayer::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayer::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaPlayer::currentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayer::playbackTargetAvailabilityChanged):
        (WebCore::MediaPlayer::attributeChanged):
        (WebCore::MediaPlayer::readyForPlayback):
        (WebCore::MediaPlayer::volumeChanged):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayerClient::mediaPlayerPlaybackTargetAvailabilityChanged):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::volume):
        (WebCore::MediaPlayerPrivateInterface::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayerPrivateInterface::showPlaybackTargetPicker):
        (WebCore::MediaPlayerPrivateInterface::hasWirelessPlaybackTargets):
        (WebCore::MediaPlayerPrivateInterface::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateInterface::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateInterface::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaPlayerPrivateInterface::attributeChanged):
        (WebCore::MediaPlayerPrivateInterface::readyForPlayback):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::rightClipToCharacterBuffer):
        (WebCore::rightClipToWordBuffer):
        (WebCore::leftTruncateToBuffer):
        (WebCore::truncateString):
        (WebCore::StringTruncator::centerTruncate):
        (WebCore::StringTruncator::rightTruncate):
        (WebCore::StringTruncator::leftTruncate):
        (WebCore::StringTruncator::rightClipToCharacter):
        (WebCore::StringTruncator::rightClipToWord):
        * platform/graphics/StringTruncator.h:
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        (WebCore::wkAVAssetResolvedURL):
        * platform/graphics/blackberry/FontBlackBerry.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::supportsAcceleratedFilterAnimations):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::contentsLayerForMedia):
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::setupContentsLayer):
        (WebCore::GraphicsLayerCA::mediaLayerMustBeUpdatedOnMainThread):
        (WebCore::GraphicsLayerCA::computePixelAlignment):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::currentRunLoop):
        (WebCore::LayerFlushScheduler::schedule):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        (PlatformCALayerMac::setContentsScale):
        (PlatformCALayer::isWebLayer):
        (PlatformCALayer::setBoundsOnMainThread):
        (PlatformCALayer::setPositionOnMainThread):
        (PlatformCALayer::setAnchorPointOnMainThread):
        (PlatformCALayer::setTileSize):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerPaintContents):
        (WebCore::TileController::removeAllTiles):
        (WebCore::TileController::removeAllSecondaryTiles):
        (WebCore::TileController::removeTilesInCohort):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::createTileLayer):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::copyUnscaledFrameAtIndex):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColorWithDeviceWhite):
        (WebCore::createCGColorWithDeviceRGBA):
        (WebCore::Color::Color):
        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        (WebCore::setStrokeAndFillColor):
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::draw):
        (WebCore::jpegUTI):
        (WebCore::utiFromMIMEType):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::drawPatternCallback):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::imageSourceOptions):
        (WebCore::ImageSource::imageSourceOptions):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::originalSize):
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/cg/ImageSourceCGMac.mm:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/IntSizeCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::platformIsEqual):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::allowsLigatures):
        (WebCore::FontPlatformData::ctFont):
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm: Added.
        (WebCore::DisplayRefreshMonitor::~DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/ios/FontCacheIOS.mm: Added.
        * platform/graphics/ios/FontServicesIOS.h: Added.
        * platform/graphics/ios/FontServicesIOS.mm: Added.
        (WebCore::FontServicesIOS::FontServicesIOS):
        * platform/graphics/ios/GraphicsContext3DIOS.h: Added.
        * platform/graphics/ios/IconIOS.mm: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.cpp.
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h: Copied from Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h.
        (WebCore::InbandTextTrackPrivateAVFIOS::create):
        (WebCore::InbandTextTrackPrivateAVFIOS::internalID):
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm: Copied from Source/WebCore/platform/graphics/mac/IntRectMac.mm.
        (WebCore::InbandTextTrackPrivateAVFIOS::InbandTextTrackPrivateAVFIOS):
        (WebCore::InbandTextTrackPrivateAVFIOS::~InbandTextTrackPrivateAVFIOS):
        (WebCore::InbandTextTrackPrivateAVFIOS::kind):
        * platform/graphics/ios/MediaPlayerPrivateIOS.h: Added.
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm: Added.
        * platform/graphics/ios/SimpleFontDataIOS.mm: Added.
        (WebCore::fontFamilyShouldNotBeUsedForArabic):
        (WebCore::fontHasVerticalGlyphs):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/ios/TextTrackRepresentationIOS.h: Copied from Source/WebCore/platform/graphics/TextTrackRepresentation.cpp.
        * platform/graphics/ios/TextTrackRepresentationIOS.mm: Added.
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FloatPointMac.mm:
        * platform/graphics/mac/FloatRectMac.mm:
        * platform/graphics/mac/FloatSizeMac.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::fontDataForCombiningCharacterSequence):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::setRenderbufferStorageFromDrawable):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::endPaint):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::createDotPattern):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/mac/IconMac.mm:
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::invalidatePlatformData):
        * platform/graphics/mac/IntPointMac.mm:
        * platform/graphics/mac/IntRectMac.mm:
        * platform/graphics/mac/IntSizeMac.mm:
        * platform/graphics/mac/MediaPlayerProxy.h:
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/mac/WebGLLayer.h:
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        (-[WebGLLayer display]):
        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        (-[WebSimpleLayer display]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (+[WebTiledLayer shouldDrawOnMainThread]):
        (-[WebTiledLayer display]):
        (-[WebTiledLayer drawInContext:]):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::blitFramebuffer):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):
        (WebCore::Extensions3DOpenGL::drawBuffersEXT):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::clearDepth):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawComplexText):
        * platform/ios/ContentFilterIOS.mm: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/ios/DeviceMotionClientIOS.h: Added.
        (WebCore::DeviceMotionClientIOS::create):
        * platform/ios/DeviceMotionClientIOS.mm: Added.
        * platform/ios/DeviceOrientationClientIOS.h: Added.
        (WebCore::DeviceOrientationClientIOS::create):
        * platform/ios/DeviceOrientationClientIOS.mm: Added.
        * platform/ios/KeyEventIOS.mm:
        * platform/ios/MIMETypeRegistryIOS.mm: Copied from Source/WebCore/platform/network/mac/CredentialStorageMac.mm.
        * platform/ios/MemoryPressureHandlerIOS.mm: Added.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::resourceMIMEType):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::read):
        (WebCore::supportedImageTypes):
        (WebCore::Pasteboard::supportedPasteboardTypes):
        (WebCore::Pasteboard::hasData):
        (WebCore::Pasteboard::readString):
        * platform/ios/PlatformEventFactoryIOS.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/PlatformEventFactoryIOS.mm: Added.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):
        * platform/ios/PlatformScreenIOS.mm: Added.
        * platform/ios/PlatformSpeechSynthesizerIOS.mm: Added.
        * platform/ios/SSLKeyGeneratorIOS.cpp: Added.
        * platform/ios/ScrollAnimatorIOS.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/ScrollAnimatorIOS.mm: Added.
        * platform/ios/ScrollViewIOS.mm: Added.
        * platform/ios/ScrollbarThemeIOS.h: Added.
        * platform/ios/ScrollbarThemeIOS.mm: Added.
        * platform/ios/SelectionRect.cpp: Added.
        * platform/ios/SelectionRect.h: Added.
        * platform/ios/SoundIOS.mm: Copied from Source/WebCore/platform/text/mac/CharsetData.h.
        * platform/ios/SystemMemoryIOS.cpp: Added.
        * platform/ios/ThemeIOS.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/ThemeIOS.mm: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/TileCache.h: Added.
        (WebCore::TileCache::isSpeculativeTileCreationEnabled):
        * platform/ios/TileCache.mm: Added.
        * platform/ios/TileGrid.h: Added.
        * platform/ios/TileGrid.mm: Added.
        * platform/ios/TileGridTile.h: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/ios/TileGridTile.mm: Added.
        * platform/ios/TileLayer.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/TileLayer.mm: Added.
        * platform/ios/TileLayerPool.mm: Added.
        * platform/ios/WebCoreMotionManager.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/WebCoreMotionManager.mm: Added.
        * platform/ios/WebCoreSystemInterfaceIOS.h: Added.
        * platform/ios/WebCoreSystemInterfaceIOS.mm: Added.
        * platform/ios/WebEvent.h: Added.
        * platform/ios/WebEvent.mm: Added.
        * platform/ios/WidgetIOS.mm: Added.
        * platform/mac/DisplaySleepDisabler.cpp:
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        (WebCore::DisplaySleepDisabler::~DisplaySleepDisabler):
        * platform/mac/DisplaySleepDisabler.h:
        * platform/mac/FileSystemMac.mm:
        * platform/mac/KillRingMac.mm:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::PlatformClockCM):
        * platform/mac/SoftLinking.h:
        * platform/mac/SystemVersionMac.mm:
        * platform/mac/WebCoreFullScreenPlaceholderView.h:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        * platform/mac/WebCoreFullScreenWarningView.h:
        * platform/mac/WebCoreFullScreenWarningView.mm:
        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreFullScreenWindow.mm:
        * platform/mac/WebCoreNSCellExtras.h:
        * platform/mac/WebCoreNSCellExtras.m:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]):
        * platform/network/BlobRegistry.cpp:
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/Credential.h:
        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::clearCredentials):
        * platform/network/CredentialStorage.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::builtinResourceHandleConstructorMap):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setDefaultAllowCookies):
        (WebCore::ResourceRequestBase::defaultAllowCookies):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::saveToPersistentStorage):
        * platform/network/cf/DNSCFNet.cpp:
        * platform/network/cf/ProxyServerCFNet.cpp:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::setMainResourceRequest):
        (WebCore::ResourceRequest::isMainResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::initializeHTTPConnectionSettingsOnStartup):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * platform/network/ios/NetworkStateNotifierIOS.cpp: Copied from Source/WebCore/platform/KillRingNone.cpp.
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::setIsOnLine):
        * platform/network/ios/QuickLook.h: Added.
        * platform/network/ios/QuickLook.mm: Added.
        * platform/network/ios/ResourceHandleIOS.mm: Added.
        * platform/network/ios/WebCoreURLResponseIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/network/ios/WebCoreURLResponseIOS.mm: Added.
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::saveToPersistentStorage):
        * platform/network/mac/ResourceErrorMac.mm:
        (dictionaryThatCanCode):
        (-[WebCustomNSURLError encodeWithCoder:]):
        (NSErrorFromCFError):
        (WebCore::ResourceError::nsError):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::synchronousWillSendRequestEnabled):
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::updateNSURLRequest):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks):
        * platform/network/mac/UTIUtilities.mm:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connectionShouldUseCredentialStorage:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::truncateDatabaseFile):
        * platform/sql/SQLiteFileSystem.h:
        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        (WebCore::SQLiteTransaction::stop):
        * platform/sql/ios/SQLiteDatabaseTracker.cpp: Added.
        * platform/sql/ios/SQLiteDatabaseTracker.h: Copied from Source/WebCore/platform/MemoryPressureHandler.cpp.
        * platform/sql/ios/SQLiteDatabaseTrackerClient.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/text/PlatformLocale.cpp:
        * platform/text/PlatformLocale.h:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::cursorMovementIterator):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):
        (WebCore::TextCodecICU::registerCodecs):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::canHyphenate):
        * platform/text/ios/LocalizedDateCache.h: Copied from Source/WebCore/platform/MemoryPressureHandler.h.
        * platform/text/ios/LocalizedDateCache.mm: Added.
        * platform/text/mac/CharsetData.h:
        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::formatDateTime):
        (WebCore::LocaleMac::maximumWidthForDateType):
        * platform/text/mac/TextBoundaries.mm:
        (WebCore::isSkipCharacter):
        (WebCore::isWhitespaceCharacter):
        (WebCore::isWordDelimitingCharacter):
        (WebCore::isSymbolCharacter):
        (WebCore::isAmbiguousBoundaryCharacter):
        (WebCore::tokenizerForString):
        (WebCore::findSimpleWordBoundary):
        (WebCore::findComplexWordBoundary):
        (WebCore::findWordBoundary):
        (WebCore::findNextWordFromIndex):
        * platform/text/mac/TextCodecMac.cpp:
        * platform/text/mac/TextCodecMac.h:

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

        Web Inspector: Consolidate developerExtrasEnabled to just InspectorEnvironment
        https://bugs.webkit.org/show_bug.cgi?id=126717

        Reviewed by Timothy Hatcher.

        They all route to InspectorEnvironment::developerExtrasEnabled, so make
        InspectorEnvironment available to all agents through InstrumentingAgents
        and use that where needed.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::enabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::create):
        (WebCore::InstrumentingAgents::inspectorEnvironment):
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageConsoleAgent.h:
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

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

        Web Inspector: Remove Unnecessary InspectorAgent parameters
        https://bugs.webkit.org/show_bug.cgi?id=126712

        Reviewed by Timothy Hatcher.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:

2014-01-09  Antti Koivisto  <antti@apple.com>

        Remove an accidentally left-behind static_cast.

        * dom/ElementDescendantIterator.h:
        (WebCore::ElementDescendantIteratorAdapter<ElementType>::beginAt):

2014-01-09  Antti Koivisto  <antti@apple.com>

        Replace ElementIteratorAdapter find() with beginAt()
        https://bugs.webkit.org/show_bug.cgi?id=126714

        Reviewed by Andreas Kling.

        ElementIteratorAdapter find() would return iterator for the argument element if it was
        of correct type and in the right subtree. This is not really what you would expect from find()
        so replace it with a simple beginAt() iterator construction function.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::getAllElementsById):
        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIteratorAdapter<ElementType>::beginAt):
        (WebCore::ElementChildConstIteratorAdapter<ElementType>::beginAt):
        * dom/ElementDescendantIterator.h:
        (WebCore::ElementDescendantIteratorAdapter<ElementType>::beginAt):
        (WebCore::ElementDescendantConstIteratorAdapter<ElementType>::beginAt):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):

2014-01-09  Brian Burg  <bburg@apple.com>

        REGRESSION (r160152): Selection drag snapshot doesn't appear or has the wrong content on Retina
        https://bugs.webkit.org/show_bug.cgi?id=125375

        Reviewed by Darin Adler.

        Move scaling of drag images by the device scale factor out of DragClient
        and into WebCore. This removes several redundant copies and scaling operations.

        Fix scaling bugs that were cancelled out by over-allocating the backing store.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag): Scale the drag image for a link
        according to the device scale factor before giving it to the OS.

        (WebCore::DragController::doImageDrag): Scale the drag image for an image
        according to the device scale factor before giving it to the OS.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect): Don't pre-scale or clip the snapshot. The
        ImageBuffer does this already.

        * platform/DragImage.cpp:
        (WebCore::createDragImageFromSnapshot): Don't scale the backing store
        when copying an ImageBuffer into an Image.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage): Draw the image in user-space coordinates,
        not in backing-store coordinates. Remove unnecessary assertions. Crop the
        buffer before drawing the image into it.

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

        Narrow underlines are too tall
        https://bugs.webkit.org/show_bug.cgi?id=126708

        Reviewed by Simon Fraser.

        I made a typo in r158392 and used was settings the line rect's
        height equal to its width. No one noticed because of the subsequent
        if statement.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-tall-underlines.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText):

2014-01-09  Antti Koivisto  <antti@apple.com>

        DocumentOrderedMap should use iterator
        https://bugs.webkit.org/show_bug.cgi?id=126696

        Reviewed by Andreas Kling.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesId):
        (WebCore::keyMatchesName):
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::keyMatchesLowercasedUsemap):
        (WebCore::keyMatchesLabelForAttribute):
        (WebCore::keyMatchesWindowNamedItem):
        (WebCore::keyMatchesDocumentNamedItem):
        
            Switch to Element references.

        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getAllElementsById):
        
             Use element iterator instead of ElementTraversal.

        * dom/DocumentOrderedMap.h:

2014-01-09  Beth Dakin  <bdakin@apple.com>

        Margin tiles are not repainted when background color changes
        https://bugs.webkit.org/show_bug.cgi?id=126541
        -and corresponding-
        <rdar://problem/15578131>

        Reviewed by Simon Fraser.

        This patch adds an optional parameter to GraphicsLayer::setNeedsDisplayInRect, 
        RenderLayerBacking::setContentsNeedDisplay(), and 
        RenderLayer::setBackingNeedsRepaint() that is used to determine whether or not to 
        clip the invalidation rect to the size of the layer. Then whenever the margin 
        needs to be repainted, we can call setNeedsDisplayInRect() with a rect that 
        includes the margin, and also indicate that it should not be clipped.

        GraphicsLayer now takes an optional parameter which is an enum called 
        ShouldClipToLayer.
        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplayInRect):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplayInRect):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

        Make TileController::bounds() a virtual function, and declare it on TiledBacking 
        so that we can call it from RenderLayerBacking.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:

        RenderLayer also now takes an optional parameter which is an enum called 
        ShouldClipToLayer.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:

        If the margin needs to be repainted, call GraphicsLayer::setNeedsDisplayInRect 
        with a big enough rect and a ShouldClipToLayer value of DoNotClipToLayer.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        * rendering/RenderLayerBacking.h:

        Whenever all of the root contents need to be repainted the margin will also need 
        to be repainted, so call setBackingNeedsRepaint() with the new parameter 
        indicating the the invalidation should NOT be clipped to the layer size.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintRootContents):

2014-01-09  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Factor the ReferenceBox type out of BasicShapes
        https://bugs.webkit.org/show_bug.cgi?id=126648

        Reviewed by Dirk Schulze.

        Moving ReferenceBox out of BasicShapes and into RenderStyleConstants
        as the LayoutBox enum. Most of the changes are removing the BasicShape
        namespace.

        Refactoring, no new tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBox):
        (WebCore::boxForValue):
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeRectangle::cssText):
        (WebCore::CSSBasicShapeRectangle::equals):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSDeprecatedBasicShapeCircle::cssText):
        (WebCore::CSSDeprecatedBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSDeprecatedBasicShapeEllipse::cssText):
        (WebCore::CSSDeprecatedBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::CSSBasicShapeInsetRectangle::cssText):
        (WebCore::CSSBasicShapeInsetRectangle::equals):
        (WebCore::CSSBasicShapeInset::cssText):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::layoutBox):
        (WebCore::CSSBasicShape::setLayoutBox):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):
        * rendering/ClipPathOperation.h:
        (WebCore::ShapeClipPathOperation::setReferenceBox):
        (WebCore::ShapeClipPathOperation::referenceBox):
        (WebCore::ShapeClipPathOperation::ShapeClipPathOperation):
        (WebCore::BoxClipPathOperation::create):
        (WebCore::BoxClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::BoxClipPathOperation):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createLayoutBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize):
        (WebCore::ShapeInfo::logicalTopOffset):
        (WebCore::ShapeInfo::logicalLeftOffset):
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):
        (WebCore::BasicShape::referenceBoxSize):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::layoutBox):
        (WebCore::BasicShape::setLayoutBox):
        (WebCore::BasicShape::BasicShape):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createLayoutBoxValue):
        (WebCore::ShapeValue::layoutBox):
        (WebCore::ShapeValue::ShapeValue):

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

        PDFDocumentImage can be very slow to do the initial paint
        https://bugs.webkit.org/show_bug.cgi?id=126633
        <rdar://problem/15770980>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::PDFDocumentImage):
        (WebCore::PDFDocumentImage::size):
        (WebCore::transformContextForPainting):
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        (WebCore::applyRotationForPainting):
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        Store rotation from the PDF in degrees, since it can
        only be 0, 90, 180, or 270, and don't do any trig to
        perform the rotation, to avoid introducing minor rounding
        issues in the size.

        Once we're going to paint, if the difference between the
        computed scale for each axis is due only to integer rounding
        of the image size, use the same scale for both axes, to avoid
        a CG slow-path which occurs whenever the scale is nonuniform.

2014-01-09  Antti Koivisto  <antti@apple.com>

        Disconnect child frames iteratively
        https://bugs.webkit.org/show_bug.cgi?id=126700

        Reviewed by Andreas Kling.

        Use descendant iterator instead of recursion for traversal.

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::disconnectDescendantFrames):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::assertConnectedSubrameCountIsConsistent):
        (WebCore::collectFrameOwners):
        (WebCore::disconnectSubframes):
        
            Get rid of the strange ChildFrameDisconnector class in favor of a function.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::disconnectSubframesIfNeeded):

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

        Unreviewed Windows build fix for r161563.

        Remove reference to removed file.

        * bindings/js/JSBindingsAllInOne.cpp:

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

        Web Inspector: Move InjectedScript classes into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=126598

        Part 6: Put it all together. Make WebCore use the JavaScriptCore InjectedScript files.

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Remove old InjectedScript files.

        * ForwardingHeaders/inspector/InjectedScript.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptBase.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptHost.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptManager.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptModule.h: Added.
        * ForwardingHeaders/inspector/InspectorEnvironment.h: Added.
        Expose headers to WebCore.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::developerExtrasEnabled):
        (WebCore::InspectorController::canAccessInspectedScriptState):
        (WebCore::InspectorController::functionCallHandler):
        (WebCore::InspectorController::evaluateHandler):
        (WebCore::InspectorController::willCallInjectedScriptFunction):
        (WebCore::InspectorController::didCallInjectedScriptFunction):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::functionCallHandler):
        (WebCore::WorkerInspectorController::evaluateHandler):
        (WebCore::WorkerInspectorController::willCallInjectedScriptFunction):
        (WebCore::WorkerInspectorController::didCallInjectedScriptFunction):
        Make both InspectorControllers in WebCore be InspectorEnvironments.

        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::evaluateHandlerFromAnyThread):
        Make JSC::evaluate wrapper like the existing JSC::call wrapper.
        These will be the ScriptFunctionCall implementations when debugging
        a WebCore::Page or worker, instead of the pure JSC versions.

        * inspector/PageInjectedScriptHost.h: Copied from Source/WebCore/inspector/CommandLineAPIModule.h.
        * inspector/PageInjectedScriptHost.cpp: Copied from Source/WebCore/inspector/PageInjectedScriptManager.cpp.
        (WebCore::PageInjectedScriptHost::type):
        (WebCore::PageInjectedScriptHost::isHTMLAllCollection):
        WebCore InjectedScriptHost implementation for DOM type handling.

        * inspector/PageInjectedScriptManager.h:
        * inspector/PageInjectedScriptManager.cpp:
        (WebCore::PageInjectedScriptManager::PageInjectedScriptManager):
        (WebCore::PageInjectedScriptManager::discardInjectedScriptsFor):
        WebCore InjectedScriptManager implementation for CommandLineAPI and
        specialized DOMWindow injected script management.

        * bindings/js/JSBindingsAllInOne.cpp:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::host):
        * inspector/CommandLineAPIModule.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::InjectedScriptCanvasModule):
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        (WebCore::InspectorCanvasAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::injectedScriptManager):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::create):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::injectedScriptManager):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        (WebCore::PageRuntimeAgent::create):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        (WebCore::WorkerConsoleAgent::create):
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        * inspector/WorkerRuntimeAgent.h:
        (WebCore::WorkerRuntimeAgent::create):
        Switch to using the Inspector namespace and JSC InjectedScript files.

        * bindings/js/JSInjectedScriptManager.cpp: Removed.
        * inspector/InjectedScript.h: Removed.
        * inspector/InjectedScriptHost.cpp: Removed.
        * inspector/InjectedScriptHost.h: Removed.
        * inspector/InjectedScriptHost.idl: Removed.


        Part 4: Move all inspector scripts into JavaScriptCore and update generators.

        With the updated location switch to using the appropriate INSPECTOR_SCRIPTS_DIR
        variable which defines where the scripts are.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:


        Part 1: Extract InspectorInstrumentationCookie class from InspectorInstrumentation.

        Currently InjectedScriptBase uses InspectorInstrumentation directly
        to track calling into JavaScript for timeline purposes. We will remove
        the direct call from InjectedScriptBase and extracting the Cookie class
        will make that easier.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentationCookie.cpp: Added.
        (WebCore::InspectorInstrumentationCookie::InspectorInstrumentationCookie):
        (WebCore::InspectorInstrumentationCookie::operator=):
        (WebCore::InspectorInstrumentationCookie::~InspectorInstrumentationCookie):
        * inspector/InspectorInstrumentationCookie.h: Added.
        (WebCore::InspectorInstrumentationCookie::isValid):
        (WebCore::InspectorInstrumentationCookie::instrumentingAgents):
        (WebCore::InspectorInstrumentationCookie::hasMatchingTimelineAgentId):

2014-01-09  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Cannot select multiple non-adjacent items in a multiple select control with the keyboard only
        https://bugs.webkit.org/show_bug.cgi?id=15816

        Reviewed by Chris Fleizach.

        Test: fast/forms/listbox-non-contiguous-keyboard-selection.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        New member m_allowsNonContiguousSelection defaults to false
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Tracking CTRL modifier to start multiple non contiguous selection
        * html/HTMLSelectElement.h: New member m_allowsNonContiguousSelection
        (WebCore::HTMLSelectElement::allowsNonContiguousSelection): New getter
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        Following implementation made for spatial navigation

2014-01-09  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove unused overriding protocols.
        https://bugs.webkit.org/show_bug.cgi?id=126630

        Reviewed by Timothy Hatcher.

        No new tests, No change in behavior.

        Remove unused overriding protocols as these are not used anymore in Frontned.
        -Page.setGeolocationOverride
        -Page.clearGeolocationOverride
        -Page.canOverrideGeolocation
        -Page.setDeviceOrientationOverride
        -Page.clearDeviceOrientationOverride
        -Page.canOverrideGeolocation
        -Network.setUserAgentOverride

        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::create):
        (WebCore::GeolocationController::positionChanged):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::create):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::provideDeviceOrientationTo):
        * dom/DeviceOrientationController.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorResourceAgent.h:
        * inspector/protocol/Network.json:
        * inspector/protocol/Page.json:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent):

2014-01-09  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] Move regions auto-size code into RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=122959

        Reviewed by Mihnea Ovidenie.

        Move the auto-height logic from RenderRegion to RenderNamedFlowFragment because it's
        used only by the CSS Regions implementation.

        Bug 126642 covers the auto-height logic move from RenderFlowThread to RenderNamedFlowThread.

        Tests: No new tests, just refactorings.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::styleDidChange):
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::incrementAutoLogicalHeightCount):
        (WebCore::RenderNamedFlowFragment::decrementAutoLogicalHeightCount):
        (WebCore::RenderNamedFlowFragment::updateRegionHasAutoLogicalHeightFlag):
        (WebCore::RenderNamedFlowFragment::updateLogicalHeight):
        (WebCore::RenderNamedFlowFragment::pageLogicalHeight):
        (WebCore::RenderNamedFlowFragment::layoutBlock):
        (WebCore::RenderNamedFlowFragment::attachRegion):
        (WebCore::RenderNamedFlowFragment::detachRegion):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::pageLogicalHeight):
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent):
        (WebCore::RenderRegion::isLastRegion):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::attachRegion):
        (WebCore::RenderRegion::detachRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2014-01-09  Antti Koivisto  <antti@apple.com>

        Switch HTMLTableRowsCollection from Traversal<> to iterators
        https://bugs.webkit.org/show_bug.cgi?id=126684

        Reviewed by Andreas Kling.

        This is the last remaining client of Traversal<> outside the iterator implementation.

        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIteratorAdapter<ElementType>::find):
        (WebCore::ElementChildConstIteratorAdapter<ElementType>::find):
        
            Add find with the same semantics as ElementDescendantIterator::find.

        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):
        (WebCore::HTMLTableRowsCollection::lastRow):

2014-01-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r161176): http/tests/misc/authentication-redirect-3/authentication-sent-to-redirect-same-origin-with-location-credentials.html is failing on GTK
        https://bugs.webkit.org/show_bug.cgi?id=126518

        Reviewed by Martin Robinson.

        Clear the credentials before calling willSendRequest on the client
        to avoid sending the credentials to the API layer, but apply them
        again to the request right before creating the new SoupRequest.

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

2014-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161532.
        http://trac.webkit.org/changeset/161532
        https://bugs.webkit.org/show_bug.cgi?id=126677

        Caused lots of assertion failures (Requested by ap on
        #webkit).

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::didTimeout):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadEnd):
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::fired):
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchEventAndLoadEnd):
        * xml/XMLHttpRequestUpload.h:

2014-01-08  Brian Burg  <bburg@apple.com>

        Clean up confusing names and calculations in image-dragging functions
        https://bugs.webkit.org/show_bug.cgi?id=126661

        Reviewed by Timothy Hatcher.

        No new tests.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag): rename variables and
        simplify the calculation of the image's scaled origin.

        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize): rename variables.

2014-01-08  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove InspectorClient::captureScreenshot()
        https://bugs.webkit.org/show_bug.cgi?id=126616

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        Remove leftover mothod as Page.captureScreenshot API was removed in r160202.

        * inspector/InspectorClient.h:

2014-01-08  Youenn Fablet  <youennf@gmail.com>

        Correctly set XHR loadend attributes (loaded and total).
        https://bugs.webkit.org/show_bug.cgi?id=120828

        Reviewed by Alexey Proskuryakov.
        
        Added correct initialization of lengthComputable, loaded and total attributes 
        to XHR ProgressEvent events (load, loadstart, loadend, abort, error and timeout).

        XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload now keep persistent knowledge 
        of m_loaded and m_total values with this patch.
        
        Code refactoring to handle event dispatching in case of error in a single manner.
        XMLHttpRequestProgressEventThrottle::dispatchProgressEvent is renamed as dispatchThrottledProgressEvent
        XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadend is replaced by dispatchProgressEvent(const AtomicString&)

        Tests: http/tests/xmlhttprequest/loadstart-event-init.html
               http/tests/xmlhttprequest/onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/onload-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onload-progressevent-attributes.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): changed readystatechange event from ProgressEvent to Event (not cancellable, not bubblable) to better match the spec 
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::networkError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::abortError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::dispatchErrorEvents): dispatch progress events in case of error
        (WebCore::XMLHttpRequest::didTimeout): code refactoring to handle error event dispatching in a single way
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: before the patch, the fact that a progress event is being throttled is stored indirectly (m_loaded or m_total not equal to zero). With the patch, this information is stored in m_hasThrottledProgressEvent. The m_loaded and m_total values are no longer set back to zero after a progress event is dispatched. This allows using these values to correctly initialize other ProgressEvent events (in particular loadend, abort, timeout...) 
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent): always update the new m_loaded and m_total values. If progress event is not sent as part of the function call, store the fact that a progress event is being throttled through m_hasThrottledProgressEvent. 
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): used to send any ProgressEvent event that is not be throttled
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h: introduced m_hasThrottledProgressEvent which stores whether a progress event is being throttled and m_computableLength which is used to initialize ProgressEvent computableLength
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h: introduced m_loaded, m_total and m_lengthComputable, similarly to XMLHttpRequestProgressEventThrottle

2014-01-08  Tim Horton  <timothy_horton@apple.com>

        TileController can fail to receive exposedRect from the drawing area if set at the wrong time
        https://bugs.webkit.org/show_bug.cgi?id=126536

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export some things.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setExposedRect):
        Store the exposed rect on FrameView. When it changes, if the main frame
        has a TiledBacking, inform it of the change.

        * page/FrameView.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Make use of the fact that we can test if a rect is infinite
        instead of having a separate boolean property for that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computeTileCoverage):
        Push the FrameView's cached exposed rect down into the TiledBacking when it is created.
        We only support clipping for the main frame TileController for now.

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

        a fractional value of the css letter-spacing property is not rendered as expected
        https://bugs.webkit.org/show_bug.cgi?id=20606

        Reviewed by Simon Fraser.

        This turns on fractional letter-spacing and word-spacing CSS values.
        It is taken mostly from Blink r153727 and iOS. Updating the relevant
        types is all that is necessary

        Existing tests have been updated.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (WebCore::Font::wordSpacing):
        (WebCore::Font::letterSpacing):
        (WebCore::Font::setWordSpacing):
        (WebCore::Font::setLetterSpacing):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::wordSpacing):
        (WebCore::RenderStyle::letterSpacing):
        (WebCore::RenderStyle::setWordSpacing):
        (WebCore::RenderStyle::setLetterSpacing):
        * rendering/style/RenderStyle.h:

2014-01-08  Anders Carlsson  <andersca@apple.com>

        Add WTF::StringView and use it for grammar checking
        https://bugs.webkit.org/show_bug.cgi?id=126644

        Reviewed by Antti Koivisto.

        Use a StringView in TextCheckerClient::checkTextOfParagraph to avoid upconverting strings unnecessarily.

        * editing/TextCheckingHelper.cpp:
        (WebCore::checkTextOfParagraph):
        Pass a StringView to TextCheckerClient::checkTextOfParagraph.
        
        * loader/EmptyClients.h:
        Update for TextCheckerClient changes.

        * platform/text/TextCheckerClient.h:
        Change TextCheckerClient::checkTextOfParagraph to take a StringView.
        
2014-01-08  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed Windows build fix attempt after r161481.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2014-01-08  Andreas Kling  <akling@apple.com>

        Deploy RenderPtr in RenderMathMLOperator::updateFromElement().
        <https://webkit.org/b/126628>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):

            Use RenderPtr/createRenderer for renderer creation.
            Removed an unnecessary null check (text is always created.)
            Also use RenderStyle::createAnonymousStyleWithDisplay()
            helper to shorten down the code a bit.

2014-01-08  Alberto Garcia  <berto@igalia.com>

        Fix some compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=126635

        Reviewed by Csaba Osztrogonác.

        Remove code that is no longer being used.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/gtk/PopupMenuGtk.cpp:
        * platform/gtk/RedirectedXCompositeWindow.h:

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

        [Automake] Scripts for generated build targets do not necessarily produce their output
        https://bugs.webkit.org/show_bug.cgi?id=126378

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Touch the build targets that are generated through helper scripts that don't
        assure the output is generated every time the script is invoked, most commonly due to unchanged
        * bindings/gobject/GNUmakefile.am: Simply move the gdom-gen-symbols file into the output file
        instead of copying it if the contents differ and removing it. This again ensures that the output
        file is always newer than its dependencies, even if the input hasn't changed.

2014-01-08  Frédéric Wang  <fred.wang@free.fr>

        Remove invalid comments from mathtags.ing
        https://bugs.webkit.org/show_bug.cgi?id=126629

        Reviewed by Chris Fleizach.

        * mathml/mathtags.in:

2014-01-08  Andreas Kling  <akling@apple.com>

        RenderMathMLRow::createAnonymousWithParentRenderer() should return RenderPtr.
        <https://webkit.org/b/126631>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):

            Tweak to return RenderPtr<RenderMathMLRow> and removed comment(!)
            about how this should return a smart pointer. Also take the
            parent renderer as a RenderMathMLRoot& instead of a RenderObject*
            since that's all we ever pass.

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::addChild):

            Updated for new createAnonymousWithParentRenderer() signature.

2014-01-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: Make roleValue() return DescriptionListRole for <dl> elements
        https://bugs.webkit.org/show_bug.cgi?id=126579

        Reviewed by Chris Fleizach.

        Implement AccessibilityList::roleValue() so it will return
        ListRole or DescriptionListRole depending on the type of list.

        No new tests needed, as no new functionality was added and ports
        should still be exposing the right role for <dl> elements

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

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Removed extra checks for objects with ListRole role.

2014-01-08  Andreas Kling  <akling@apple.com>

        createMathMLOperator() should return RenderPtr.
        <https://webkit.org/b/126622>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):

            Make this return a RenderPtr<RenderMathMLOperator>.

        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):

            Updated for the new createMathMLOperator() signature.

2014-01-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (r161195): Acid2 regression tests frequently fail
        https://bugs.webkit.org/show_bug.cgi?id=126432

        Reviewed by Anders Carlsson.
        
        We would occasionally dump the render tree before the actual last resource on the page was loaded.
        The problematic resource is an image loaded by an <object> tag nested as fallback of another <object>.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        
            Force style recalc when rendering fallback content. The current mechanism for triggering the fallback content load
            requires a style recalc.

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

        createAnonymousMathMLBlock() should return RenderPtr.
        <https://webkit.org/b/126583>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):

            Make this return a RenderPtr<RenderMathMLBlock> and removed the
            EDisplay argument since it was always using the default (FLEX.)

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::addChild):

            Updated for the new createAnonymousMathMLBlock() signature.

2014-01-07  Eric Carlson  <eric.carlson@apple.com>

        Teach MediaSessionManager to manage interruptions
        https://bugs.webkit.org/show_bug.cgi?id=126530

        Reviewed by Sam Weinig.

        Tests: media/video-interruption-active-when-element-created.html
               media/video-interruption-with-resume-allowing-play.html
               media/video-interruption-with-resume-not-allowing-play.html

        * WebCore.exp.in: Export functions needed by Internals.

        Add MediaSession and MediaSessionManager.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        Automatically pause/play for interruptions. Move media restriction management to a MediaSession.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Get rid of m_loadInitiatedByUserGesture and m_userStartedPlayback,
            they aren't needed.
        (WebCore::HTMLMediaElement::load): Ditto.
        (WebCore::HTMLMediaElement::loadInternal): Use the media session to manage restrictions.
        (WebCore::HTMLMediaElement::play): Remove redundant iOS code. Postpone playback if called 
            during an interruption.
        (WebCore::HTMLMediaElement::pause): Remember to not resume playback when it ends if called during
            an interruption.
        (WebCore::HTMLMediaElement::potentiallyPlaying): Rearrange code to make it easier to understand.
        (WebCore::HTMLMediaElement::couldPlayIfEnoughData): Ditto.
        (WebCore::HTMLMediaElement::pausedForUserInteraction): Return true if paused because of an interruption.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Be explicit about
            which restrictions are removed.
        (WebCore::HTMLMediaElement::mediaType): MediaSessionManager::<Type> -> MediaSession::<Type>.
        (WebCore::HTMLMediaElement::beginInterruption): New.
        (WebCore::HTMLMediaElement::endInterruption): Ditto.
        * html/HTMLMediaElement.h:

        Pulled MediaSessionManagerToken out of MediaSessionManager.cpp, added functionality to manage interruptions.
        * platform/audio/MediaSession.cpp: Added.
        (WebCore::MediaSession::create):
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::~MediaSession):
        (WebCore::MediaSession::beginInterruption): Inform client of interruption state change.
        (WebCore::MediaSession::endInterruption): Ditto.
        * platform/audio/MediaSession.h: Added.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Initialize interruption counter.
        (WebCore::MediaSessionManager::has): MediaType is defined in MediaSession.
        (WebCore::MediaSessionManager::count): Ditto.
        (WebCore::MediaSessionManager::beginInterruption): Inform all clients of interruption start if
            not already in an interruption.
        (WebCore::MediaSessionManager::endInterruption): Inform all clients if interruption has ended.
        (WebCore::MediaSessionManager::addSession): Renamed from addToken. Set session interruption state.
        (WebCore::MediaSessionManager::removeSession): Renamed from removeToken.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): MediaSessionManagerToken -> MediaSession.
        * platform/audio/mac/AudioDestinationMac.h:

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): Ditto.

        Make it possible for tests to begin and end interruptions.
        * testing/Internals.cpp:
        (WebCore::Internals::beginMediaSessionInterruption):
        (WebCore::Internals::endMediaSessionInterruption):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-07  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove leftover 'device metrics' code
        https://bugs.webkit.org/show_bug.cgi?id=126607

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        Removes unused code related to 'device metrics'.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        * inspector/InspectorClient.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::didLayout):
        * inspector/InspectorPageAgent.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        * page/Screen.cpp:
        (WebCore::Screen::height):
        (WebCore::Screen::width):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):

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

        [iOS] Upstream remainder of minimal-ui viewport changes
        https://bugs.webkit.org/show_bug.cgi?id=126410

        Reviewed by Sam Weinig.

        * dom/ViewportArguments.h:

2014-01-07  Victor Costan  <costan@gmail.com>

        createElementNS handles element name 'xmlns' correctly.
        https://bugs.webkit.org/show_bug.cgi?id=126553

        Reviewed by Alexey Proskuryakov.

        Tests: fast/dom/createElementNS-namespace-errors.html
               fast/dom/setAttributeNS-namespace-errors.html

        * dom/Document.cpp:
        (WebCore::Document::hasValidNamespaceForElements): updated to match DOM3/DOM4 spec.
        (WebCore::Document::hasValidNamespaceForAttributes): updated to match DOM3/DOM4 spec.

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

        PlatformLayer containing scrollbars does not disappear when setting overflow:hidden on page root, until resize.
        https://bugs.webkit.org/show_bug.cgi?id=116051

        Reviewed by Simon Fraser.

        Move the pre-existing call to addedOrRemovedScrollbar() outside of the else-statement
        in updateScrollbars() so that changes made in the if-statement cause the scrollbar
        layers to be updated. The scrollbarAddedOrRemoved local variable guarding access to
        addedOrRemovedScrollbar() is already being set (but never checked) inside the if-statement.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2014-01-06  Jer Noble  <jer.noble@apple.com>

        HTML5 video tag Does Not Load in Apache htaccess/htpasswd Protected Directory
        https://bugs.webkit.org/show_bug.cgi?id=40382

        Reviewed by Eric Carlson.

        Test: http/tests/media/video-auth.html

        Adopt a new AVFoundation API to handle authentication challenge generated while loading
        media through an AVAsset. The authentication request comes through as a
        NSURLAuthenticationChallenge, and is wrapped in a WebCore::AuthenticationChallenge
        by MediaPlayerPrivateAVFoundationObjC, and is sent up to the HTMLMediaElement to handle.
        The HTMLMediaElement creates a ResourceRequest, and passes the challenge up to the
        ResourceLoadNotifier.

        To allow the HTMLMediaElement to initiate handling an AuthenticationChallenge without
        actually creating a ResourceLoader, allow ResourceLoaderDelegate to accept a unique
        identifier and a DocumentLoader in lieu of a ResourceLoader.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        * loader/ResourceLoadNotifier.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::shouldWaitForResponseToAuthenticationChallenge):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerShouldWaitForResponseToAuthenticationChallenge):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):

2014-01-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161447.
        http://trac.webkit.org/changeset/161447
        https://bugs.webkit.org/show_bug.cgi?id=126592

        needs some more work (Requested by thorton on #webkit).

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::setExposedRect):
        (WebCore::TileController::setClipsToExposedRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        * rendering/RenderLayerBacking.h:

2014-01-07  Tim Horton  <timothy_horton@apple.com>

        TileController can fail to receive exposedRect from the drawing area if set at the wrong time
        https://bugs.webkit.org/show_bug.cgi?id=126536

        Reviewed by Anders Carlsson.

        Move exposedRect to FrameView so it can be pushed in from WebKit before we have
        a TiledBacking, and can be retrieved by the TiledBacking when it needs to.

        * WebCore.exp.in:
        Export some things.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setExposedRect):
        * page/FrameView.h:
        Store the exposed rect on FrameView. When it changes, if the main frame
        has a TiledBacking, inform it of the change.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::exposedRect):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        Plumbing so that TileController can retrieve the exposedRect from FrameView.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::platformCALayerExposedRect):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::exposedRectDidChange):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Don't store the exposed rect or clipsToExposedRect on TileController.
        Instead, retrieve it from our client.
        Make use of the fact that we can test if a rect is infinite
        instead of having a separate boolean property for that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        (WebCore::RenderLayerBacking::exposedRect):
        Hand the FrameView's exposedRect back to our GraphicsLayer.
        We only support clipping for the main frame TileController for now.

        * rendering/RenderLayerBacking.h:

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

        REGRESSION(r161381): [GTK] Rendering is broken in GTK after r161381
        https://bugs.webkit.org/show_bug.cgi?id=126570

        Reviewed by Tim Horton.

        Use LayoutRect::infiniteRect() instead of IntRect::infiniteRect()
        when a LayoutRect is expected.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):

2014-01-07  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Change default value from 'auto' to 'none'
        https://bugs.webkit.org/show_bug.cgi?id=126544

        Reviewed by Sam Weinig.

        Update the CSS infrastructure to accept 'none' as the default value
        for shape-inside and shape-outside.

        Updated existing parsing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * rendering/style/ShapeValue.h:

2014-01-07  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-outside layout incorrect when line spans rounded box rounded corners
        https://bugs.webkit.org/show_bug.cgi?id=126528

        Reviewed by Andreas Kling.

        BoxShape::getExcludedIntervals() now checks for the special case where the line spans the
        top and bottom rounded corners - which implies that the excluded interval is the box's
        horizontal extent.

        Test: fast/shapes/shape-outside-floats/shape-outside-line-spans-box-corners.html

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedIntervals):

2014-01-07  Alexey Proskuryakov  <ap@apple.com>

        Debug biuld fix.

        Replace actionTag with mactionTag in assertions.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex):
        (WebCore::MathMLSelectElement::getSelectedActionChild):

2014-01-07  Frédéric Wang  <fred.wang@free.fr>

        Add Support for the semantics element.
        https://bugs.webkit.org/show_bug.cgi?id=100626

        Reviewed by Chris Fleizach.

        Tests: mathml/presentation/semantics-2.html
               mathml/presentation/semantics-3.html
               mathml/presentation/semantics-4.html

        This provides a complete support for the semantics element. When the first child is a content MathML, an annotation can be selected and displayed. The selection algorithm is identical to Gecko's one. The recognized annotations are text (e.g. LaTeX), presentation MathML, SVG and HTML.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::childShouldCreateRenderer):
        (WebCore::MathMLElement::attributeChanged):
        (WebCore::MathMLElement::isPresentationMathML):
        * mathml/MathMLElement.h:
        (WebCore::MathMLElement::isMathMLToken):
        (WebCore::MathMLElement::isSemanticAnnotation):
        (WebCore::MathMLElement::isPresentationMathML):
        (WebCore::MathMLElement::updateSelectedChild):
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex):
        (WebCore::MathMLSelectElement::getSelectedActionChild):
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild):
        (WebCore::MathMLSelectElement::updateSelectedChild):
        (WebCore::MathMLSelectElement::toggle):
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.h:
        * mathml/mathattrs.in:
        * mathml/mathtags.in:

2014-01-07  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Fix compilation issue with GLES2 after http://webkit.org/b/126548
        https://bugs.webkit.org/show_bug.cgi?id=126578

        Reviewed by  Brent Fulgham

        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp: added GLES2/gl2.h include

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

        Remove some extra includes from XML.
        https://bugs.webkit.org/show_bug.cgi?id=126572

        Reviewed by Anders Carlsson.

        No new tests, no functionality changed.

        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequestUpload.cpp:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathEvaluator.cpp:
        * xml/XPathExpression.cpp:
        * xml/XPathExpressionNode.cpp:
        * xml/XPathFunctions.cpp:
        * xml/XPathNodeSet.cpp:
        * xml/XPathParser.cpp:
        * xml/XPathPath.cpp:
        * xml/XPathPredicate.cpp:
        * xml/XPathPredicate.h:
        * xml/XPathResult.cpp:
        * xml/XPathValue.cpp:
        * xml/XPathVariableReference.cpp:
        * xml/XSLImportRule.cpp:
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2014-01-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add toHTMLTableSectionElement() functions, and use it
        https://bugs.webkit.org/show_bug.cgi?id=126418

        Reviewed by Andreas Kling.

        HTMLTableSectionElement covers tbody, tfoot, and thead tags. So, we can't
        generate isHTMLTableSectionElement() by using template. This patch add
        toHTMLTableSectionElement() manually in order to cleanup static_cast<>.

        No new tests, no behavior change.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:

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

        Remove some extra includes from SVG.
        https://bugs.webkit.org/show_bug.cgi?id=126565

        Reviewed by Dirk Schulze.

        No new tests, no functionality changed.

        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGContainer.cpp:
        * rendering/svg/RenderSVGEllipse.cpp:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGModelObject.cpp:
        * rendering/svg/RenderSVGPath.cpp:
        * rendering/svg/RenderSVGRect.cpp:
        * rendering/svg/RenderSVGResource.cpp:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * rendering/svg/SVGRenderingContext.cpp:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGResourcesCache.cpp:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGTextChunk.cpp:
        * rendering/svg/SVGTextChunkBuilder.cpp:
        * rendering/svg/SVGTextLayoutAttributes.h:
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp:
        * rendering/svg/SVGTextLayoutEngine.h:
        * rendering/svg/SVGTextMetricsBuilder.h:
        * rendering/svg/SVGTextQuery.cpp:
        * rendering/svg/SVGTextRunRenderingContext.cpp:

2014-01-07  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-checked mixed state as ATK_STATE_INDETERMINATE
        https://bugs.webkit.org/show_bug.cgi?id=125855

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/aria-checked-mixed-value.html

        Expose ATK_STATE_INDETERMINATE to support aria-checked mixed state
        for radio and checkbox types.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2014-01-07  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126562> DOMProgressEvent has unspecified availability

        Reviewed by Ryosuke Niwa.

        * bindings/objc/PublicDOMInterfaces.h: Add DOMProgressEvent. It first appeared in 10.6.

2014-01-07  Mark Rowe  <mrowe@apple.com>

        Another Mountain Lion build fix.

        The Mountain Lion version of NS_DEPRECATED_MAC generates a reference to a nonexistent
        availability macro when the introduced and deprecated versions are the same. Follow
        AppKit's lead in working around this by defining the macros that will be referenced
        for the various possible OS version numbers. This isn't an issue on newer versions of
        OS X as the Foundation availability macros expand directly in to __attributes__ rather
        than in to the legacy availability maros.

        * bindings/objc/WebKitAvailability.h:

2014-01-06  Mark Rowe  <mrowe@apple.com>

        Mountain Lion build fix.

        * bindings/objc/WebKitAvailability.h: #define __AVAILABILITY_INTERNAL__MAC_TBD so that
        the TBD version works on Mountain Lion. Newer OS versions use a slightly different set
        of macros that already support this version. Add a missing #include so that defintions
        of the Foundation availability macros can be found even if no other Foundation headers
        were included first.

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

        Unreviewed, rolling out r161401.
        http://trac.webkit.org/changeset/161401
        https://bugs.webkit.org/show_bug.cgi?id=126418

        REGRESSION(r161401): Break layout test on mac-wk1(Debug)

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:

2014-01-05  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126500> Move Objective-C DOM bindings off the legacy WebKit availability macros

        The legacy WebKit availability macros are verbose, confusing, and provide no benefit
        over using the system availability macros directly. The original vision was that
        they'd serve a cross-platform purpose but that never came to be.

        The OS X version used in the new availability macros is based on the mapping in
        JavaScriptCore/WebKitAvailability.h.

        Part of <rdar://problem/15512304>.

        Reviewed by Sam Weinig.

        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMEventException.h:
        * bindings/objc/DOMException.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMObject.h:
        * bindings/objc/DOMRangeException.h:
        * bindings/objc/DOMXPathException.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/objc/WebScriptObject.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):
        (GenerateHeader): Tag enums with WK_ENUM_AVAILABLE_MAC and classes with WEBKIT_CLASS_AVAILABLE_MAC.
        Remove the #ifs that we were previously generating now that enums are appropriately tagged.
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObjectInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallbackInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetterInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.h:
        * bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestExceptionInternal.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListenerInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNode.h:
        * bindings/scripts/test/ObjC/DOMTestNodeInternal.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObjInternal.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructorsInternal.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefsInternal.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:
        * bindings/scripts/test/ObjC/DOMattributeInternal.h:
        * bindings/scripts/test/ObjC/DOMreadonly.h:
        * bindings/scripts/test/ObjC/DOMreadonlyInternal.h:

2014-01-06  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r157851): trailing space inside an editable region could be erroneously collapsed
        https://bugs.webkit.org/show_bug.cgi?id=126549

        Reviewed by Sam Weinig.

        The regression was caused by erroneous use of m_currentCharacterIsSpace in place of m_currentCharacterIsWS.

        See the following two lines before the refactoring:
        http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp?rev=157850#L3074
        http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp?rev=157850#L3198

        I've also cross-checked other places where m_currentCharacterIsSpace and m_currentCharacterIsWS are used.

        Test: editing/inserting/inserting-trailing-space-and-letter.html

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove canOverrideDeviceMetrics and setDeviceMetricsOverride from protocol
        https://bugs.webkit.org/show_bug.cgi?id=126149

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        These are not used anywhere in WebInspectorUI.
        So, it removes unused Protocols and APIs.

        * inspector/InspectorClient.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::disable):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:

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

        Add toHTMLTableSectionElement() functions, and use it
        https://bugs.webkit.org/show_bug.cgi?id=126418

        Reviewed by Anders Carlsson.

        HTMLTableSectionElement covers tbody, tfoot, and thead tags. So, we can't
        generate isHTMLTableSectionElement() by using template. This patch add
        toHTMLTableSectionElement() manually in order to cleanup static_cast<>.

        No new tests, no behavior change.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126559> Be more correct in dealing with NSControlSize

        Reviewed by Ryosuke Niwa.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarControlSizeToNSControlSize): Helper function to map from ScrollbarControlSize
        to NSControlSize.
        (WebCore::ScrollbarThemeMac::registerScrollbar): Use the helper rather than casting.
        (WebCore::ScrollbarThemeMac::scrollbarThickness): Use the helper.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::progressBarRectForBounds): Update the type of the local to NSControlSize.
        (WebCore::RenderThemeMac::paintProgressBar): Ditto.

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

        [WebGL] Be safer about toggling OpenGL state by using a scoped object to control setting lifetime.
        https://bugs.webkit.org/show_bug.cgi?id=126548

        Reviewed by Anders Carlsson.

        No new tests since there is no change in behavior.

        * GNUmakefile.list.am: Updated to build new TemporaryOpenGLSetting files.
        * PlatformBlackBerry.cmake: Ditto
        * PlatformEfl.cmake: Ditto
        * PlatformGTK.cmake: Ditto
        * PlatformNix.cmake: Ditto
        * WebCore.vcxproj/WebCore.vcxproj: Ditto
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto
        * WebCore.xcodeproj/project.pbxproj: Ditto
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Use new object.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Ditto
        (WebCore::GraphicsContext3D::reshape): Ditto
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp: Added.
        (WebCore::TemporaryOpenGLSetting::TemporaryOpenGLSetting):
        (WebCore::TemporaryOpenGLSetting::~TemporaryOpenGLSetting):
        * platform/graphics/opengl/TemporaryOpenGLSetting.h: Added.

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

        Hook up the RemoteScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=126547

        Reviewed by Tim Horton.

        Export lots of scrolling-related symbols for use by WebKit2.

        * WebCore.exp.in:

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove support for FileSystem in Frontend.
        https://bugs.webkit.org/show_bug.cgi?id=126369

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        Remove leftover codes from protocol after r156692.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/protocol/FileSystem.json: Removed.

2014-01-06  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] ASSERTION FAILED: m_segmentRanges.size() < m_segments.size()
        https://bugs.webkit.org/show_bug.cgi?id=125770

        Reviewed by Bem Jones-Bey.

        When we have an e.g. up-side-down triangle, when the content doesn't fit in the bottom part of the shape,
        and the adjusted content flows into the next region with a shape, we need to update the actual shape
        and region. Since it wasn't updated, it led to a shape mismatch, which led to assert/layout error.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-regions-bottom-adjustment.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebiCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread): Update current shape
        and region, when adjustment occured.

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of Inspector/BindingVisitors.h
        https://bugs.webkit.org/show_bug.cgi?id=126374

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        In r161204, methods related to BindingVisitors was removed.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfiler.h:
        * inspector/BindingVisitors.h: Removed.
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorMemoryAgent.cpp:

2014-01-06  Tim Horton  <timothy_horton@apple.com>

        Add {IntRect, FloatRect}::infiniteRect() and ::isInfinite()
        https://bugs.webkit.org/show_bug.cgi?id=126537

        Reviewed by Simon Fraser.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::infiniteRect):
        (WebCore::FloatRect::isInfinite):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::infiniteRect):
        (WebCore::IntRect::isInfinite):
        Add infiniteRect() and isInfinite() to FloatRect and IntRect.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer):
        Adopt the new functions.

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of DOM.setFileInputFiles from Protocol
        https://bugs.webkit.org/show_bug.cgi?id=126312

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        It is a dead code as all ports in WebKit don't support it.
        And this patch removes all things related to DOM.setFileInputFiles in Frontend.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/protocol/DOM.json:

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

        [WebGL] Revise String Concatenation (Follow-up to r161247)
        https://bugs.webkit.org/show_bug.cgi?id=126411

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Use more efficient string
        concatenation per Darin Adler's suggestion.

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

        [WebGL] FBO Depth Buffer Attachment Function Improperly Clearing with 0
        https://bugs.webkit.org/show_bug.cgi?id=126538
        <rdar://problem/15201336>

        Reviewed by Dean Jackson.

        Tested by webgl/1.0.2/resources/webgl_test_files/conformance/renderbuffers/framebuffer-object-attachment.html

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::initializeAttachments): Clear depth buffer with 1.0f (rather than 0), to match expected
        default (clear) buffer state for OpenGL. Using 0 would require us to flip the clear mask for the depth attachment
        type.

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

        Add new files for UI-side scrolling
        https://bugs.webkit.org/show_bug.cgi?id=126532

        Reviewed by Anders Carlson.

        * WebCore.xcodeproj/project.pbxproj: Make lots of scrolling-related headers Private
        so WebKit2 can include them.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scheduleUpdateScrollPositionForNode): Callback that
        indicates that the given node has been scrolled asynchronously. Currently only
        handles the main frame.
        * page/scrolling/ScrollingCoordinator.h: Add support for type-casts of a remote subclass
        in another namespace.
        (WebCore::ScrollingCoordinator::isRemoteScrollingCoordinator):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isRemoteScrollingTree):

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Move ViewState to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126488

        Reviewed by Anders Carlson.

        This change also partial reverts handling of LayerHostingMode, making this
        a separate message again. With hindsight the new way of doing this wasn't
        in all ways simpler, and it won't make sense to move this to WebCore.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ViewState.h: Added.
            - Moved from WebKit2, will be used by Page & FocusController.

2014-01-06  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Fix the build for the WebKitGTK+ developer configuration
        https://bugs.webkit.org/show_bug.cgi?id=126505

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Add missing IDLS and source files to the lists.
        * PlatformGTK.cmake: Add missing include directories and source files to the lists.
        Use the GeoClue, GUdev, and gio-unix include paths and libraries and sort the list
        of WebCore include directories.
        * UseJSC.cmake: Align the sourced list with the contents of the bindings/js directory.

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Unreviewed speculative Windows build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
            - Added UserActivity.cpp/.h.

2014-01-06  peavo@outlook.com  <peavo@outlook.com>

        [Win] Link error.
        https://bugs.webkit.org/show_bug.cgi?id=126526

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj: Include UserActivity files in build.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding screenRect implementation to PlatformScreenNix
        https://bugs.webkit.org/show_bug.cgi?id=126231

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * platform/nix/PlatformScreenNix.cpp:
        (WebCore::screenRect):

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding missing platform #ifs to WebCore files
        https://bugs.webkit.org/show_bug.cgi?id=126227

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/LocalizedStrings.h:

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding new strings to LocalizedStringsNix
        https://bugs.webkit.org/show_bug.cgi?id=126228

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * platform/nix/LocalizedStringsNix.cpp:
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultDetailsSummaryText):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonChooseMultipleFilesLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::fileButtonNoFilesSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagCopyImageUrlToClipboard):
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagDownloadVideoToDisk):
        (WebCore::contextMenuItemTagDownloadAudioToDisk):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagShowMediaControls):
        (WebCore::contextMenuitemTagHideMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagDelete):
        (WebCore::contextMenuItemTagSelectAll):
        (WebCore::contextMenuItemTagUnicode):
        (WebCore::contextMenuItemTagInputMethods):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXDefinitionText):
        (WebCore::AXDescriptionListText):
        (WebCore::AXDescriptionListTermText):
        (WebCore::AXDescriptionListDetailText):
        (WebCore::AXFooterRoleDescriptionText):
        (WebCore::AXSearchFieldCancelButtonText):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::unknownFileSizeText):
        (WebCore::imageTitle):
        (WebCore::AXListItemActionVerb):
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageStepMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageBadInputForNumberText):
        (WebCore::missingPluginText):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        (WebCore::multipleFileUploadText):
        (WebCore::crashedPluginText):
        (WebCore::blockedPluginByContentSecurityPolicyText):
        (WebCore::insecurePluginVersionText):
        (WebCore::inactivePluginText):
        (WebCore::unacceptableTLSCertificate):
        (WebCore::textTrackClosedCaptionsText):
        (WebCore::textTrackSubtitlesText):
        (WebCore::textTrackOffMenuItemText):
        (WebCore::textTrackAutomaticMenuItemText):
        (WebCore::textTrackNoLabelText):
        (WebCore::snapshottedPlugInLabelTitle):
        (WebCore::snapshottedPlugInLabelSubtitle):

2014-01-06  László Langó  <lango@inf.u-szeged.hu>

        Use unsigned consistently, and check for invalid casts when calling into SharedBuffer from other code.
        https://bugs.webkit.org/show_bug.cgi?id=124579

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/PingLoader.h:
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::ResourceBuffer):
        * loader/ResourceBuffer.h:
        (WebCore::ResourceBuffer::create):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addDataOrBuffer):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didReceiveDataOrBuffer):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::didReceiveData):
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveData):
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didReceiveData):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/blackberry/BlobStream.cpp:
        (WebCore::BlobStream::didReceiveData):
        * platform/network/blackberry/BlobStream.h:
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willStopBufferingData:]):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):

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

        RenderBlock::clone() should return RenderPtr.
        <https://webkit.org/b/126513>

        Reviewed by Antti Koivisto.

        * rendering/RenderBlock.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):

            Tweaked to return RenderPtr<RenderBlock>.

        (WebCore::RenderBlock::splitBlocks):

            Store cloned RenderBlocks in RenderPtrs. Use leakPtr() to sink
            them into ownership-taking APIs that still use raw pointers.

        * rendering/RenderPtr.h:

            Add a simple static_pointer_cast for RenderPtr&&.

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

        RenderInline::clone() should return RenderPtr.
        <https://webkit.org/b/126514>

        Reviewed by Antti Koivisto.

        * rendering/RenderInline.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clone):

            Tweaked to return RenderPtr<RenderInline>.

        (WebCore::RenderInline::splitInlines):

            Store cloned RenderInlines in RenderPtrs. Use leakPtr() to sink
            them into ownership-taking APIs that still use raw pointers.

2014-01-06  Gurpreet Kaur  <k.gurpreet@samsung.com>

        <hr> appears gray instead of green because of color attribute is defined followed by noshade attribute
        https://bugs.webkit.org/show_bug.cgi?id=17674

        Reviewed by Simon Fraser.

        The noshade attribute is a boolean attribute and when set on hr element
        it shows a gray color. When there is color attribute the default gray
        color should be replaced by the color mentioned by the color attribute.
        Firefox and IE show the same behaviour but Webkit is different. Making
        the behaviour of Webkit similiar to Firefox and IE's behaviour.

        Test: fast/dom/HTMLHrElement/hr-color-noshade-attribute.html

        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute):
        When the color attribute is present that value is applied and the 
        default gray color is ignored. Incase of no color attribute the default
        gray color is applied.

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126499> Move WebKit off the legacy WebKit availability macros

        The legacy WebKit availability macros are verbose, confusing, and provide no benefit
        over using the system availability macros directly. The original vision was that
        they'd serve a cross-platform purpose but that never came to be.

        Since WebKit1 is API on OS X but SPI on iOS, some indirection is still needed in the
        availability macros to allow the headers to advertise the API as unavailable on OS X
        without interfering with the ability to build on iOS. This is achieved by defining
        WEBKIT-prefixed versions of the Foundation availability macros that are defined to
        their NS-prefixed equivalents. The installed headers are post-processed to map these
        macros back to their Foundation equivalents.

        Part of <rdar://problem/15512304>.

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebKitAvailability.h: Added. This lives at the WebCore level since it
        will be needed by the Objective-C DOM bindings.

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

        Move responsibility for remote layer tree committing to RemoteLayerTreeDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=126501

        Reviewed by Sam Weinig.

        Add type-safe casting to GraphicsLayer.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::isGraphicsLayerCA):
        (WebCore::GraphicsLayer::isGraphicsLayerCARemote):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::isGraphicsLayerCA):

2014-01-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Ensure that the autotools build and the CMake install the same files
        https://bugs.webkit.org/show_bug.cgi?id=116379

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Reformat some install directives to be consistent with the rest of them.
        Install the GObject DOM bindings headers.

2014-01-05  Andreas Kling  <akling@apple.com>

        Use lineageOfType to simplify two rendering helpers.
        <https://webkit.org/b/126498>

        Reviewed by Antti Koivisto.

        * rendering/RenderRuby.cpp:
        (WebCore::findRubyRunParent):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::findTreeRootObject):

            Simplify two functions that walk their parent chain to find the
            closest ancestor of a certain type.

        * rendering/RenderRubyRun.h:

            Add requisite isRendererOfType<RenderRubyRun>().

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

        Fix the Mac build too.

        * page/PageThrottler.h:

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

        Weekend URTBF after r161319 to make non Mac builds work again.

        * page/PageThrottler.h:

2014-01-05  Gavin Barraclough  <barraclough@apple.com>

        Move process suppression of WebProcess to Page (from UIProcess)
        https://bugs.webkit.org/show_bug.cgi?id=126480

        Reviewed by Sam Weinig.

        Let each page take a UserActivity rather than having to coalesce this state, and take different activity
        tokens for normal visibility and suppression disabled, so we can see why the process is not suppressed.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::setIsVisuallyIdle):
        * page/Page.h:
            - setThrottled -> setIsVisuallyIdle.
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - Initialize m_visuallyNonIdle.
        (WebCore::PageThrottler::~PageThrottler):
            - setThrottled -> setIsVisuallyIdle.
        (WebCore::PageThrottler::setIsVisuallyIdle):
            - Use m_visuallyNonIdle to disable supression when the page is not visually idle.
        * page/PageThrottler.h:
            - setThrottled -> setIsVisuallyIdle, added m_visuallyNonIdle.

2014-01-04  Sam Weinig  <sam@webkit.org>

        Move a few more functions from RenderBlock to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=126494

        Reviewed by Andreas Kling.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::adjustInlineDirectionLineBounds):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::textAlignmentForLine):
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):
        These are only used by RenderBlockFlow, so move them there.

2014-01-04  Simon Fraser  <simon.fraser@apple.com>

        Prepare the ScrollingTree for remote use
        https://bugs.webkit.org/show_bug.cgi?id=126493

        Reviewed by Sam Weinig.

        When committing the scrolling tree, we clone the ScrollingStateTree
        to hand off to another thread, or (in future) to encode to send to the
        UI process. During this cloning process, two types of layer transformations
        take place: for threaded scrolling, we replace GraphicsLayer with PlatformLayers.
        For remote scrolling, we'll replace GraphicsLayers with PlatformLayerIDs.
        Allow the ScrollingCoordinator to specify which type of transformation occurs
        by giving ScrollingStateTree a LayerRepresentation::Type member,
        which is consulted during ScrollingStateNode cloning.
        
        Also only copy layers that have changed to avoid setting dirty bits.
        
        Expose some other stuff on ScrollingStateTree which will be needed for
        remote scrolling.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::operator GraphicsLayer::PlatformLayerID):
        (WebCore::LayerRepresentation::toRepresentation):
        (WebCore::ScrollingStateNode::changedProperties):
        (WebCore::ScrollingStateNode::setChangedProperties):
        (WebCore::ScrollingStateNode::parentNodeID):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::setRemovedNodes):
        (WebCore::ScrollingStateTree::stateNodeForID):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::nodeCount):
        (WebCore::ScrollingStateTree::nodeMap):
        (WebCore::ScrollingStateTree::preferredLayerRepresentation):
        (WebCore::ScrollingStateTree::setPreferredLayerRepresentation):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2014-01-04  Sam Weinig  <sam@webkit.org>

        Move LineBreaker functions to LineBreaker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126491

        Reviewed by Simon Fraser.

        - Moves LineBreaker::nextLineBreak() and LineBreaker::nextSegmentBreak() to
          LineBreaker.cpp from RenderBlockLineLayout.cpp
        - Moves requiresIndent() to LineWidth.h/cpp from RenderBlockLineLayout.cpp
          so it can be shared.
        - Adds missing inline specifier to BreakingContext::handleEndOfLine() to avoid
          duplicate symbols.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalInlinePositions):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        (WebCore::LineBreaker::nextSegmentBreak):
        * rendering/line/LineWidth.cpp:
        (WebCore::requiresIndent):
        * rendering/line/LineWidth.h:

2014-01-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Fix the video and audio build
        https://bugs.webkit.org/show_bug.cgi?id=126464

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Complete the audio and video source lists.

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

        Explicitly use the std:: nested name specifier when using std::pair, std::make_pair
        https://bugs.webkit.org/show_bug.cgi?id=126439

        Reviewed by Andreas Kling.

        Instead of relying on std::pair and std::make_pair symbols being present in the current scope
        through the pair and make_pair symbols, the std:: specifier should be used explicitly.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mathPrescripts):
        (WebCore::AccessibilityRenderObject::mathPostscripts):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetColumnAtIndex):
        (webkitAccessibleTableGetRowAtIndex):
        (webkitAccessibleTableGetColumnExtentAt):
        (webkitAccessibleTableGetRowExtentAt):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHeaderElements]):
        (-[WebAccessibilityObjectWrapper accessibilityRowRange]):
        (-[WebAccessibilityObjectWrapper accessibilityColumnRange]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertMathPairsToNSArray):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * bindings/js/SerializedScriptValue.cpp:
        * dom/ContainerNode.cpp:
        * dom/StyledElement.cpp:
        (WebCore::attributeNameSort):
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseTimeFragment):
        * html/parser/HTMLMetaCharsetParser.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/DOMPatchSupport.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        * inspector/InspectorAgent.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::brokenImage):
        * loader/cache/CachedImage.h:
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::encodeHostnames):
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData):
        * platform/graphics/WidthIterator.cpp:
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::adopt):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::parseCacheHeader):
        * platform/text/AtomicStringKeyedMRUCache.h:
        * platform/text/LineBreakIteratorPoolICU.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageSizeForError):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderTableSection.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createIntegerOptionalInteger):
        (WebCore::SVGAnimatedType::createNumberOptionalNumber):
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::integerOptionalInteger):
        (WebCore::SVGAnimatedType::numberOptionalNumber):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        * svg/SVGParserUtilities.h:
        * svg/animation/SMILTimeContainer.h:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix EFL build.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::setHasChangedProperties):

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Clean up the means of committing the scrolling state tree
        https://bugs.webkit.org/show_bug.cgi?id=126482

        Reviewed by Tim Horton.

        ScrollingStateNodes would manually call scrollingStateTree().setHasChangedProperties()
        after setPropertyChanged() in lots of places, which was repetitive, and
        AsyncScrollingCoordinator manually called scheduleTreeStateCommit() in many places.
        
        Clean up both of these with a clearer trigger for state tree commits.
        ScrollingStateNodes::setPropertyChanged() calls ScrollingStateTree::setHasChangedProperties(),
        which turns around and tells the ScrollingCoordinator that the state tree became dirty.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreePropertiesChanged):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setCounterScrollingLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setHeaderLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setFooterLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setNonFastScrollableRegionForNode):
        (WebCore::AsyncScrollingCoordinator::setWheelEventHandlerCountForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollBehaviorForFixedElementsForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::setPropertyChanged):
        (WebCore::ScrollingStateNode::setLayer):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setViewportRect):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin):
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters):
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateScrollingNode::setFooterHeight):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::create):
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::setHasChangedProperties):
        (WebCore::ScrollingStateTree::didRemoveNode):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Try to fix CoordinatedGraphics build after r161303. Remove implementations
        which are now in the cross-platform file.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::detachFromStateTree):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/coordinatedgraphics/ScrollingStateNodeCoordinatedGraphics.cpp:
        * page/scrolling/coordinatedgraphics/ScrollingStateScrollingNodeCoordinatedGraphics.cpp:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Simplify ScrollingStateNode references to various layer types
        https://bugs.webkit.org/show_bug.cgi?id=126477

        Reviewed by Tim Horton.
        
        ScrollingStateNodes referenced both GraphicsLayer and PlatformLayers, in
        confusing ways. In the main thread they have a GraphicsLayer*, but need
        to check to see if the underlying PlatformLayer changed. Then, when
        cloned to commit to the scrolling thread, they drop the GraphicsLayer
        and store a PlatformLayer.
        
        Hide the complexity (and prepare for the future) by adding LayerRepresentation,
        which wraps various different flavors of layers, and knows how to check whether
        the PlatformLayer underlying a GraphicsLayer changed.
        
        ScrollingStateNode layer setters then just take and compare LayerRepresentations.
        Copy constructors convert to a PlatformLayer representation (though not really
        in the right place currently), and ScrollingTreeNodes get PlatformLayers.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::setLayer):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::LayerRepresentation):
        (WebCore::LayerRepresentation::operator GraphicsLayer*):
        (WebCore::LayerRepresentation::operator PlatformLayer*):
        (WebCore::LayerRepresentation::operator GraphicsLayer::PlatformLayerID):
        (WebCore::LayerRepresentation::operator ==):
        (WebCore::LayerRepresentation::toPlatformLayer):
        (WebCore::LayerRepresentation::representsGraphicsLayer):
        (WebCore::LayerRepresentation::representsPlatformLayer):
        (WebCore::LayerRepresentation::representsPlatformLayerID):
        (WebCore::ScrollingStateNode::layer):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

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

        [WebGL] Blit operation from Multisample FBO to rendering FBO must ignore GL_SCISSOR test
        https://bugs.webkit.org/show_bug.cgi?id=126470
        <rdar://problem/15201370>

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/resources/webgl_test_files/conformance/rendering/gl-scissor-test.html

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Temporarily deactivate the GL_SCISSOR
        test while we do our blit, then reactivate if necessary.

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

        [WebGL] CGLPixelFormat should specify SampleBuffer and Sample count when using MSAA
        https://bugs.webkit.org/show_bug.cgi?id=126468

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/resources/webgl_test_files/conformance/rendering/gl-scissor-test.html

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::setPixelFormat): Add kCGLPFAMultisample, kCGLPFASampleBuffers (and count), and
        kCGLPFASamples (and count) to our pixel format when 'antialias=true'.
        (WebCore::GraphicsContext3D::GraphicsContext3D): Pass a new 'antialias' flag to the setPixelFormat
        method so we can turn on MSAA features when needed.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Give all PlatformCALayers a PlatformLayerID, not just remote ones
        https://bugs.webkit.org/show_bug.cgi?id=126466

        Reviewed by Tim Horton.

        The ScrollingStateTree has references to both GraphicsLayers and PlatformLayers
        which is confusing, and is necessary because the underlying PlatformLayer
        inside a GraphicsLayer can change. In order to hide some of this complexity,
        expose GraphicsLayer::primaryLayerID() which is a PlatformLayerID that clients
        can hold onto to test for underlying layer swapping.
        
        Also constify LayerType m_layerType on PlatformCALayer, which required
        cleaning up the construction of PlatformCALayerMac in the case where a
        PlatformCALayerMac is wrapping an existing CALayer (which happens for video).

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::primaryLayerID):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::primaryLayerID):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::generateLayerID):
        (WebCore::PlatformCALayer::PlatformCALayer):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::layerID):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::create):
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::commonInit):

2014-01-03  Andreas Kling  <akling@apple.com>

        Add lineageOfType renderer iterator and start using it.
        <https://webkit.org/b/126456>

        Add a convenient way to iterate over a renderers ancestry *including*
        the starting point renderer (if it meets the type criteria.)

        This works just like lineageOfType for Elements.

        Reviewed by Geoffrey Garen.

        * rendering/RenderAncestorIterator.h:
        (WebCore::lineageOfType):

            Added. Returns an adapter for walking a renderer's entire lineage
            matching any renderer of the given type.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayerModelObject.h:

            Add the requisite isRendererOfType<T> helpers.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::enclosingFloatPaintingLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingLayer):
        (WebCore::RenderObject::enclosingBox):
        (WebCore::RenderObject::enclosingBoxModelObject):

            Simplify with lineageOfType. Added some FIXMEs about functions
            that should return references instead of pointers.

2014-01-03  Martin Robinson  <mrobinson@igalia.com>

        Small build fix for the GTK+ CMake port

        * PlatformGTK.cmake: Add an IDL file that is missing from the list of IDLs
        used to generate GObject DOM bindings.

2014-01-03  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/css changes
        https://bugs.webkit.org/show_bug.cgi?id=126237

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Added iOS-specific code and FIXME comment.
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext): Ditto.
        (WebCore::CSSParser::parseValue): Ditto.
        * css/CSSPropertyNames.in: Added property -webkit-composition-fill-color. Also added FIXME comment.
        * css/CSSValueKeywords.in: Added iOS-specific -apple-system-* values.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Added iOS-specific code and FIXME comments.
        * css/MediaFeatureNames.h: Added media feature -webkit-video-playable-inline.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::isRunningOnIPhoneOrIPod): Added. Also added FIXME comment.
        (WebCore::video_playable_inlineMediaFeatureEval): Added.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement): Substitute toHTMLMediaElement() for toMediaElement().
        (WebCore::StyleResolver::applyProperty): Added iOS-specific code and FIXME comment.
        * css/html.css: Added iOS-specific CSS styles.
        (input, textarea, keygen, select, button, isindex):
        (isindex):
        (input[type="date"]):
        (input[type="datetime"]):
        (input[type="datetime-local"]):
        (input[type="month"]):
        (input[type="time"]):
        (textarea):
        (input:-webkit-autofill):
        (input[type="radio"], input[type="checkbox"]):
        (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button):
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb):
        (input[type="range"]::-webkit-slider-thumb:active):
        (input:disabled, textarea:disabled):
        (input[readonly], textarea[readonly]):
        (textarea::-webkit-input-placeholder):
        (input[type="checkbox"]):
        (input[type="radio"]):
        (input[type="checkbox"]:checked, input[type="radio"]:checked):
        (input[type="checkbox"]:checked:disabled, input[type="radio"]:checked:disabled):
        (select:focus):
        (select):
        * css/mathml.css: Added iOS-specific CSS styles.
        (math, mfenced > *):
        (mo, mfenced):
        * css/mediaControlsiOS.css: Added.
        * css/svg.css: Added iOS-specific CSS styles.
        (text, tspan, tref):

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

        [WebGL] glScissor test is not accounted for when generating internal rendering textures.
        https://bugs.webkit.org/show_bug.cgi?id=126455
        <rdar://problem/15744206>

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/conformance/rendering/gl-scissor-test.html

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Check state of GL_SCISSOR_TEST and GL_DITHER, deactivate them during
        our internal drawing, then turn them back on for further processing.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Maybe fix Windows build.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

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

        [MediaControls][iOS] Enable JavaScript Media Controls on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=126440

        Reviewed by Eric Carlson.

        Drive-by misspelling fix, and add a convenience function to check if the
        controls are currently hidden:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleWrapperMouseMove):
        (Controller.prototype.handleWrapperMouseOut):
        (Controller.prototype.updatePlaying):
        (Controller.prototype.controlsAreHidden): Added.

        Add a new subclass of Controller for iOS and a matching CSS:
        * Modules/mediacontrols/mediaControlsiOS.css: Added.
        * Modules/mediacontrols/mediaControlsiOS.js: Added.
        (createControls): Override the createControls() in mediaControlsApple.js.
        (ControllerIOS): Define a new class.
        (ControllerIOS.prototype.inheritFrom): Convenience method to mixin parent
            prototype methods.
        (ControllerIOS.prototype.createBase): Override, listen for touches instead of mouse events.
        (ControllerIOS.prototype.createControls): Ditto.
        (ControllerIOS.prototype.configureInlineControls): Override, only add play, timeline, and full
            screen butttons.
        (ControllerIOS.prototype.configureFullScreenControls): Override, and add no buttons.
        (ControllerIOS.prototype.handlePlayButtonTouchStart): Activate.
        (ControllerIOS.prototype.handlePlayButtonTouchEnd): De-activate and do action.
        (ControllerIOS.prototype.handlePlayButtonTouchCancel): De-activate and cancel.
        (ControllerIOS.prototype.handleWrapperTouchStart): Show controls.
        (ControllerIOS.prototype.handlePanelTouchStart): Disable video selection.
        (ControllerIOS.prototype.handlePanelTouchEnd): Re-enable video selection.
        (ControllerIOS.prototype.handlePanelTouchCancel): Ditto.

        Drive-by fix to enable the JavaScript controls when the plugin is disabled:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

        Add the iOS JavaScript by appending it to the generic (Apple) JavaScript:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript):

        Add new files to project:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Allow the ChromeClient to provide a custom ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=126450

        Reviewed by Tim Horton.
        
        Some platforms will want to provide a custom ScrollingCoordinator, so let
        them do so by asking ChromeClient first for one.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::createScrollingCoordinator):
        * page/Page.cpp:
        (WebCore::Page::scrollingCoordinator):

2014-01-03  Andreas Kling  <akling@apple.com>

        Deploy more child renderer iterators in RenderBlockFlow.
        <https://webkit.org/b/126434>

        Reviewed by Sam Weinig.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::shouldCheckLines):

            Make this helper take a RenderBlockFlow instead of a RenderObject
            and simplified it a bit. RenderDeprecatedFlexibleBox does not
            derive from RenderBlockFlow so those checks can be omitted.

        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlockFlow::lineAtIndex):
        (WebCore::RenderBlockFlow::lineCount):
        (WebCore::RenderBlockFlow::clearTruncation):

            Use childrenOfType to iterate over block and block-flow children.
            Tweaked some early return/continue to reduce nesting.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Allow different types of ScrollingTrees to have different types of ScrollingTreeNode subclasses
        https://bugs.webkit.org/show_bug.cgi?id=126445

        Reviewed by Tim Horton.
        
        Make it possible to have ScrollingTree subclasses with different subclasses of ScrollingTreeNodes,
        by giving ScrollingTree a pure virtual createNode() function. ThreadedScrollingTree implements
        this, and then delegates node creation to its AsyncScrollingCoordinator (since we have
        a ScrollingCoordinatorMac but no real need for a ThreadedScrollingTreeMac).
        
        Also made ThreadedScrollingTree's m_scrollingCoordinator an AsyncScrollingCoordinator,
        since by definition a threaded scrolling tree uses an async coordinator.

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::create):
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::createNode):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::create):

2014-01-03  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Unreviewed build fix.

        * platform/UserActivity.h:
            - case fix.

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

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Reviewed by Sam Weinig.

        UserActivity is a mechanism to express to the operating system (where appropriate)
        that a user initiated activity is taking place, and as such that resources should be
        made available to the process accordingly.

        Currently we hold a single NSActivity, at the WebKit layer. This refactoring allows us
        to hold different activity tokens for different user actions (which simplifies the
        handling, and aides debugging since the token can more accurately express the activity
        taking place), and also will allow us to avoid the layering difficulty of calling back
        up the stack to WebKit to register that an activity is taking place.

        * WebCore.xcodeproj/project.pbxproj:
            - added new files.
        * platform/UserActivity.cpp: Added.
        (WebCore::UserActivity::UserActivity):
            - nop implementation - ignore description.
        (WebCore::UserActivity::beginActivity):
        (WebCore::UserActivity::endActivity):
            - nop implementation - just inc/dec m_count.
        * platform/UserActivity.h: Added.
        (WebCore::UserActivity::isActive):
            - returns true if one or more instance of this activity is in progress.
        * platform/mac/UserActivityMac.mm: Added.
        (WebCore::UserActivity::UserActivity):
            - constructor accepts one argument, a description string.
        (WebCore::UserActivity::isValid):
            - used by assertions.
        (WebCore::UserActivity::beginActivity):
        (WebCore::UserActivity::endActivity):
            - track start/end of an activity - calls to these methods should be balanced.
        (WebCore::UserActivity::hysteresisTimerFired):
              - used to implement hysteresis in releasing  NSActivity.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        Line ending conversion should be able to handle strings with null chars
        https://bugs.webkit.org/show_bug.cgi?id=126202

        This is a merge from Blink.

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/local/formdata/send-form-data-with-string-containing-null.html

        * platform/text/LineEnding.cpp: (WebCore::normalizeToCROrLF): Do it right.

2014-01-03  Alberto Garcia  <berto@igalia.com>

        WebKit-GTK 1.8.1 does not build on OS X 10.7
        https://bugs.webkit.org/show_bug.cgi?id=88407

        Reviewed by Carlos Garcia Campos.

        Replace non-portable 'echo -n' with 'true'.

        * GNUmakefile.am:

2014-01-03  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=126428

        Reviewed by Brent Fulgham.

        The NativeImagePtr type is not an CGImageRef on WinCairo, cannot use CFRetain.

        * loader/cache/MemoryCache.cpp: Replace USE(CF) with USE(CG).
        * loader/cache/MemoryCache.h: Ditto.

2014-01-03  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify FloatRoundedRect, BoxShape construction
        https://bugs.webkit.org/show_bug.cgi?id=125995

        Reviewed by Andreas Kling.

        Cleanup of various internal Shape issues:
        - Removed unnecessary Shape() initialization list entries in Shape subclasses
          per https://bugs.webkit.org/show_bug.cgi?id=125548#c2.
        - Used const references instead of pointers for non-deprecated Shape:createShape() logic.
        - Replaced createShape() overloads for Rasters and Boxes with functions named
          createRasterShape() and createBoxShape().
        - Added a FloatRoundedRect::Radii() constructor to reduce the parameter list
          length of the FloatRoundedRect constructor in createBoxShape().

        There are no new tests, this is just internal refactoring.

        * platform/graphics/FloatRoundedRect.h:
        (WebCore::FloatRoundedRect::Radii::Radii):
        * rendering/shapes/BoxShape.h:
        (WebCore::BoxShape::BoxShape):
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::RasterShape):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::RectangleShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::createInsetShape):
        (WebCore::Shape::createShape):
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):

2014-01-03  Andreas Kling  <akling@apple.com>

        Remove unused Document::openSearchDescriptionURL().
        <https://webkit.org/b/126419>

        Reviewed by Antti Koivisto.

        * dom/Document.h:
        * dom/Document.cpp:

            Scrub leftovers from the defunct Chromium port.

2014-01-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        VibrationPattern should allocate an single vector instance for single integer input
        https://bugs.webkit.org/show_bug.cgi?id=126417

        Reviewed by Gyuyoung Kim.

        When the Vibration pattern is set with a single integer, the VibrationPattern should
        be set with this integer as a vibration time. But the VibrationPattern(unsigned vector) was
        initialized with a single parameter, the vibration time, so the time was used to set
        the size of vector.

        * Modules/vibration/NavigatorVibration.cpp:
        (WebCore::NavigatorVibration::vibrate):

2014-01-02  Jaehun Lim  <ljaehun.lim@samsung.com>

        IconController.cpp needs to include <wtf/text/CString.h>
        https://bugs.webkit.org/show_bug.cgi?id=126415

        Reviewed by Gyuyoung Kim.

        Build fails in IconController.cpp when ICONDATABASE is disabled.
        WebKit/Source/WebCore/loader/icon/IconController.cpp:124:110: error: invalid use of incomplete type ‘class WTF::CString’
        IconController.cpp needs #include <wtf/text/CString.h>.

        No new tests. Just build fix.

        * loader/icon/IconController.cpp: Add #include statement.

2014-01-02  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Previous scrollbar is remained sometimes
        https://bugs.webkit.org/show_bug.cgi?id=126414

        Reviewed by Gyuyoung Kim.

        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::invalidate):
        Updated scrollbar visibility in Scrollbar::invalidate().
        * platform/efl/ScrollbarEfl.h:
        Removed show()/hide() which never been called() for scrollbar.

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

        [WebGL] Correct symbol lookup logic to handle 1-element arrays
        https://bugs.webkit.org/show_bug.cgi?id=126411
        <rdar://problem/15394564>

        Reviewed by Dean Jackson.

        Tested by revisions to webgl/1.0.2/conformance/glsl/misc/shader-with-array-of-structs-containing-arrays.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Revise to
        handle access to zeroeth element of the array.

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

        Crash in WebCore::translateIntersectionPointsToSkipInkBoundaries
        https://bugs.webkit.org/show_bug.cgi?id=126252

        Reviewed by Alexey Proskuryakov.

        lastIntermediate was a iterator pointing into a Vector, which was being re-used
        even while appending to the Vector. If any of the append operators triggered
        a realloc, the iterator would point to the old free'ed memory.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-crash-many-gaps.html

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

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

        [WebGL] Correct symbol lookup logic to handle 1-element arrays
        https://bugs.webkit.org/show_bug.cgi?id=126411
        <rdar://problem/15394564>

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Revise code to handle the case of single-element
        arrays.

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

        Update Promises to the https://github.com/domenic/promises-unwrapping spec
        https://bugs.webkit.org/show_bug.cgi?id=120954

        Reviewed by Filip Pizlo.

        * ForwardingHeaders/runtime/JSPromiseDeferred.h: Added.
        * ForwardingHeaders/runtime/JSPromiseResolver.h: Removed.
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask):
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredWrapper::DeferredWrapper):
        (WebCore::DeferredWrapper::promise):
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        (WebCore::DeferredWrapper::resolve<String>):
        (WebCore::DeferredWrapper::resolve<bool>):
        (WebCore::char>>):
        (WebCore::DeferredWrapper::reject<String>):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::generateKey):
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/js/JSWorkerGlobalScopeBase.h:

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

        ImageBufferBackingStoreCache should use DeferrableOneShotTimer
        https://bugs.webkit.org/show_bug.cgi?id=126155

        Reviewed by Anders Carlsson.

        Since ImageBufferBackingStoreCache's purge timer is pushed out every time
        a backing store is deallocated, we can easily waste a lot of time rescheduling
        the timer. Since it's a cache purge timer and doesn't need that kind of precision,
        adopt DeferrableOneShotTimer, which is much more performant when deferred frequently.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
        (WebCore::ImageBufferBackingStoreCache::timerFired):
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:

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

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen. Modifications reviewed by Tim Horton.

        This patch is taken from r160945, but the modifications to ImageBufferCG.cpp
        have been reverted.

        This test adds a static class, ImageBufferBackingStoreCache, that vends 
        IOSurfaces. It remembers IOSurfaces that have been returned to it until 
        a configurable timeout. 

        The storage used by this class is in the form of a HashMap from a 
        bucketed size to the IOSurface. There are many other data structures 
        that could be used, but this implementation gives a 80% hit rate on 
        normal browsing of some example sites with Canvas and 
        text-decoration-skip: ink. Because the buckets are fairly 
        small (rounding the width and height up to multiples of 8), traversing the 
        bucket contents takes on average 2 steps.  

        Test: fast/canvas/canvas-backing-store-reuse.html 

        * WebCore.xcodeproj/project.pbxproj: Added new caching class 
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Added. 
        (WebCore::createIOSurface): Copied from ImageBufferCG.cpp 
        (WebCore::ImageBufferBackingStoreCache::timerFired): Forget the cache 
        contents 
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer): 
        (WebCore::ImageBufferBackingStoreCache::get): Static getter 
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache): 
        (WebCore::ImageBufferBackingStoreCache::insertIntoCache): Memory-management 
        creation function 
        (WebCore::ImageBufferBackingStoreCache::takeFromCache): Memory-management 
        deletion function 
        (WebCore::ImageBufferBackingStoreCache::isAcceptableSurface): Does this cached 
        IOSurface fit the bill? 
        (WebCore::ImageBufferBackingStoreCache::tryTakeFromCache): Lookup 
        a bucket and walk through its contents 
        (WebCore::ImageBufferBackingStoreCache::getOrAllocate): Public function 
        for clients who want a IOSurface from the cache 
        (WebCore::ImageBufferBackingStoreCache::deallocate): Public 
        function for clients to return an IOSurface to the pool 
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Added. 
        (WebCore::ImageBuffer::ImageBuffer): 
        (WebCore::ImageBuffer::~ImageBuffer): 

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

        Video-seek-with-negative-playback was flaky.
        https://bugs.webkit.org/show_bug.cgi?id=126379

        Reviewed by Eric Carlson.

        No new tests. Covered by existing tests.

        m_player->setRate() should be called before updating m_playbackRate, because potentiallyPlaying() depends
        on endedPlayback(), which checks m_playbackRate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setPlaybackRate):

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

        [iOS] Tapping any link crashes in WebCore::EventHandler::mouseMoved()
        (also crashes when scrolling certain sites)
        https://bugs.webkit.org/show_bug.cgi?id=126401
        <rdar://problem/15739334>

        Reviewed by Tim Horton.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::currentEventSlot): Make the shared variable have static-storage duration.

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

        Remove WindowIsVisible
        https://bugs.webkit.org/show_bug.cgi?id=126270

        Reviewed by Tim Horton.

        We currently track visibility in two ways - ViewState::IsVisible and ViewState::WindowIsVisible.
        The latter detects that the content is hidden in fewer cases than the former, and as such, the
        former is always preferable.

        This affects the hidden state provided to FocusController::contentAreaDidShowOrHide and to
        Plugin::windowVisibilityChanged.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
            - rename ContainingWindowIsVisible -> ContentIsVisible.

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

        Merge didMoveOnscreen / page visibility to isVisible
        https://bugs.webkit.org/show_bug.cgi?id=126268

        Reviewed by Tim Horton.

        The onscreen state most closely tracks view visibility (though currently
        also tracks a mix of in-window state). Make more consistent, simplify,
        and move all animation suspension logic to Page, so it can be controlled
        by the PageThrottler.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldSetCursor):
        * page/Page.cpp:
        (WebCore::Page::Page):
            - initialize new variables.
        (WebCore::Page::setIsVisible):
            - merge setVisibilityState, didMoveOnscreen, willMoveOffscreen.
        (WebCore::Page::setIsPrerender):
            - switches visibility state from hidden to prerender.
        (WebCore::Page::visibilityState):
            - computed from m_isVisible, m_isPrerender.
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_visibilityState -> m_isVisible.
        * page/Page.h:
            - remove didMoveOnscreen/willMoveOffscreen
              m_isOnscreen & m_visibilityState -> m_isVisible & m_isPrerender
              setVisibilityState -> setIsVisible & setIsPrerender.
        (WebCore::Page::isVisible):
            - isOnscreen -> isVisible.

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

        Update bindings test results

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by Antti Koivisto.

        Update the bindings code generation and custom objects
        to the new function signatures

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

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

        Add AsyncScrollingCoordinator, which is a base class for threaded and future remote ScrollingCoordinators
        https://bugs.webkit.org/show_bug.cgi?id=126389

        Reviewed by Tim Horton.

        Add AsyncScrollingCoordinator, a ScrollingCoordinator that knows about ScrollingStateTrees
        and ScrollingTrees, but leaves it up to subclasses to decide when and how to commit.

        * WebCore.xcodeproj/project.pbxproj: Added AsyncScrollingCoordinator.*
        * page/scrolling/AsyncScrollingCoordinator.cpp: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm.
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::~AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::attachToStateTree):
        (WebCore::AsyncScrollingCoordinator::detachFromStateTree):
        (WebCore::AsyncScrollingCoordinator::clearStateTree):
        (WebCore::AsyncScrollingCoordinator::syncChildPositions):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setCounterScrollingLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setHeaderLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setFooterLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setNonFastScrollableRegionForNode):
        (WebCore::AsyncScrollingCoordinator::setWheelEventHandlerCountForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollBehaviorForFixedElementsForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        (WebCore::AsyncScrollingCoordinator::updateMainFrameScrollLayerPosition):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::AsyncScrollingCoordinator::isRubberBandInProgress):
        (WebCore::AsyncScrollingCoordinator::setScrollPinningBehavior):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText):
        * page/scrolling/AsyncScrollingCoordinator.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        (WebCore::AsyncScrollingCoordinator::scrollingTree):
        (WebCore::AsyncScrollingCoordinator::setScrollingTree):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTree):
        (WebCore::AsyncScrollingCoordinator::releaseScrollingTree):
        * page/scrolling/ScrollingCoordinator.h: Add casting support.
        (WebCore::ScrollingCoordinator::isAsyncScrollingCoordinator):
        * page/scrolling/ThreadedScrollingTree.h: commitNewTreeState() needs to be public.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Lots of code moved to AsyncScrollingCoordinator.
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::~ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::pageDestroyed):
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        (WebCore::ScrollingCoordinatorMac::updateTiledScrollingIndicator):

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

        Simplify the insides of DocumentSharedObjectPool and reduce memory usage.

        Merging Blink r164152 by Elliott Sprehn.

        Instead of storing an OwnPtr to an object that has a pointer to the
        ShareableElementData as well as a pointer into the ShareableElementData
        and the length we can just store a RefPtr to the SharableElementData.

        This also reduces the memory usage of the pool by 2 pointers per entry.

        * dom/DocumentSharedObjectPool.h:
        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::attributeHash):
        (WebCore::hasSameAttributes):
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):

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

        Support <box> values computed style for 'clip-path' property
        https://bugs.webkit.org/show_bug.cgi?id=126148

        Reviewed by Simon Fraser.

        Calculate computed style for 'clip-path' property.

        Updated tests to check for computed style.

        * css/BasicShapeFunctions.cpp: Add box value bounding-box.
        (WebCore::valueForBox):
        (WebCore::boxForValue):
        * css/CSSComputedStyleDeclaration.cpp: Return the computed style
            for 'clip-path'.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/DeprecatedStyleBuilder.cpp: Create CSSValueLists for 'clip-th'.
        (WebCore::ApplyPropertyClipPath::applyValue):
        * rendering/ClipPathOperation.h: Add bounding-box value.
        (WebCore::ShapeClipPathOperation::pathForReferenceRect):
        (WebCore::ShapeClipPathOperation::setReferenceBox):
        (WebCore::ShapeClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::create):
        (WebCore::BoxClipPathOperation::pathForReferenceRect):
        (WebCore::BoxClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::BoxClipPathOperation):
        * rendering/shapes/ShapeInfo.h: Add bounding-box value.
        (WebCore::ShapeInfo::setShapeSize):
        (WebCore::ShapeInfo::logicalTopOffset):
        (WebCore::ShapeInfo::logicalLeftOffset):
        * rendering/style/BasicShapes.cpp: Add bounding-box value.
        (WebCore::BasicShape::referenceBoxSize):
        * rendering/style/BasicShapes.h:

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

        Always resolve style from root
        https://bugs.webkit.org/show_bug.cgi?id=126380

        Reviewed by Andreas Kling.
        
        Forced style resolve that does not start from the root is never really correct. 
        Remove the few remaining instances.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setResetStyleInheritance):
        
            Update style asynchronously.

        * dom/ShadowRoot.h:
        * dom/Text.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache):
        (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache):
        
            Delete the render tree synchronously on suspend and rebuild it asynchronously on resume.
            No need for m_customStyleForPageCache hack.

        * html/HTMLPlugInImageElement.h:
        
            Remove m_customStyleForPageCache.

        * style/StyleResolveTree.cpp:
        * style/StyleResolveTree.h:
        
            Remove Element version of resolveTree from the interface.

        * svg/SVGUseElement.h:

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

        Remove PlaceholderDocument
        https://bugs.webkit.org/show_bug.cgi?id=126382

        Reviewed by Andreas Kling.

        Remove PlaceholderDocument class and replace it with a bit in Document.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createRenderTree):
        * dom/Document.h:
        
            Also make Synthesized a construction flag instead of a boolean parameter.

        (WebCore::Document::createNonRenderedPlaceholder):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        (WebCore::HTMLDocument::createSynthesizedDocument):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        * loader/PlaceholderDocument.cpp: Removed.
        * loader/PlaceholderDocument.h: Removed.
        * pdf/ios/PDFDocument.h:
        (WebCore::PDFDocument::PDFDocument):

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove public attachRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=126368

        Reviewed by Andreas Kling.

        Remove the remaining explicit render tree construction.

        * dom/Document.cpp:
        (WebCore::Document::createRenderTree):
        
           Use recalcStyle() instead of calling attachRenderTree directly.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addText):
        
            Remove forgotten attachTextRenderer.

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        
            Remove willAttachRenderers/didAttachRenderers hack.

        * html/shadow/InsertionPoint.h:
        (WebCore::toInsertionPoint):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        
            Seriously, nothing to do here.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::attachChildren):
        (WebCore::Style::detachDistributedChildren):
        (WebCore::Style::detachChildren):
        
            Making attaching and detaching distributed insertion point children part of ResolveTree internals.

        * style/StyleResolveTree.h:
        
            Remove interfaces with no clients.

2014-01-01  Seokju Kwon  <seokju@webkit.org>

        Remove stale ScriptProfiler methods
        https://bugs.webkit.org/show_bug.cgi?id=126373

        Reviewed by Darin Adler.

        No new tests, No change behavior. 

        * bindings/js/ScriptProfiler.h: Remove dead code.

2014-01-01  Andreas Kling  <akling@apple.com>

        Remove ChromeClient::fullScreenRendererChanged().
        <https://webkit.org/b/126370>

        This hook was added in r75277 to notify WebFullScreenController when
        the full screen renderer changed. In r110216 the code was refactored,
        making this notification unnecessary.

        Reviewed by Antti Koivisto.

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

        Fix the build by exposing some more scrolling state node headers
        as Private in WebCore.framework.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Unreviewed build fix after r160903 when ACCESSIBILITY is disabled

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::children):

2014-01-01  Andreas Kling  <akling@apple.com>

        RenderScrollbar: Map of scrollbar parts should use RenderPtr.
        <https://webkit.org/b/126367>

        Turn RenderScrollbar::m_parts into HashMap of RenderPtrs. This makes
        renderer destruction automatic and lets us remove some code.

        Reviewed by Antti Koivisto.

        * rendering/RenderPtr.h:

            Add HashTraits for RenderPtr so we can use them as values in
            WTF hash tables.

        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::~RenderScrollbar):
        (WebCore::RenderScrollbar::setParent):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::updateScrollbarPart):

            Remove now-unneeded kludges of logic to manually delete scrollbar
            part renderers in various scenarios.

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove reattachRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=126366

        Reviewed by Andreas Kling.

        Remove the last remaining client.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        
            Reconstruct render tree asynchronously.

        (WebCore::HTMLSelectElement::scrollToSelection):
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer):
        (WebCore::HTMLSelectElement::selectOption):
        
            It is not safe to cast the renderer based on usesMenuList test. Switch to RenderObject::isMenuList test.

        (WebCore::HTMLSelectElement::parseMultipleAttribute):
        
            Reconstruct render tree asynchronously.

        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        * style/StyleResolveTree.cpp:
        * style/StyleResolveTree.h:
        
            Remove the function.

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

        Create a ThreadedScrollingTree subclass of ScrollingTree, and push all knowledge of the scrolling thread into it
        https://bugs.webkit.org/show_bug.cgi?id=126362

        Reviewed by Sam Weinig.

        Eventually we'll have a ScrollingTree in situations where there is no scrolling
        thread, so make the ScrollingTree base class thread-agnostic (but threadsafe),
        and subclass it in ThreadedScrollingTree for scrolling-thread-specific functionality.
        
        The ScrollingTree base class also no longer needs to know about the
        ScrollingCoordinator.

        ScrollingCoordinatorMac creates a ThreadedScrollingTree.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Add ThreadedScrollingTree.*
        Make some headers Private that we'll need in WebKit2 soon.
        * page/scrolling/ScrollingStateTree.h: Drive-by cleanup: clone() was unimplemented.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::~ScrollingTree):
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Wrap up some logic that
        involves taking the mutex, so ThreadedScrollingTree can conveniently call it.
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::isHandlingProgrammaticScroll):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isThreadedScrollingTree):
        (WebCore::ScrollingTree::invalidate):
        * page/scrolling/ThreadedScrollingTree.cpp: Added.
        (WebCore::ThreadedScrollingTree::create):
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::~ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::tryToHandleWheelEvent):
        (WebCore::ThreadedScrollingTree::handleWheelEvent):
        (WebCore::derefScrollingCoordinator):
        (WebCore::ThreadedScrollingTree::invalidate):
        (WebCore::ThreadedScrollingTree::commitNewTreeState):
        (WebCore::ThreadedScrollingTree::updateMainFrameScrollPosition):
        (WebCore::ThreadedScrollingTree::handleWheelEventPhase):
        * page/scrolling/ThreadedScrollingTree.h: Added.
        (WebCore::ThreadedScrollingTree::isThreadedScrollingTree):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):

2014-01-01  Andreas Kling  <akling@apple.com>

        FrameView: Store scroll corner renderer in a RenderPtr.
        <https://webkit.org/b/126364>

        Make FrameView::m_scrollCorner a RenderPtr<RenderScrollbarPart> and
        remove two manual destroy() calls.

        Reviewed by Antti Koivisto.

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove elementChildren/elementDescendants shorthands
        https://bugs.webkit.org/show_bug.cgi?id=126363

        Reviewed by Anders Carlsson.

        Just use childrenOfType<Element>/descendantsOfType<Element> instead. They are not that much longer
        and consistency is valuable.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
        (WebCore::siblingWithAriaRole):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::namedItem):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::resetComputedStyle):
        * dom/ElementChildIterator.h:
        * dom/ElementDescendantIterator.h:
        * dom/SelectorQuery.cpp:
        (WebCore::elementsForLocalName):
        (WebCore::anyElement):
        (WebCore::SelectorDataList::executeSingleTagNameSelectorData):
        (WebCore::SelectorDataList::executeSingleClassNameSelectorData):
        (WebCore::SelectorDataList::executeSingleSelectorData):
        (WebCore::SelectorDataList::executeSingleMultiSelectorData):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::removeHeadContents):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::refreshElementsIfNeeded):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        * rendering/RenderChildIterator.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGUseElement.cpp:
        (WebCore::subtreeContainsDisallowedElement):
        (WebCore::removeDisallowedElementsFromSubtree):

2014-01-01  Antti Koivisto  <antti@apple.com>

        Do less synchronous render tree construction
        https://bugs.webkit.org/show_bug.cgi?id=126359

        Reviewed by Anders Carlsson.

        Remove some now-unnecessary attachRenderTree calls.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willRecalcStyle):
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree):
        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::finishLine):
        (WebCore::HTMLViewSourceDocument::addBase):
        (WebCore::HTMLViewSourceDocument::addLink):
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):

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

        Updating the scrolling tree should use references to state nodes
        https://bugs.webkit.org/show_bug.cgi?id=126360

        Reviewed by Anders Carlsson.

        Change functions related to ScrollingTreeNode updating to take
        const references to state nodes rather than pointers.

        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::hasChangedProperty):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNode): The node can be nil so
        this continues to take a pointer.
        (WebCore::ScrollingTree::removeDestroyedNodes):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::updateAfterChildren):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

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

        Add a typedef for PlatformLayerID on GraphicsLayer, and migrate RemoteLayerTreeTransaction to use it
        https://bugs.webkit.org/show_bug.cgi?id=126346

        Reviewed by Tim Horton.

        Remote scrolling tree code is soon going to use RemoteLayerTreeTransaction::LayerID,
        so it makes more sense to put this layerID type on GraphicsLayer as
        GraphicsLayer::PlatformLayerID.
        
        Also add some type cast macros for PlatformCALayer and subclasses, and use them
        where appropriate.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::isPlatformCALayerMac):
        (WebCore::PlatformCALayer::isPlatformCALayerRemote):
        (WebCore::PlatformCALayer::PlatformCALayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:

2013-12-31  Simon Fraser  <simon.fraser@apple.com>

        ScrollingStateNodes should have a reference to the ScrollingStateTree
        https://bugs.webkit.org/show_bug.cgi?id=126348

        Reviewed by Sam Weinig.

        Make ScrollingStateNodes always belong to a ScrollingStateTree, and thus
        have a reference to the tree rather than a pointer. When cloning nodes,
        they are adopted by a new ScrollingStateTree, which adds them to its
        node map (which didn't happen before).
        
        In subclasses access the ScrollingStateTree through a member function.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::create):
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        (WebCore::ScrollingStateFixedNode::clone):
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::cloneAndReset):
        (WebCore::ScrollingStateNode::cloneAndResetChildren):
        (WebCore::ScrollingStateNode::willBeRemovedFromStateTree):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::scrollingStateTree):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::create):
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::clone):
        (WebCore::ScrollingStateScrollingNode::setViewportRect):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin):
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters):
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateScrollingNode::setFooterHeight):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::create):
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        (WebCore::ScrollingStateStickyNode::clone):
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::addNode):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        (WebCore::ScrollingStateNode::setScrollLayer):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2013-12-31  Simon Fraser  <simon.fraser@apple.com>

        Give ScrollingStateNodes a nodeType()
        https://bugs.webkit.org/show_bug.cgi?id=126347

        Reviewed by Tim Horton.

        When we start serializing ScrollingStateNodes to send to the UI process,
        it's more convenient if they have a nodeType member rather than virtual functions,
        so give them one, and fix the casting macros to use it. This allows us to use
        a switch() on node creation, so the compiler will tell us if we forgot to create
        a node type.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h: const ScrollingNodeType field
        (can't be modified after construction), and move the m_scrollingStateTree
        member after it (the awkward protected:/private: will be cleaned up in a later patch).
        (WebCore::ScrollingStateNode::nodeType):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

2013-12-31  Andreas Kling  <akling@apple.com>

        Out-of-line RenderStyle substructure copying helpers.
        <https://webkit.org/b/126340>

        This shrinks the .access() calls by moving memory allocation logic
        out-of-line, though I'm really doing this to make Instruments.app
        allocations output more readable.

        Writes to e.g 'font' or 'color' will now be grouped under a single
        StyleInheritedData::copy() call instead of being spread out over
        setFontDescription(), setLineHeight(), setColor(), etc.

        Reviewed by Anders Carlsson.

2013-12-31  Andreas Kling  <akling@apple.com>

        RenderListItem should store its marker in a RenderPtr.
        <https://webkit.org/b/126298>

        Make RenderListItem::m_marker a RenderPtr<RenderListMarker> and
        remove two manual destroy() calls. Tweaked code to reduce nesting.

        Reviewed by Anders Carlsson.

2013-12-31  Andreas Kling  <akling@apple.com>

        Element's renderer factory should return RenderPtrs.
        <https://webkit.org/b/126318>

        Rename Element::createRenderer() to createElementRenderer() and have
        it return RenderPtr<RenderElement>. Propagate signature until it
        builds again.

        We leakPtr() the renderer at two call sites when handing things over
        to raw pointer API. This'll get tidied up in subsequent patches.

        Reviewed by Sam Weinig.

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Return early in ResourceHandle::receivedCancellation if the load has already cancelled
        https://bugs.webkit.org/show_bug.cgi?id=126287

        Reviewed by Martin Robinson.

        This situation can happen when using the network process, because
        the ReceivedCancellation message can be received when the resource
        loader has already been removed, but the authentication challenge
        still has a reference to the ResourceHandleClient.

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

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] The initiating page is lost after a redirection
        https://bugs.webkit.org/show_bug.cgi?id=126293

        Reviewed by Martin Robinson.

        The initiating page id is attached to the initial soup request
        object, but not to the one created after a redirection.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupRequestAndMessageForHandle): Call
        setSoupRequestInitiatingPageIDFromNetworkingContext() here if the
        soup request is created successfully.
        (WebCore::ResourceHandle::start): Remove the call to
        setSoupRequestInitiatingPageIDFromNetworkingContext().

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Implement ResourceHandle::continueWillSendRequest()
        https://bugs.webkit.org/show_bug.cgi?id=126291

        Reviewed by Martin Robinson.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::continueAfterWillSendRequest): Helper function that
        continues with the load after willSendRequest has been called.
        (WebCore::doRedirect): Call continueAfterWillSendRequest() when
        client doesn't use async callbacks.
        (WebCore::ResourceHandle::continueWillSendRequest): Call
        continueAfterWillSendRequest().

2013-12-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] willSendRequest doesn't work after a redirect
        https://bugs.webkit.org/show_bug.cgi?id=126290

        Reviewed by Martin Robinson.

        The problem is that we are creating the new soup request for the
        redirect before calling ResourceHandleClient::willSendRequest() so
        that any change made to the request by the client is ignored.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Create the new soup request and soup
        message for the redirect after calling willSendRequest() on the
        client.

2013-12-30  Andreas Kling  <akling@apple.com>

        InputType should return input renderers wrapped in RenderPtr.
        <https://webkit.org/b/126307>

        Rename InputType::createRenderer() to createInputRenderer() and
        make it return RenderPtr<RenderElement>. Also made it non-const.

        Reviewed by Anders Carlsson.

2013-12-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Cleanup static_cast<HTMLFormElement*> by using toHTMLFormElement()
        https://bugs.webkit.org/show_bug.cgi?id=126309

        Reviewed by Andreas Kling.

        To detect bad type casts, it would be good to use toHTMLFormElement() instead of
        using manual type cast. Additionally FORM_ASSOCIATED_ELEMENT_TYPE_CASTS is introduced newly
        to do it.

        No new tests, no behavior changes.

        * html/FormAssociatedElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2013-12-30  Anders Carlsson  <andersca@apple.com>

        Replace yield() and pauseBriefly() with std::this_thread::yield()
        https://bugs.webkit.org/show_bug.cgi?id=126105

        Reviewed by Sam Weinig.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-30  Andreas Kling  <akling@apple.com>

        Rename createRenderObject() to createRenderer().

        Somewhat rubber-stamped by Antti Koivisto.

2013-12-30  Andreas Kling  <akling@apple.com>

        Document should store its RenderView in a RenderPtr.
        <https://webkit.org/b/126299>

        Make Document::m_renderView a RenderPtr<RenderView> and remove one
        manual destroy() call. Also removed the setRenderView() helper and
        inlined it at the two call sites.

        Reviewed by Antti Koivisto.

2013-12-30  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Add support for GObject introspection
        https://bugs.webkit.org/show_bug.cgi?id=126162

        Reviewed by Daniel Bates.

        * PlatformGTK.cmake: Build a list of WebKitDOM headers and expose it to the
        parent scope of the build.

2013-12-30  Andreas Kling  <akling@apple.com>

        Text::createTextRenderer() should return a RenderPtr.
        <https://webkit.org/b/126292>

        Make createTextRenderer() return a RenderPtr and remove one manual
        destroy() call. Also, since it should always return a valid object,
        I turned a null check into an assertion instead.

        Reviewed by Antti Koivisto.

2013-12-30  Antti Koivisto  <antti@apple.com>

        Remove attachChild
        https://bugs.webkit.org/show_bug.cgi?id=126288

        Reviewed by Andreas Kling.

        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        
            Rename detachChild and move the tests here.

        (WebCore::ContainerNode::takeAllChildrenFrom):
        
            No need to call attachRenderTree explicitly anymore.

        (WebCore::ContainerNode::removeBetween):

2013-12-29  Andreas Kling  <akling@apple.com>

        RenderLayer: Store corner and resizer renderers in RenderPtrs.
        <https://webkit.org/b/126274>

        Turn RenderLayer::m_scrollCorner and m_resizer into RenderPtrs.
        Removed manual destroy() calls as appropriate. Also tweaked some
        code to reduce nesting.

        Reviewed by Anders Carlsson.

2013-12-30  Antti Koivisto  <antti@apple.com>

        XML document builder should create render tree asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=126285

        Reviewed by Andreas Kling.
        
        Stop creating renderers explicitly. 
        Fix SVG <use> element to not rely on parse time render tree construction.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):
        
            Remove renderer check, we may not have created the render tree yet.

        (WebCore::SVGUseElement::willAttachRenderers):
        
            Switch to willAttachRenderers from willRecalcStyle. The latter is only called as long as style
            recalc doesn't start creating new renderers.

        (WebCore::SVGUseElement::invalidateShadowTree):
        
            Remove renderer check, we may not have created the render tree yet. 
            Invalidate with ReconstructRenderTree so willAttachRenderers will always get called.

        * svg/SVGUseElement.h:
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::exitText):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::cdataBlock):
        
            Remove explicit call to attachRenderTree. The render tree will be created lazily.

2013-12-29  Joone Hur  <joone.hur@intel.com>

        Reverted r156742. The same fix was reverted from Blink due to heap-use-after-free on ClusterFuzz.
        https://bugs.webkit.org/show_bug.cgi?id=126275

        https://codereview.chromium.org/102993011

        Reviewed by Darin Adler.

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

2013-12-29  ChangSeok Oh  <changseok.oh@collabora.com>

        Remove unused functions in GraphicsContext3D.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126265

        Reviewed by Andreas Kling.

        platformGraphicsContext3D, platformTexture and platformLayer in GC3D.cpp
        seem not used by any ports.

        No new tests, no functionality changed.

        * platform/graphics/GraphicsContext3D.cpp:

2013-12-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build error on 64bit debug build.
        https://bugs.webkit.org/show_bug.cgi?id=126248

        r161076 used ‘%lli’(for long long int) for int64_t(aka long int).
        However, in a 64bit compile, int64_t is 'long int', not a 'long long int'.
        To support 32bit and 64bit, we use static_cast<long long>.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit):

2013-12-29  Antti Koivisto  <antti@apple.com>

        Remove some accidental commented out code.

        * testing/Internals.cpp:
        (WebCore::Internals::mallocStatistics):

2013-12-29  Antti Koivisto  <antti@apple.com>

        Fix build.

        * xml/parser/XMLDocumentParser.cpp:

2013-12-29  Antti Koivisto  <antti@apple.com>

        Remove Node::attached()
        https://bugs.webkit.org/show_bug.cgi?id=126276

        Reviewed by Sam Weinig.

        Node::attached() is poorly defined. Replace it with renderer() and inRenderedDocument() tests as appropriate.
        
        Also remove some unnecessary explicit attachRenderTree/detachRenderTree calls from the tree builders.

2013-12-29  Andreas Kling  <akling@apple.com>

        RenderLayer: Store reflection renderer in a RenderPtr.
        <https://webkit.org/b/126273>

        Reviewed by Anders Carlsson.

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::calculateClipRects):

            Turn RenderLayer::m_reflection into a RenderPtr<RenderReplica>
            instead of a raw pointer.

        * WebCore.xcodeproj/project.pbxproj:

            Add RenderPtr.h to private headers.

2013-12-28  Andreas Kling  <akling@apple.com>

        Add an owning smart pointer for RenderObjects and start using it.
        <https://webkit.org/b/126251>

        This patch adds a RenderPtr pointer, essentially an OwnPtr for
        RenderObjects. The difference is that RenderPtr destroys the object
        by calling destroy() on it.

        This is necessary to implement the willBeDestroyed() mechanism in
        RenderObject that notifies renderers just before they are about to
        be deleted, while they can still do tree traversal, etc.

        I also added a make_unique-alike helper so you can write:

            auto renderer = createRenderObject<RenderImage>(...);

        Put it all to use by making ContentData::createRenderer() return
        RenderPtr<RenderObject> instead of raw RenderObject*.

        Reviewed by Antti Koivisto.

2013-12-28  Benjamin Poulain  <benjamin@webkit.org>

        Add a missing include path for GTK
        https://bugs.webkit.org/show_bug.cgi?id=126257

        Reviewed by Philippe Normand.

        * GNUmakefile.am:

2013-12-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r160733.

        * bindings/gobject/webkitdom.symbols:

2013-12-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Downloads are broken with the network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=126131

        Reviewed by Martin Robinson.

        The problem is that the network process crashes when trying to
        convert the handle to a download, because at that point the
        download has finished and the handle is NULL. This happens because
        we are not implementing ResourceHandle::continueDidReceiveResponse().

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::nextMultipartResponsePartCallback): Call
        continueAfterDidReceiveResponse() when not using async callbacks.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::continueAfterDidReceiveResponse): Helper function that
        continues the load after didReceiveResponse.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Call
        continueAfterDidReceiveResponse().

2013-12-27  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows build after <http://trac.webkit.org/changeset/161106>
        (https://bugs.webkit.org/show_bug.cgi?id=126180)

        * WebCore.vcxproj/WebCore.vcxproj.filters: Add files platform/audio/{AudioSession, AudioSessionListener}.h
        * WebCore.vcxproj/WebCoreCommon.props: Add directory WebCore/platform/audio to the list of
        include directories.

2013-12-27  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build after <http://trac.webkit.org/changeset/161106>
        (https://bugs.webkit.org/show_bug.cgi?id=126180)

        Add files platform/audio/AudioSession.{cpp, h} and platform/audio/AudioSessionListener.h
        to the Visual Studio project. Note, the contents of these files are guarded by USE(AUDIO_SESSION),
        which is only enabled on Mac and iOS at the time of writing.

        I thought to try this approach to fix the build so as to avoid adding an extraneous
        USE(AUDIO_SESSION)-guard around the #include "AudioSession.h" in Settings.cpp since
        the contents of the file AudioSession.h is guarded by USE(AUDIO_SESSION).

        * WebCore.vcxproj/WebCore.vcxproj:

2013-12-27  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/page changes
        https://bugs.webkit.org/show_bug.cgi?id=126180

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        (WebCore::EventNames::isGestureEventType): Added.
        * page/AlternativeTextClient.h: Do not define WTF_USE_DICTATION_ALTERNATIVES when building for iOS.
        * page/Chrome.cpp:
        (WebCore::Chrome::Chrome):
        (WebCore::Chrome::dispatchViewportPropertiesDidChange): Added; guarded by PLATFORM(IOS).
        (WebCore::Chrome::setCursor): Make this an empty function when building for iOS.
        (WebCore::Chrome::setCursorHiddenUntilMouseMoves): Ditto.
        (WebCore::Chrome::didReceiveDocType): Added; iOS-specific.
        * page/Chrome.h:
        (WebCore::Chrome::setDispatchViewportDataDidChangeSuppressed): Added; guarded by PLATFORM(IOS).
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didFlushCompositingLayers): Added; guarded by PLATFORM(IOS).
        (WebCore::ChromeClient::fetchCustomFixedPositionLayoutRect): Added; guarded by PLATFORM(IOS).
        (WebCore::ChromeClient::updateViewportConstrainedLayers): Added; guarded by PLATFORM(IOS).
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install): Added iOS-specific code.
        (WebCore::DOMTimer::fired): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow): Ditto.
        (WebCore::DOMWindow::innerHeight): Ditto.
        (WebCore::DOMWindow::innerWidth): Ditto.
        (WebCore::DOMWindow::scrollX): Ditto.
        (WebCore::DOMWindow::scrollY): Ditto.
        (WebCore::DOMWindow::scrollBy): Ditto.
        (WebCore::DOMWindow::scrollTo): Ditto.
        (WebCore::DOMWindow::clearTimeout): Ditto.
        (WebCore::DOMWindow::addEventListener): Ditto.
        (WebCore::DOMWindow::incrementScrollEventListenersCount): Added; guarded by PLATFORM(IOS).
        (WebCore::DOMWindow::decrementScrollEventListenersCount): Added; guarded by PLATFORM(IOS).
        (WebCore::DOMWindow::resetAllGeolocationPermission): Added; Also added FIXME comment.
        (WebCore::DOMWindow::removeEventListener): Added iOS-specific code.
        (WebCore::DOMWindow::dispatchEvent): Modified to prevent dispatching duplicate pageshow and pagehide
        events per <http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-pageshow>.
        (WebCore::DOMWindow::removeAllEventListeners): Added iOS-specific code.
        * page/DOMWindow.h:
        * page/DOMWindow.idl: Added IOS_GESTURE_EVENTS-guarded attributes: ongesture{change, end, start}. Also
        added IOS_TOUCH_EVENTS-guarded attributes: {Touch, TouchList}Constructor.
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Added iOS-specific code.
        (WebCore::EventHandler::clear): Ditto.
        (WebCore::EventHandler::startPanScrolling): Make this an empty function when building for iOS.
        (WebCore::EventHandler::handleMousePressEvent): Modified to invalidate a click when the clicked node is
        null. Also, opt out of code for updating the scrollbars as UIKit manages scrollbars on iOS.
        (WebCore::EventHandler::handleMouseMoveEvent): Opt of code for updating the scrollbars and cursor when building on iOS.
        (WebCore::hitTestResultInFrame): Made this a file-local static function since it's only used in EventHandler.cpp.
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled): Added iOS-specific code.
        * page/EventHandler.h:
        * page/FocusController.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame): Added iOS-specific code.
        (WebCore::Frame::scrollOverflowLayer): Added; iOS-specific.
        (WebCore::Frame::overflowAutoScrollTimerFired): Added; iOS-specific.
        (WebCore::Frame::startOverflowAutoScroll): Added; iOS-specific.
        (WebCore::Frame::checkOverflowScroll): Added; iOS-specific.
        (WebCore::Frame::willDetachPage): Added iOS-specific code.
        (WebCore::Frame::createView): Ditto.
        (WebCore::Frame::setSelectionChangeCallbacksDisabled): Added; iOS-specific.
        (WebCore::Frame::selectionChangeCallbacksDisabled): Added; iOS-specific.
        * page/Frame.h:
        (WebCore::Frame::timersPaused): Added; guarded by PLATFORM(IOS).
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Added iOS-specific code.
        (WebCore::FrameView::clear): Ditto.
        (WebCore::FrameView::flushCompositingStateForThisFrame): Ditto.
        (WebCore::FrameView::graphicsLayerForPlatformWidget): Added.
        (WebCore::FrameView::scheduleLayerFlushAllowingThrottling): Added.
        (WebCore::FrameView::layout): Added iOS-specific code.
        (WebCore::countRenderedCharactersInRenderObjectWithThreshold): Added; helper function used by FrameView::renderedCharactersExceed().
        Also added FIXME comment.
        (WebCore::FrameView::renderedCharactersExceed): Added.
        (WebCore::FrameView::visibleContentsResized): Added iOS-specific code.
        (WebCore::FrameView::adjustTiledBackingCoverage): Ditto.
        (WebCore::FrameView::performPostLayoutTasks): Ditto.
        (WebCore::FrameView::sendResizeEventIfNeeded): Ditto.
        (WebCore::FrameView::paintContents): Added iOS-specific code. Also added FIXME comments.
        (WebCore::FrameView::setUseCustomFixedPositionLayoutRect): Added; iOS-specific.
        (WebCore::FrameView::setCustomFixedPositionLayoutRect): Added; iOS-specific.
        (WebCore::FrameView::updateFixedPositionLayoutRect): Added; iOS-specific.
        * page/FrameView.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::standalone): Added; iOS-specific.
        * page/Navigator.h:
        * page/Navigator.idl: Added WTF_PLATFORM_IOS-guarded attribute: standalone. Also added FIXME comment.
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform): Added iOS-specific code.
        * page/Page.h:
        (WebCore::Page::hasCustomHTMLTokenizerTimeDelay): Added; guarded by PLATFORM(IOS). Also added FIXME comment
        to remove this method.
        (WebCore::Page::customHTMLTokenizerTimeDelay): Added; guarded by PLATFORM(IOS). Also added FIXME comment
        to remove this method.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::removeVisitedLink): Added.
        * page/PageGroup.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setScriptEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setStandalone): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAudioSessionCategoryOverride): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::audioSessionCategoryOverride): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setNetworkDataUsageTrackingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::networkDataUsageTrackingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::sharedNetworkInterfaceNameGlobal): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setNetworkInterfaceName): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::networkInterfaceName): Added; guarded by PLATFORM(IOS).
        * page/Settings.h:
        (WebCore::Settings::setMaxParseDuration): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::Settings::maxParseDuration): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::Settings::standalone): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::telephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setMediaDataLoadsAutomatically): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::mediaDataLoadsAutomatically): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setShouldTransformsAffectOverflow): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::shouldTransformsAffectOverflow): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setShouldDispatchJavaScriptWindowOnErrorEvents): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::shouldDispatchJavaScriptWindowOnErrorEvents): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAlwaysUseBaselineOfPrimaryFont): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::alwaysUseBaselineOfPrimaryFont): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAlwaysUseAcceleratedOverflowScroll): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::alwaysUseAcceleratedOverflowScroll): Added; guarded by PLATFORM(IOS).
        * page/Settings.in: Added IOS_AIRPLAY-guarded setting: mediaPlaybackAllowsAirPlay.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Added iOS-specific code and FIXME comment.
        * page/ios/EventHandlerIOS.mm: Added.
        * page/ios/FrameIOS.mm: Added.
        * page/mac/ChromeMac.mm:
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair): Opt out of code when building for iOS.
        (WebCore::Page::removeSchedulePair): Ditto.
        * page/mac/SettingsMac.mm:
        (WebCore::Settings::shouldEnableScreenFontSubstitutionByDefault): Added iOS-specific code.
        * page/mac/WebCoreFrameView.h:

2013-12-27  Gavin Barraclough  <barraclough@apple.com>

        Merge PageVisibilityState & ViewState::IsVisible in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=126214

        Reviewed by Alexey Proskuryakov.

        WebKit2 redundantly tracks the visibility of the view through two mechanisms - the visibility
        state, and the view state. Remove visibility state from the WebKit2 layer. The visibility
        state also tracks the prerender state - so split this out and handle it separately (a change
        we should make in WebCore, too).

        WebCore - changes the API tests exposed a bug, a view should only ever come out of the
        prerender state when it becomes visible - redundant notifications that the view is still
        hidden should be ignored.

        * page/Page.cpp:
        (WebCore::Page::setVisibilityState):
            - ignore visibility state change to hidden, if the current state is prerender.

2013-12-27  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r160946.

        Add another file to the Windows InspectorAllInOne.cpp.

        * inspector/InspectorAllInOne.cpp:

2013-12-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161096.
        http://trac.webkit.org/changeset/161096
        https://bugs.webkit.org/show_bug.cgi?id=126256

        Made lots of tests crash (Requested by ap on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::appendChild):
        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        (WebCore::Document::moveNodeIteratorsToNewDocument):
        (WebCore::Document::updateRangesAfterChildrenChanged):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):
        (WebCore::Document::documentWillSuspendForPageCache):
        (WebCore::Document::documentDidResumeFromPageCache):
        (WebCore::Document::mediaVolumeDidChange):
        (WebCore::Document::privateBrowsingStateDidChange):
        (WebCore::Document::captionPreferencesChanged):
        (WebCore::Document::validateAutoSizingNodes):
        (WebCore::Document::resetAutoSizingNodes):
        (WebCore::Document::webkitExitFullscreen):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::disconnect):
        (WebCore::MutationObserver::getObservedNodes):
        (WebCore::MutationObserver::deliver):
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::isOldValueRequested):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::collectMatchingObserversForMutation):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::closeMessagePorts):
        (WebCore::ScriptExecutionContext::adjustMinimumTimerInterval):
        (WebCore::ScriptExecutionContext::didChangeTimerAlignmentInterval):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        (WebCore::WebKitNamedFlow::getContent):

2013-12-26  Sam Weinig  <sam@webkit.org>

        Convert some of WebCore/dom over to range-for loops
        https://bugs.webkit.org/show_bug.cgi?id=126250

        Reviewed by Andreas Kling.

        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        * dom/MutationObserver.cpp:
        * dom/MutationObserverInterestGroup.cpp:
        * dom/MutationObserverRegistration.cpp:
        * dom/Node.cpp:
        * dom/NodeRareData.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/WebKitNamedFlow.cpp:

2013-12-26  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Cleanup Source/WebCore/PlatformNix.cmake
        https://bugs.webkit.org/show_bug.cgi?id=126226

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * PlatformNix.cmake:

2013-12-26  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed attempt at Windows build fix.

        I think Window's "AllInOne.cpp" is causing a using namespace JSC
        to cause naming conflicts between Inspector::TypeBuilder::Debugger::types
        and JSC::types. So removing the ambiguity.

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::wrapCallFrames):

2013-12-22  Andreas Kling  <akling@apple.com>

        Make Text::createTextRenderer() take a const RenderStyle&.
        <https://webkit.org/b/126136>

        Nuke a FIXME about constifying a RenderStyle& local.

        Reviewed by Anders Carlsson.

2013-12-22  Andreas Kling  <akling@apple.com>

        Move more inlines from RenderObject to RenderElement.
        <https://webkit.org/b/126134>

        Lift some inline functions that use style() from RenderObject over
        to RenderElement, making them branchless.

        Reviewed by Anders Carlsson.

2013-12-26  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix after r159526.
        isBoxValue is used at out of ENABLE_CSS_SHAPES gaurd. It causes a compile failure.
        So I moved isBoxValue to out side of ENABLE_CSS_SHAPES.

        * css/CSSParser.cpp:

2013-12-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Set m_pos as private in InlineIterator, and use getter and setter functions.
        https://bugs.webkit.org/show_bug.cgi?id=125614

        Reviewed by Alexey Proskuryakov.

        InlineIterator has been exported m_pos as public directly though it is member variable.
        This patch set it as private, and add getter/setter functions for it.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::setOffset):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::matchedEndLine):
        (WebCore::LineBreaker::nextSegmentBreak):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):

2013-12-25  Kim Byung Jun  <bj1987.kim@samsung.com>

        [EFL] Delete file.edc and file_*.png.
        https://bugs.webkit.org/show_bug.cgi?id=125134

        Reviewed by Gyuyoung Kim.

        File_theme uses button form.

        * platform/efl/DefaultTheme/CMakeLists.txt:
        * platform/efl/DefaultTheme/default.edc:
        * platform/efl/DefaultTheme/widget/file/file.edc: Removed.
        * platform/efl/DefaultTheme/widget/file/file_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_normal.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_press.png: Removed.

2013-12-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding createDragImageIconForCachedImageFilename method to DragImageNix
        https://bugs.webkit.org/show_bug.cgi?id=126230

        Reviewed by Daniel Bates.

        Also returning nullptr in other functions that were returning 0 as a pointer.

        * platform/nix/DragImageNix.cpp:
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        (WebCore::createDragImageIconForCachedImageFilename):

2013-12-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Fixing DragData::asFragment signature in DragDataNix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126229

        Reviewed by Daniel Bates.

        * platform/nix/DragDataNix.cpp:
        (WebCore::DragData::asFragment):

2013-12-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161033 and r161074.
        http://trac.webkit.org/changeset/161033
        http://trac.webkit.org/changeset/161074
        https://bugs.webkit.org/show_bug.cgi?id=126240

        Oliver says that a rollout would be better (Requested by ap on
        #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2013-12-25  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Implement version changing
        https://bugs.webkit.org/show_bug.cgi?id=126099

        Reviewed by Sam Weinig.

        No new tests (No change in WebCore behavior).

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit): Update some logging.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform): Move some things that used to be in
          IDBServerConnectionLevelDB::changeDatabaseVersion to this cross-platform location.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::transaction):

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion): Move the actual updating of the database backend
          metadata to the VersionChangeOperation.

2013-12-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Clean up generated sources directories
        https://bugs.webkit.org/show_bug.cgi?id=126216

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Use the new directory variables.

2013-12-25  Dirk Schulze  <krit@webkit.org>

        Support <box> values parsing on 'clip-path' property
        https://bugs.webkit.org/show_bug.cgi?id=126147

        Reviewed by Ryosuke Niwa.

        Support parsing of the background reference boxes, margin-box and bounding-box.
        A box will be a reference box and define the origin for a basic shape.
        If no basic shape is specified, the box defines the clipping path itself.
        The specification text follows the changes to CSS Shapes now.

        https://dvcs.w3.org/hg/FXTF/raw-file/3f213145303e/css-masking-1/index.html#the-clip-path

        Existing parsing test have been extended to test box values as well.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseClipPath):
        * css/CSSParser.h:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):

2013-12-25  David Kilzer  <ddkilzer@apple.com>

        [iOS] Upstream WebCore/pdf changes
        http://webkit.org/b/126097

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added files to project.
        * pdf/ios/PDFDocument.cpp: Added.
        (WebCore::PDFDocumentParser::create):
        (WebCore::PDFDocumentParser::document):
        (WebCore::PDFDocumentParser::PDFDocumentParser):
        (WebCore::PDFDocument::createParser):
        * pdf/ios/PDFDocument.h: Added.
        (WebCore::PDFDocument::create):
        (WebCore::PDFDocument::PDFDocument):

2013-12-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160959.
        http://trac.webkit.org/changeset/160959
        https://bugs.webkit.org/show_bug.cgi?id=126222

        Caused Windows build to fail (Requested by rfong on #webkit).

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-24  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, rolling out r161051.
        http://trac.webkit.org/changeset/161051
        https://bugs.webkit.org/show_bug.cgi?id=45994

        Caused two DFG tests to hit assertions due to a separate bug

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2013-12-24  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash while repainting an invalid region
        https://bugs.webkit.org/show_bug.cgi?id=126152

        Reviewed by Daniel Bates.

        An invalid region, part of a dependency cycle, should not attempt to repaint content from
        its associated named flow, otherwise there may be the case of an infinite repaint cycle,
        resulting in a crash due to a stack overflow.

        Test: fast/regions/repaint/invalid-region-repaint-crash.html

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

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        XMLHttpRequest: status and statusText throw DOM Exception 11 when the state is UNSENT or OPENED.
        https://bugs.webkit.org/show_bug.cgi?id=45994

        Reviewed by Alexey Proskuryakov.

        Merged https://chromium.googlesource.com/chromium/blink/+/23c90460de16e04c5aba7ed942fba76cb79fdb9b.

        Latest XHR spec says that XHR should return 0 and an empty string when it's in UNSENT or OPENED state
        or error flag is set: http://www.w3.org/TR/2012/WD-XMLHttpRequest-20121206/#the-status-attribute

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in ReplaceSelectionCommand
        https://bugs.webkit.org/show_bug.cgi?id=126107

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/c1ebe5c1e808daf9db5e348a8d0ab32570b9f7a5
        except the test since it doesn't reproduce the crash in WebKit.

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

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the pseudo classes link and any-link to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126196

        Reviewed by Ryosuke Niwa.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLink):
        * dom/Node.h:
        (WebCore::Node::flagIsElement):
        (WebCore::Node::flagIsLink):
        Fix the type to match TrustedImm32.

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the experimental CSS code generator files to the remaining build systems
        https://bugs.webkit.org/show_bug.cgi?id=126192

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the pseudo class :focus to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126189

        Reviewed by Ryosuke Niwa.

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

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Remove boolean argument from Element::setChildrenAffectBy* methods
        https://bugs.webkit.org/show_bug.cgi?id=126183

        Reviewed by Daniel Bates.

        Merge https://chromium.googlesource.com/chromium/blink/+/066ef2fa78336b2b65052cb17cb81b367fe7dbbf

        These functions are never called with false.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByActive):
        (WebCore::Element::setChildrenAffectedByDrag):
        * dom/Element.h:
        (WebCore::Element::setChildrenAffectedByHover):

2013-12-23  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build after r161013 and r160672.

        * WebCore.exp.in:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::updateCustomAppearance):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by msaboff.

        Update the bindings code generation and custom objects
        to the new function signatures

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add class matching to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126176

        Reviewed by Antti Koivisto.

        Add selector matching based on classname to the Selector Compiler.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasClasses):
        * dom/ElementData.h:
        (WebCore::ElementData::classNamesMemoryOffset):
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitStringData::sizeMemoryOffset):
        (WebCore::SpaceSplitStringData::tokensMemoryOffset):

2013-12-23  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/storage changes
        https://bugs.webkit.org/show_bug.cgi?id=125913

        Reviewed by David Kilzer.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::openDatabase): Added iOS-specific code.
        (WebCore::StorageAreaSync::sync): Ditto.
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::openTrackerDatabase): Ditto.
        (WebCore::StorageTracker::syncImportOriginIdentifiers): Ditto.
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase): Ditto.
        (WebCore::StorageTracker::syncSetOriginDetails): Ditto.
        (WebCore::StorageTracker::syncDeleteAllOrigins): Ditto.
        (WebCore::StorageTracker::syncDeleteOrigin): Ditto.
        (WebCore::StorageTracker::databasePathForOrigin): Ditto.

2013-12-23  Daniel Bates  <dabates@apple.com>

        Fix the iOS build following <http://trac.webkit.org/changeset/160236>
        (https://bugs.webkit.org/show_bug.cgi?id=125239)

        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Substitute view() for &view().
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Fix indentation of closing brace.
        * rendering/RenderLayerCompositor.cpp: Include MainFrame.h.
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles): Check that page->mainFrame().view()
        is non-null; also add explicit #else clause.
        (WebCore::RenderLayerCompositor::ensureRootLayer): Fix up main frame check.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintFileUploadIconDecorations): Substitute rect for r.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintTextFieldDecorations): Use .get() to access underlying NeverDestroyed item.
        (WebCore::RenderThemeIOS::systemFont):
        * rendering/RenderView.cpp:
        (WebCore::fixedPositionOffset): Substitute frameView.scrollOffset() for frameView->scrollOffset().

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Minor optimization in FrameSelection::setNonDirectionalSelectionIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=126108

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/237b987c324e2e389a9e0350293bfaf16a5e201d

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

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Use isDocumentFragment() instead of comparing nodeType() with Node::DOCUMENT_FRAGMENT_NODE
        https://bugs.webkit.org/show_bug.cgi?id=126178

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/a622cb80af2bfb0c5d91123cbcfa4fa72a06554c

        Use inline Node::isDocumentFragment() instead of virtual nodeType().

        * dom/ContainerNode.cpp:
        (WebCore::collectChildrenAndRemoveFromOldParent):
        * dom/Document.cpp:
        (WebCore::Document::canReplaceChild):

2013-12-23  Gwang Yoon Hwang  <ryumiel@company100.net>

        Clear ScratchBuffer::m_lastLayerSize when clearing the scratch buffer.
        https://bugs.webkit.org/show_bug.cgi?id=126150

        Reviewed by Simon Fraser.

        Since ScratchBuffer::clearScratchBuffer only clears m_lastRadius,
        ShadowBlur doesn't draw shadow into the re-created scratch buffer if it
        tries to draw shadow without blurRadius.

        Clear m_lastLayerSize to empty is enought to ensure that there is no
        drawn contents in the scratch buffer.

        No new tests due to the flaky nature of reproducing the issue.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::clearScratchBuffer):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add id matching to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126154

        Reviewed by Antti Koivisto.

        Compile matching for #id selectors. IDs are Atomic String so it is just a matter
        of comparing the pointers.

        No attempt is made at optimizing for the double #id case because such problem
        do not really happen outside tests.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasId):
        * dom/Element.h:
        (WebCore::Element::elementDataMemoryOffset):
        * dom/ElementData.h:
        (WebCore::ElementData::idForStyleResolutionMemoryOffset):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Update custom setter implementations to perform type checks
        https://bugs.webkit.org/show_bug.cgi?id=126171

        Reviewed by Daniel Bates.

        Update the bindings code generator for setters so that they perform a real
        type check.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeEventListenerCall):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructorStaticStringAttr):
        (WebCore::setJSTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::setJSTestObjByteAttr):
        (WebCore::setJSTestObjOctetAttr):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjLongAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjTypedArrayAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjReplaceableAttribute):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        (WebCore::setJSTestObjAttributeWithReservedEnumType):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        * bindings/scripts/test/JS/JSTestTypedefs.h:

2013-12-23  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/15682948> Update copyright strings

        Reviewed by Dan Bernstein

        * Info.plist:

2013-12-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160945.
        http://trac.webkit.org/changeset/160945
        https://bugs.webkit.org/show_bug.cgi?id=126164

        Seems to have broken multiple canvas tests (Requested by ap on
        #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Removed.
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Removed.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):

2013-12-23  Eric Carlson  <eric.carlson@apple.com>

        AudioSessionManager should be MediaSessionManager
        https://bugs.webkit.org/show_bug.cgi?id=126087

        Reviewed by Jer Noble.

        No new tests, no change in functionality.

        * WebCore.xcodeproj/project.pbxproj: Change file names.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): MediaSessionManagerToken::create() takes a client
            interface instead of the media type.
        * html/HTMLMediaElement.h:

        * platform/audio/AudioSessionListener.h: Include <wtf/Noncopyable.h>.
        
        AudioSessionManager.* -> MediaSessionManager.*
        * platform/audio/AudioSessionManager.cpp: Removed.
        * platform/audio/AudioSessionManager.h: Removed.
        * platform/audio/MediaSessionManager.cpp: Copied from Source/WebCore/platform/audio/AudioSessionManager.cpp.
        (MediaSessionManagerToken::create):
        (MediaSessionManagerToken::MediaSessionManagerToken):
        (MediaSessionManagerToken::~MediaSessionManagerToken):
        (MediaSessionManager::sharedManager):
        (MediaSessionManager::MediaSessionManager):
        (MediaSessionManager::has):
        (MediaSessionManager::count):
        (MediaSessionManager::addToken):
        (MediaSessionManager::removeToken):
        (MediaSessionManager::updateSessionState):
        * platform/audio/MediaSessionManager.h: Copied from Source/WebCore/platform/audio/AudioSessionManager.h.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): MediaSessionManagerToken::create() takes a
            client interface instead of the media type.
        * platform/audio/mac/AudioDestinationMac.h:

        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/audio/mac/AudioSessionManagerMac.cpp: Removed.
        * platform/audio/mac/MediaSessionManagerMac.cpp: Copied from Source/WebCore/platform/audio/mac/AudioSessionManagerMac.cpp.
        (MediaSessionManager::updateSessionState):

2013-12-23  Zan Dobersek  <zdobersek@igalia.com>

        webkit gtk 2.2.3 stable tarball compilation error
        https://bugs.webkit.org/show_bug.cgi?id=125987

        Reviewed by Gustavo Noronha Silva.

        Only try including <gdk/gdkwayland.h> and using GDK_IS_WAYLAND_DISPLAY if the Wayland support has been
        enabled and when not compiling with GTK+ 2 (which occurs when building for libPlatformGtk2).

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):

2013-12-23  Piotr Grad  <p.grad@samsung.com>

        [GStreamer] video/audio seeking is not unified.
        https://bugs.webkit.org/show_bug.cgi?id=125852

        Reviewed by Philippe Normand.

        This bug is fixing regression with seeking audio/video elements and unifies seeking
        in MediaPlayerPrivateGStreamer.

        Test: media/video-seek-with-negative-playback.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::seekIncludingRate):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2013-12-23  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][WK2] WebGL is not working with GLES
        https://bugs.webkit.org/show_bug.cgi?id=126138

        Reviewed by Martin Robinson.

        m_texture has been unnecessarily regenerated. It's generated in GraphicsContext3D
        constructor for offscreen rendering. And m_compositorTexture is used by only Mac port.
        They create it in their GraphicsContext3D constructor so that we don't need to recreate it
        in GC3DOpenGLES::reshapeFBOs.

        No new tests since no functionality changed.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):

2013-12-22  Benjamin Poulain  <bpoulain@apple.com>

        Create a skeleton for CSS Selector code generation
        https://bugs.webkit.org/show_bug.cgi?id=126044

        Reviewed by Antti Koivisto and Gavin Barraclough.

        Add CSSCompiler, which provides the basic infrastructure to compile
        CSS Selectors on x86_64.

        Compilation happens in two phases.
        1) The various matching and relation of each CSSSelector is aggregated into units
           matching a single element: SelectorFragment.
           SelectorFragment also knows about the relations between different fragments,
           and contains all the information to generate the code for a particular element.
        2) The compiler then goes over the fragments, and generate code based on the information
           of each fragment.

        It the current state, SelectorCompiler only compiles the tag matching selectors and
        any of the relation between selectors.

        Depending on the relation and position of a fragment, failure on traversal or matching
        does not necessarily causes the complete selector. A failure can cause matching to
        resume from the parent or the sibling of a previously visisted node.
        The implementation of this is done through the BacktrackingAction. In case of failure,
        the next starting state is setup and the program counter jumps back to the appropriate
        starting point.

        When backtracking, the method used to save the starting point depends on the type
        of backtracking.
        The child/parent relation (">") is very common so it uses an additional register to keep
        the next starting point (m_descendantBacktrackingStart).
        The indirect sibling relation ("~") is much less common and uses the stack to save
        the next starting point.

        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/SelectorCompiler.cpp: Added.
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::compileSelector):
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::updateChainStates):
        (WebCore::SelectorCompiler::isFirstAncestor):
        (WebCore::SelectorCompiler::isFirstAdjacent):
        (WebCore::SelectorCompiler::isAfterChildRelation):
        (WebCore::SelectorCompiler::solveBacktrackingAction):
        (WebCore::SelectorCompiler::requiresAdjacentTail):
        (WebCore::SelectorCompiler::requiresDescendantTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::testIsElementFlagOnNode):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToParentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateParentElementTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAncestorTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToPreviousAdjacent):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDescendantBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateBacktrackingTailsIfNeeded):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        * cssjit/SelectorCompiler.h: Added.
        (WebCore::SelectorCompilationStatus::SelectorCompilationStatus):
        (WebCore::SelectorCompilationStatus::operator Status):
        (WebCore::SelectorCompiler::simpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::selectorCheckerFunctionWithCheckingContext):
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByDirectAdjacentRules):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        * dom/Element.h:
        (WebCore::Element::tagQNameMemoryOffset):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        * dom/Node.h:
        (WebCore::Node::parentNodeMemoryOffset):
        (WebCore::Node::previousSiblingMemoryOffset):
        (WebCore::Node::nodeFlagsMemoryOffset):
        (WebCore::Node::flagIsElement):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedNameImpl::localNameMemoryOffset):
        (WebCore::QualifiedName::QualifiedNameImpl::namespaceMemoryOffset):
        (WebCore::QualifiedName::implMemoryOffset):

2013-12-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash when trying to select content from invalid region
        https://bugs.webkit.org/show_bug.cgi?id=126113

        Reviewed by Antti Koivisto.

        After fix for https://bugs.webkit.org/show_bug.cgi?id=120769, positionForPoint for a region attempts to use the associated named flow to perform its task.
        However, this should happen only when the region is valid. If the region is invalid, part of a dependency cycle, positionForPoint should behave as usual
        for a block instead of a region, otherwise it may run into an infinite loop due to cyclic dependencies and a crash will occur.

        This patch ensures that positionForPoint region specifie behaviour is followed only if the region is valid - not part of a dependency cycle.

        Test: fast/regions/selection/invalid-region-selection-crash.html

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::positionForPoint):

2013-12-21  Dirk Schulze  <krit@webkit.org>

        Start refactoring Filter code to reuse CachedSVGDocument for clipPath
        https://bugs.webkit.org/show_bug.cgi?id=126069

        Reviewed by Andreas Kling.

        Smaller refactoring of the CSS filter style resolver code. Previously the code
        requested the FilterOperations list from RenderStyle and compared the content
        in this list with an internal map. Then the resource loading was triggered.
        With the refactoring we do not request the list from RenderStyle anymore but
        rely on the hash map data entirely.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        * platform/graphics/filters/FilterOperation.h:

2013-12-20  Andy Estes  <aestes@apple.com>

        [Mac] Soft-link WebContentAnalysis.framework
        https://bugs.webkit.org/show_bug.cgi?id=126102

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig: There's no need to modify LDFLAGS
        now that we don't hard link against WebContentAnalysis.framework.
        * WebCore.xcodeproj/project.pbxproj: Removed
        WebContentAnalysis.framework from the 'Link Binary with Libraries'
        build phase.
        * platform/mac/ContentFilterMac.mm: Soft-linked
        WebContentAnalysis.framework and the WebFilterEvaluator @class.
        (WebCore::ContentFilter::ContentFilter): Called getWebFilterEvaluatorClass().
        (WebCore::ContentFilter::isEnabled): Ditto.
        * platform/mac/SoftLinking.h: Added an implementation of
        SOFT_LINK_PRIVATE_FRAMEWORK().

2013-12-21  Antti Koivisto  <antti@apple.com>

        Unreviewed, rolling out r160916.
        http://trac.webkit.org/changeset/160916
        https://bugs.webkit.org/show_bug.cgi?id=126073

        Roll out a temporary fix. The underlying issue was fixed.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::~AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2013-12-21  Antti Koivisto  <antti@apple.com>

        Figure out if node is focusable without requiring renderer
        https://bugs.webkit.org/show_bug.cgi?id=126118

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle):
        
            Use inDocument() test instead of the attached() test. We can compute style for anything that
            is in document.

        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::isContentRichlyEditable):
        (WebCore::Node::hasEditableStyle):
        
            Use computedStyle instead of getting the style from renderer. Computed style gets constructed
            on demand if renderer does not exist. If it does then the existing style is used.

        (WebCore::Node::isEditableToAccessibility):
        (WebCore::Node::canStartSelection):
        (WebCore::Node::isRootEditableElement):
        (WebCore::Node::rootEditableElement):
        * dom/Node.h:
        (WebCore::Node::hasEditableStyle):
        (WebCore::Node::hasRichlyEditableStyle):
        
            Renamed from rendererIsEditable since these no longer require renderer.

        (WebCore::HTMLElement::supportsFocus):
        
            Stop calling updateStyleIfNeeded() and forcing render tree construction.

2013-12-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] ResourceHandleSoup should use async client callbacks when client uses async callbacks
        https://bugs.webkit.org/show_bug.cgi?id=126006

        Reviewed by Martin Robinson.

        This fixes WebKit2 loader client unit tests when using the network
        process.

        * platform/network/ResourceHandle.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Call willSendRequestAsync on the client
        when usesAsyncCallbacks returns true.
        (WebCore::nextMultipartResponsePartCallback): Call
        didReceiveResponseAsync on the client when usesAsyncCallbacks
        returns true.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::ResourceHandle::continueWillSendRequest): Empty
        implementation for now because the default one asserts.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Ditto.
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage): Ditto.

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Replace yield() and pauseBriefly() with std::this_thread::yield()
        https://bugs.webkit.org/show_bug.cgi?id=126105

        Reviewed by Sam Weinig.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        Assert that RootInlineBox::setLineBreakInfo should is never called on a RenderInline without line boxes
        https://bugs.webkit.org/show_bug.cgi?id=126101

        Reviewed by Simon Fraser.

        Merge assertions added in https://chromium.googlesource.com/chromium/blink/+/716ac74fd475b581d69c0aa8ec2d806201c3a420

        The code change was not merged since we never hit the added assertion on the attached test case in WebKit.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::setLineBreakInfo):

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove the references to Node in InjectedScript
        https://bugs.webkit.org/show_bug.cgi?id=126091

        Reviewed by Timothy Hatcher.

        Remove the last DOM references from InjectedScript so that
        InjectedScript can move down into JavaScriptCore. The only
        remaining references were to Nodes, which are all just thin
        wrappers around existing functions. Move Node / JSNode (JSValue)
        conversion into InspectorDOMAgent, where it was used.

        No new tests, no observable change in functionality.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::inspectObject):
        (WebCore::InjectedScript::releaseObject):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptSource.js:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::requestNode):
        (WebCore::InspectorDOMAgent::nodeForObjectId):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::scriptValueAsNode):
        (WebCore::InspectorDOMAgent::nodeAsScriptValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/PageConsoleAgent.cpp:

2013-12-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Faster implementation of text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=125718

        Reviewed by Simon Fraser.

        This new implementation of text-decoration-skip: ink extracts
        each glyph into a path, then decomposes each path into a series
        of contours. It then intersects each contour with the top and
        bottom of the underline (by approximating the contour with a line).
        It then draws underlines in between these intersection regions.

        Tests for text-decoration-skip: ink already exist in
        fast/css3-text/css3-text-decoration/text-decoration-skip

        * platform/graphics/Font.h: Signature of new function
        * platform/graphics/mac/FontMac.mm:
        (WebCore::GlyphIterationState::GlyphIterationState): Persistent
        between calls to findPathIntersections
        (WebCore::findIntersectionPoint): Calculates an intersection point
        between two lines
        (WebCore::findPathIntersections): Called by CGPathApply to find
        intersections of each contour
        (WebCore::Font::intersectionPoints): Function to get the places
        where an underline would intersect a TextRun.
        * rendering/InlineTextBox.cpp:
        (WebCore::compareTuples): Used for sorting intersection ranges
        (WebCore::translateIntersectionPointsToSkipInkBoundaries): Converts
        a sequence of intersection points to the locations where
        text-decoration-skip: ink should draw underlines
        (WebCore::drawSkipInkUnderline): Draws a sequence of short underlines
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::intersectionPoints): Calls Font::intersectionPoints
        * rendering/TextPainter.h:

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give the CommandLineAPIModule its own Host object, making InjectedScriptHost viable for a JS Context
        https://bugs.webkit.org/show_bug.cgi?id=126082

        Reviewed by Timothy Hatcher.

        Extract CommandLineAPIHost from InjectedScriptHost. The command line API contained
        a bunch of DOM specific JavaScript that would not be suitable for a pure JavaScript
        environment. Now that the DOM related code is in this WebCore only module, give this
        module a host object that WebCore will provide.

        No new tests, no observable change in functionality.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add new files.

        * bindings/js/JSCommandLineAPIHostCustom.cpp: Added.
        (WebCore::JSCommandLineAPIHost::inspectedObject):
        (WebCore::getJSListenerFunctions):
        (WebCore::JSCommandLineAPIHost::getEventListeners):
        (WebCore::JSCommandLineAPIHost::inspect):
        (WebCore::JSCommandLineAPIHost::databaseId):
        (WebCore::JSCommandLineAPIHost::storageId):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * inspector/CommandLineAPIHost.cpp: Copied from Source/WebCore/inspector/InjectedScriptHost.cpp.
        (WebCore::CommandLineAPIHost::create):
        (WebCore::CommandLineAPIHost::CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::~CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::disconnect):
        (WebCore::CommandLineAPIHost::inspectImpl):
        (WebCore::CommandLineAPIHost::getEventListenersImpl):
        (WebCore::CommandLineAPIHost::clearConsoleMessages):
        (WebCore::CommandLineAPIHost::copyText):
        (WebCore::CommandLineAPIHost::InspectableObject::get):
        (WebCore::CommandLineAPIHost::addInspectedObject):
        (WebCore::CommandLineAPIHost::clearInspectedObjects):
        (WebCore::CommandLineAPIHost::inspectedObject):
        (WebCore::CommandLineAPIHost::databaseIdImpl):
        (WebCore::CommandLineAPIHost::storageIdImpl):
        * inspector/CommandLineAPIHost.h: Copied from Source/WebCore/inspector/InjectedScriptHost.h.
        (WebCore::CommandLineAPIHost::init):
        * inspector/CommandLineAPIHost.idl: Copied from Source/WebCore/inspector/InjectedScriptHost.idl.
        * inspector/CommandLineAPIModule.cpp:
        These are almost all pure copies from InjectedScriptHost files. Cleaned up a bit.

        * inspector/InjectedScriptModule.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        Modules can now define a host object when they are getting injected.

        (WebCore::CommandLineAPIModule::host):
        * inspector/CommandLineAPIModule.h:
        Provide a CommandLineAPIHost, host object.

        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::host):
        No host object is needed for the CanvasModule.

        * inspector/InjectedScriptSource.js:
        * inspector/CommandLineAPIModuleSource.js:
        When injecting a module, pass on an optional host object to
        the module's source. Move a little more code between the
        two files. The two files are very tightly coupled right now.

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        Move any command line specific logic to CommandLineAPIHost classes.

        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::disconnect):
        * inspector/InjectedScriptManager.h:
        (WebCore::InjectedScriptManager::commandLineAPIHost):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addInspectedHeapObject):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::resetState):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageInjectedScriptManager.cpp:
        (WebCore::PageInjectedScriptManager::PageInjectedScriptManager):
        (WebCore::PageInjectedScriptManager::disconnect):
        * inspector/PageInjectedScriptManager.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        An InjectedScriptManager may optionally have a commandLineAPIHost object.
        If it does, initialize it, and send it messages.

2013-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen.

        This test adds a static class, ImageBufferBackingStoreCache, that vends
        IOSurfaces. It remembers IOSurfaces that have been returned to it until
        a configurable timeout.

        The storage used by this class is in the form of a HashMap from a
        bucketed size to the IOSurface. There are many other data structures
        that could be used, but this implementation gives a 80% hit rate on
        normal browsing of some example sites with Canvas and
        text-decoration-skip: ink. Because the buckets are fairly
        small (rounding the width and height up to multiples of 8), traversing the
        bucket contents takes on average 2 steps. 

        Test: fast/canvas/canvas-backing-store-reuse.html

        * WebCore.xcodeproj/project.pbxproj: Added new caching class
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Added.
        (WebCore::createIOSurface): Moved from ImageBufferCG.cpp
        (WebCore::ImageBufferBackingStoreCache::timerFired): Forget the cache
        contents
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
        (WebCore::ImageBufferBackingStoreCache::get): Static getter
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
        (WebCore::ImageBufferBackingStoreCache::insertIntoCache): Memory-management
        creation function
        (WebCore::ImageBufferBackingStoreCache::takeFromCache): Memory-management
        deletion function
        (WebCore::ImageBufferBackingStoreCache::isAcceptableSurface): Does this cached
        IOSurface fit the bill?
        (WebCore::ImageBufferBackingStoreCache::tryTakeFromCache): Lookup
        a bucket and walk through its contents
        (WebCore::ImageBufferBackingStoreCache::getOrAllocate): Public function
        for clients who want a IOSurface from the cache
        (WebCore::ImageBufferBackingStoreCache::deallocate): Public
        function for clients to return an IOSurface to the pool
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp: Update to use new cache
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):

2013-12-20  Simon Fraser  <simon.fraser@apple.com>

        Change "threaded scrolling" terminology to "asynchronous scrolling"
        https://bugs.webkit.org/show_bug.cgi?id=126094

        Reviewed by Tim Horton.

        Rename ENABLE_THREADED_SCROLLING to ENABLE_ASYNC_SCROLLING, and change
        references to "main thread scrolling" to "synchronous scrolling".
        
        In a few places, functions with names like shouldUpdateScrollLayerPositionOnMainThread()
        were actually returning SynchronousScrollingReasons, so rename them appropriately.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        (WebCore::FrameView::isRubberBandInProgress):
        (WebCore::FrameView::requestScrollPositionUpdate):
        (WebCore::FrameView::updatesScrollLayerPositionOnMainThread):
        (WebCore::FrameView::wheelEvent):
        * page/Page.cpp:
        (WebCore::Page::synchronousScrollingReasonsAsText):
        * page/Page.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewFixedObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::setForceSynchronousScrollLayerPositionUpdates):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously):
        (WebCore::ScrollingCoordinator::setSynchronousScrollingReasons):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h: Awkward "ReasonsForSynchronousScrolling" to avoid
        conflict with the enum called SynchronousScrollingReasons.
        * page/scrolling/ScrollingStateStickyNode.cpp:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/ScrollingThread.cpp:
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/ScrollingTree.cpp:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::synchronousScrollingReasons):
        (WebCore::ScrollingTreeScrollingNode::shouldUpdateScrollLayerPositionSynchronously):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::setSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::logThreadedScrollingMode):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::updateTileCoverageMap):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupFontSubpixelQuantization):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        * testing/Internals.cpp:
        (WebCore::Internals::mainThreadScrollingReasons):
        * testing/Internals.idl:

2013-12-20  Tim Horton  <timothy_horton@apple.com>

        Revert r160327, r160273, and r160260.

        We'll come up with something less aggressive, as this doesn't quite work.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:

2013-12-20  Anders Carlsson  <andersca@apple.com>

        PostAttachCallbackDisabler should take a Document
        https://bugs.webkit.org/show_bug.cgi?id=126090

        Reviewed by Andreas Kling.

        suspendPostAttachCallbacks and resumePostAttachCallbacks always only get the document from the
        container node, so make them static member functions that take a Document&. Also, move PostAttachCallbackDisabler
        to Element.h in preparation for moving post attach callback handling to Element.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        * dom/ContainerNode.h:
        * dom/Element.h:
        (WebCore::PostAttachCallbackDisabler::PostAttachCallbackDisabler):
        (WebCore::PostAttachCallbackDisabler::~PostAttachCallbackDisabler):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachRenderTree):

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Move scheduleSetNeedsStyleRecalc to HTMLFrameOwnerElement
        https://bugs.webkit.org/show_bug.cgi?id=126083

        Reviewed by Antti Koivisto.

        scheduleSetNeedsStyleRecalc is only ever called on HTMLFrameOwnerElement, so
        move it there, remove the Node implementation and make it non-virtual.

        * dom/ContainerNode.cpp:
        * dom/ContainerNode.h:
        * dom/Node.h:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::needsStyleRecalcCallback):
        (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc):
        * html/HTMLFrameOwnerElement.h:

2013-12-20  Andy Estes  <aestes@apple.com>

        Remove an unneeded include of WebCoreSystemInterface.h.

        Rubber-stamped by Dan Bernstein.

        * platform/mac/ContentFilterMac.mm:

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Node post attach callbacks should use references
        https://bugs.webkit.org/show_bug.cgi?id=126081

        Reviewed by Antti Koivisto.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::queuePostAttachCallback):
        (WebCore::ContainerNode::dispatchPostAttachCallbacks):
        (WebCore::needsStyleRecalcCallback):
        (WebCore::ContainerNode::scheduleSetNeedsStyleRecalc):
        * dom/ContainerNode.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::focusPostAttach):
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        (WebCore::updateFromElementCallback):
        (WebCore::HTMLFormControlElement::didRecalcStyle):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        (WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
        * html/HTMLPlugInImageElement.h:

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
        https://bugs.webkit.org/show_bug.cgi?id=126038

        Reviewed by Timothy Hatcher.

        Only inject the CommandLineAPIModule once, when the InjectedScript
        is first created. This avoids running a small snippet of JavaScript
        to check if the module is loaded every time we fetch the InjectedScript.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add new files to the build.

        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createForPage):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::didCreateInjectedScript):
        Add didCreateInjectedScript hook for a subclass to inject more scripts.

        * inspector/PageInjectedScriptManager.h: Added.
        * inspector/PageInjectedScriptManager.cpp: Added.
        (WebCore::PageInjectedScriptManager::didCreateInjectedScript):
        For pages, inject the CommandLineAPIModule.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        This is replaced by PageInjectedScriptManager, we no longer need
        to do extra work every time we fetch the injectedScriptForEval.

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
        https://bugs.webkit.org/show_bug.cgi?id=126038

        Reviewed by Timothy Hatcher.

        No tests, no observable change in behavior.

        Move the CommandLineAPI source into its own module. Load the module
        in InjectedScripts for WebCore::Pages. Not for workers.

        Moving CommandLineAPI into it's own module moves it from being inside
        the same anonymous function to being evaluated outside the anonymous
        function. To connect the two InjectedScript passes itself to the
        injected module, and the CommandLineAPI module places its class on the
        injectedScript as injectedScript.CommandLineAPI.

        This essentially makes the CommandLineAPI module an InjectedScript
        extension. InjectedScriptSource checks for the existence of
        this.CommandLineAPI to see if the fuller version is available. Otherwise
        it falls back to a BasicCommandLineAPI which only exposes "$_",
        which is the "last evaluated result". That will be useful for JS Contexts
        and Workers.

        At the same time, this patch makes InjectedScriptModule more generic,
        to support being used in a pure JavaScript environment, meaning one
        without "window" as the global object.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add files. Minify the CommandLineAPIModuleSource in generation.

        * inspector/CommandLineAPIModule.h: Added.
        * inspector/CommandLineAPIModule.cpp: Added.
        (WebCore::CommandLineAPIModule::CommandLineAPIModule):
        (WebCore::CommandLineAPIModule::injectIfNeeded):
        (WebCore::CommandLineAPIModule::source):
        Inject the module that doesn't return an object, its just evaluated code
        extending the original InjectedScript.

        * inspector/InjectedScriptModule.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        Only ASSERT the result was an object if the Module claims it returns an object.

        * inspector/InjectedScriptCanvasModule.h:
        (WebCore::InjectedScriptCanvasModule::returnsObject):
        Return an object used later to call into the CanvasModule.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        Ensure the CommandLineAPIModule is loaded in the Page's InjectedScript.

        * inspector/CommandLineAPIModuleSource.js: Added.
        Create the CommandLineAPI class and place it on injectedScript.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn):
        Inject either the BasicCommandLineAPI or extended CommandLineAPI.
        Derive the globalObject dynamically instead of assuming window.
        Inject the commandLineAPI on window.console or the globalObject based on context.
        Audit and rename uses of "window" to something like globalObject.

2013-12-20  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Implement smartMagnifyWithEvent: and make it work
        https://bugs.webkit.org/show_bug.cgi?id=125752
        <rdar://problem/15664245>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Add some exports.

2013-12-20  Antti Koivisto  <antti@apple.com>

        http/tests/misc/object-image-error.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=126074

        Reviewed by Andreas Kling.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        (WebCore::HTMLPlugInImageElement::startLoadingImage):
        (WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
        * html/HTMLPlugInImageElement.h:
        
            Start image load from post-attach so we don't re-enter attach when image load fails synchronously.

2013-12-20  Antti Koivisto  <antti@apple.com>

        Crashes in AccessibilityRenderObject::computeAccessibilityIsIgnored()
        https://bugs.webkit.org/show_bug.cgi?id=126073

        Reviewed by Ryosuke Niwa.

        Prevent the crash and try to catch in debug why it is happening.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::~AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2013-12-20  Antti Koivisto  <antti@apple.com>

        Fix asserting accesibility tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::supportsFocus): Accessibility code checks focus status during painting.

2013-12-20  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r160909.
        Remove remaining uses of AttachLazily in code specific to the GTK port.

        * html/shadow/MediaControlsGtk.cpp:
        (WebCore::MediaControlsGtk::initializeControls):
        (WebCore::MediaControlsGtk::createTextTrackDisplay):

2013-12-19  Antti Koivisto  <antti@apple.com>

        Create render tree lazily
        https://bugs.webkit.org/show_bug.cgi?id=120685

        Reviewed by Andreas Kling.

        We currently recompute style and construct renderer for each DOM node immediately after they are added to 
        the tree. This is often inefficient as the style may change immediately afterwards and the work needs to be
        redone. 
        
        With this patch we always compute style and construct render tree lazily, either on style recalc timer or
        synchronously when they are needed. It also removes the 'attached' bit. If document has render tree then
        all nodes are conceptually "attached" even if this happens lazily.
        
        The patch slightly changes behavior of implicit CSS transitions. A synchronous style change during parsing
        may not trigger the animation anymore as laziness means we don't see anything changing. This matches Firefox
        and Chrome in our test cases.
        
        * WebCore.exp.in:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::appendChild):
        
            All attaching is now lazy, remove AttachLazily.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        
            SVG renderers with !isValid() have empty display property value for some reason. Keep the behavior.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAppendChild):
        (WebCore::ContainerNode::updateTreeAfterInsertion):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::destroyRenderTree):
        
            Remove attach bit maintenance.

        (WebCore::Document::webkitDidExitFullScreenForElement):
        
            Do lazy render tree reconstruction after returning from full screen. That is the only reliable way
            to get the render tree back to decent shape.

        * dom/Element.cpp:
        (WebCore::Element::isFocusable):
        
            Remove pointless !renderer()->needsLayout() assert.

        (WebCore::Element::addShadowRoot):
        (WebCore::Element::childShouldCreateRenderer):
        (WebCore::Element::resetComputedStyle):
        
            Take care to reset computed style in all descendants. attachRenderTree no longer does this.

        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::insertBefore):
        (WebCore::Node::replaceChild):
        (WebCore::Node::appendChild):
        (WebCore::Node::setNeedsStyleRecalc):
        
            Propagate ReconstructRenderTree.

        (WebCore::Node::attached):
        
            Emulate the behavior of old attached bit for now so existing code calling this mostly stays working.

        * dom/Node.h:
        
            Add new ReconstructRenderTree value for StyleChangeType.

        * dom/Range.cpp:
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):
        (WebCore::Range::compareNode):
        (WebCore::Range::intersectsNode):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::canRebalance):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::activeElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        
            TextControlInnerTextElement always preserves newline even if it doesn't have style yet.

        (WebCore::HTMLElement::supportsFocus):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        
            Don't autofocus until we have renderer.

        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::didNotifySubtreeInsertions):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        
            Lazy render tree construction.

        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeTask):
        
            Don't attach renderer after construction.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::invalidateDistribution):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::willAttachRenderers):
        (WebCore::InsertionPoint::willDetachRenderers):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createTextTrackDisplay):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::createControls):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::getDisplayTree):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachTextRenderer):
        (WebCore::Style::detachTextRenderer):
        
            Remove attached bit maintenance.

        (WebCore::Style::attachChildren):
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::detachShadowRoot):
        (WebCore::Style::detachRenderTree):
        (WebCore::Style::resolveLocal):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::handleAttributeChange):
        
            Make lazy.

        * testing/Internals.cpp:
        (WebCore::Internals::attached):
        (WebCore::Internals::elementRenderTreeAsText):
        (WebCore::Internals::markerAt):
        (WebCore::Internals::nodesFromRect):

2013-12-20  Andreas Kling  <akling@apple.com>

        Devirtualize RenderElement::setStyle().
        <https://webkit.org/b/126065>

        setStyle() was only virtual in order to let RenderSVGBlock override
        the display type in some cases. Devirtualized it and moved the fixup
        logic to StyleResolver::adjustRenderStyle().

        This hack had an evil twin in RenderElement::initializeStyle() that
        also goes away. FIXME--!

        Based on a Blink change by Elliott Sprehn.

        Reviewed by Antti Koivisto.

2013-12-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] When changing flow-from/flow-into on :hover, elements overflowing the region are not correctly repainted
        https://bugs.webkit.org/show_bug.cgi?id=117259

        Reviewed by Antti Koivisto.

        When computing the repaint rect for a region, the existing visual overflow must be taken into consideration.
        For this purpose, I overridden the visualOverflowRect method in RenderNamedFlowFragment, which ends up being
        called from RenderBox::clippedOverflowRectForRepaint. 

        Test: fast/regions/hover-single-flow-from-none-overflow.html
              fast/regions/hover-single-flow-from-none-overflow-top.html

        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::visualOverflowRect):
        * rendering/RenderNamedFlowFragment.h:

2013-12-20  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Test: accessibility/children-changed-sends-notification.html

        Emit children-changed::add and children-changed::remove whenever
        an object has been added/removed to the accessibility hierarchy,
        that is, when a new AtkObject is being attached/detached.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::detachWrapper): Added a new parameter and
        updated all the prototypes in different ports.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache): Call detachWrapper()
        specifying that we do it because the cache is being destroyed.
        (WebCore::AXObjectCache::remove): Call detachWrapper() specifying
        that we do it because an accessible element is being destroyed.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper): Emit the children-changed
        signal when needed. We rely on the cached reference to the parent
        AtkObject (using the implementation of atk_object_get_parent from
        the AtkObject class) to find the right object to emit the signal
        from here, since the accessibility hierarchy from WebCore will no
        longer be accessible at this point.
        (WebCore::AXObjectCache::attachWrapper): Emit the children-change
        signal from here unless we are in the middle of a layout update,
        trying to provide as much information (e.g. the offset) as possible.
        (WebCore::AXObjectCache::postPlatformNotification): Make sure we
        update (touch) the subtree under an accessibility object whenever
        we receive AXChildrenChanded from WebCore, to ensure that those
        objects will also be visible rightaway to ATs, and that those get
        properly notified of the event at that very same moment.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper): Updated function signature.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Ditto.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper): Ditto.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::children): Add the option ot
        request the AccessibilityChildrenVector without updating it if
        needed, to avoid maybe recreating the child subtree when trying to
        get the offset of a newly attached element from attachWrapper.
        * accessibility/AccessibilityObject.h:

2013-12-20  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Move function calls outside loop in dom
        https://bugs.webkit.org/show_bug.cgi?id=125916

        Reviewed by Csaba Osztrogonác.

        Do not call length() in each iteration.

        * dom/Element.cpp:
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):

2013-12-19  Beth Dakin  <bdakin@apple.com>

        REGRESSION: cnn.com will continue to reveal 1 px of overhang after rubber-banding 
        at the top
        https://bugs.webkit.org/show_bug.cgi?id=126054

        Reviewed by Simon Fraser.

        This regression was caused by http://trac.webkit.org/changeset/160791 It turns out 
        that the line of code I removed was not always a no-op. In some instances, like on 
        cnn.com, it would ensure that our final scroll position after a rubber-band was 
        not something within the overhang area. It was still wrong in its assumption that 
        rubber-band is always bouncing back the spot it originated from. So this patch 
        continues to ignore the rubber-bands origin, and instead finds the nearest point 
        that is not in the overhang area, and scrolls to that point instead of the origin.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionToBoundsIfNecessary):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2013-12-19  Simon Fraser  <simon.fraser@apple.com>

        Clarify the behavior of composited canvases
        https://bugs.webkit.org/show_bug.cgi?id=126042

        Reviewed by Tim Horton.

        Different platforms composite 2D and 3D canvases in different ways.
        
        "Accelerated 2D" canvases, and WebGL are always set as GraphicsLayer
        contents.
        
        "IOSurface" canvases (Mac and iOS-only) get a compositing layer, but
        paint into it (because this is fast, and a convenient way to get
        synchronization).
        
        So make these behaviors explicit in RenderLayerBacking and RenderLayerCompositor.
        No behavior changes on OS X, bug fix on iOS.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::contentChanged):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):

2013-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add InspectorFrontendHost.debuggableType to let the frontend know it's backend is JavaScript or Web
        https://bugs.webkit.org/show_bug.cgi?id=126016

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::debuggableType):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Expose the debuggableType to the frontend. In WebCore it is always a "web" type.

2013-12-19  Benjamin Poulain  <benjamin@webkit.org>

        Add an utility class to simplify generating function calls
        https://bugs.webkit.org/show_bug.cgi?id=125972

        Reviewed by Geoffrey Garen.

        FunctionCall is a little helper class to make function calls from the JIT
        in 3 or 4 lines.

        FunctionCall takes a StackAllocator, a RegisterAllocator and a function pointer.
        When the call is generated, the helper saves the registers as necessary, aligns
        the stack, does the call, restores the stack, and restore the registers.

        * cssjit/FunctionCall.h: Added.
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setFunctionAddress):
        (WebCore::FunctionCall::setFirstArgument):
        (WebCore::FunctionCall::call):

        (WebCore::FunctionCall::callAndBranchOnCondition): Most test functions used
        with FunctionCall return a boolean. When the boolean is the sole purpose of the function
        call, this provides an easy way to branch on the boolean without worrying about registers.

        The return register is tested first, then all the saved registers are restored from the stack
        (which can include the return register), finally the flags are used for a jump.

        (WebCore::FunctionCall::prepareAndCall):
        (WebCore::FunctionCall::cleanupPostCall):
        (WebCore::FunctionCall::saveAllocatedRegisters):
        (WebCore::FunctionCall::restoreAllocatedRegisters):
        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/FunctionCall.h: Added.
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setFunctionAddress):
        (WebCore::FunctionCall::setFirstArgument):
        (WebCore::FunctionCall::call):
        (WebCore::FunctionCall::callAndBranchOnCondition):
        (WebCore::FunctionCall::prepareAndCall):
        (WebCore::FunctionCall::cleanupPostCall):
        (WebCore::FunctionCall::saveAllocatedRegisters):
        (WebCore::FunctionCall::restoreAllocatedRegisters):

2013-12-19  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out the KeyedDecoder class
        https://bugs.webkit.org/show_bug.cgi?id=126031

        Reviewed by Andreas Kling.

        KeyedDecoder is going to be the new way to decode back forward trees.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::decodeBackForwardTree):
        * history/HistoryItem.h:
        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::~KeyedDecoder):

2013-12-19  Oliver Hunt  <oliver@apple.com>

        DOM bindings should use thisValue for attributes
        https://bugs.webkit.org/show_bug.cgi?id=126011

        Reviewed by Antti Koivisto.

        Make all standard DOM attributes use the thisValue instead
        of the slot object.  This requires using a dynamic cast in
        the attribute getters. Happily for normal uses this a single
        indirect load and pointer compare, and we were already doing
        it for many attributes.

        Alas it's too expensive to do this on the window object still
        due to the proxy indirection that intercepts global variable
        access.  I'll correct this in a follow on patch (bug 126013).

        A number of custom getters have also been updated to use the
        thisValue and full type checks.

        This patch still leaves the index and generic named getters
        on the slot based model as fixing these cases requires more
        complicated changes.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionName):
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructorImplementsStaticReadOnlyAttr):
        (WebCore::jsTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::jsTestInterfaceImplementsStr1):
        (WebCore::jsTestInterfaceImplementsStr2):
        (WebCore::jsTestInterfaceImplementsStr3):
        (WebCore::jsTestInterfaceImplementsNode):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticReadOnlyAttr):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::jsTestInterfaceSupplementalNode):
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlyLongAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjConstructorStaticReadOnlyLongAttr):
        (WebCore::jsTestObjConstructorStaticStringAttr):
        (WebCore::jsTestObjConstructorTestSubObj):
        (WebCore::jsTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::jsTestObjByteAttr):
        (WebCore::jsTestObjOctetAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjLongAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjTypedArrayAttr):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjCustomAttr):
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjConditionalAttr4Constructor):
        (WebCore::jsTestObjConditionalAttr5Constructor):
        (WebCore::jsTestObjConditionalAttr6Constructor):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjAnyAttribute):
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjMutablePoint):
        (WebCore::jsTestObjImmutablePoint):
        (WebCore::jsTestObjStrawberry):
        (WebCore::jsTestObjStrictFloat):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::jsTestObjReplaceableAttribute):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjAttribute):
        (WebCore::jsTestObjAttributeWithReservedEnumType):
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsImmutableSerializedScriptValue):
        (WebCore::jsTestTypedefsConstructorTestSubObj):
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsAttrWithSetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithSetterException):
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeReadonly):
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):

2013-12-19  Andy Estes  <aestes@apple.com>

        Remove WebFilterEvaluator wrappers from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=126028

        Reviewed by Anders Carlsson.

        It's overkill to pipe access to WebFilterEvaluator through
        WebKitSystemInterface. Instead, include WebFilterEvaluator.h when it
        exists and re-declare WebFilterEvaluator when it doesn't.
        
        WebKitSystemInterface used to soft-link WebContentAnalysis.framework
        since OS X 10.7 didn't contain this framework. Since we no longer
        support 10.7, we can now directly link against the framework.

        * Configurations/WebCore.xcconfig: Add /System/Library/PrivateHeaders
        to the system framework search path at both compile and link time so
        that we can find WebContentAnalysis.framework.
        * WebCore.exp.in: Don't export removed symbols.
        * WebCore.xcodeproj/project.pbxproj: Added WebContentAnalysis.framework
        to the 'Link Binary With Libraries' build phase.
        * platform/mac/ContentFilterMac.mm: Included WebFilterEvaluator.h when
        it exists and re-declared WebFilterEvaluator when it doesn't.
        (WebCore::ContentFilter::ContentFilter): Directly called a method on
        m_platformContentFilter rather than going through WKSI.
        (WebCore::ContentFilter::isEnabled): Ditto.
        (WebCore::ContentFilter::addData): Ditto.
        (WebCore::ContentFilter::finishedAddingData): Ditto.
        (WebCore::ContentFilter::needsMoreData): Ditto.
        (WebCore::ContentFilter::didBlockData): Ditto.
        * platform/mac/WebCoreSystemInterface.h: Removed function pointers for
        calling into WKSI.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2013-12-19  Andreas Kling  <akling@apple.com>

        Use CascadedProperties for page and keyframe style resolution as well.
        <https://webkit.org/b/125997>

        Port StyleResolver's styleForKeyframe() and styleForPage() over to
        the new property cascading code. Neither of them care about !important
        or matched properties caches, so the code is very simple.

        Removed the old applyMatchedProperties and applyProperties code with
        low/high priority passes.

        Reviewed by Antti Koivisto.

2013-12-19  Eric Carlson  <eric.carlson@apple.com>

        tryAddEventListener uses local PassRefPtr<>
        https://bugs.webkit.org/show_bug.cgi?id=126001

        Reviewed by Daniel Bates.

        * dom/Node.cpp:
        (WebCore::tryAddEventListener): Put PassRefPtr<EventListener> parameter into a local RefPtr
            because it is sometimes used twice.

2013-12-19  Ryosuke Niwa  <rniwa@webkit.org>

        overflowchanged event could cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=125978

        Reviewed by Tim Horton.

        Made the event asynchrnous by re-using Document's event queuing ability. Also removed
        the infrastructure to queue up events in FrameView.

        Test: fast/events/overflowchanged-inside-selection-collapse-crash.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::enqueueOverflowEvent):
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateOverflowStatus):
        * page/FrameView.h:
        * rendering/RenderBlock.cpp:
        (WebCore::OverflowEventDispatcher::~OverflowEventDispatcher):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):

2013-12-19  Daniel Bates  <dabates@apple.com>

        Fix the Windows build after <http://trac.webkit.org/changeset/160841>
        (https://bugs.webkit.org/show_bug.cgi?id=125879)

        Add ENABLE(CACHE_PARTITIONING)-guard around call to ResourceRequest::setCachePartition()
        as this function is only compiled when building with cache partitioning enabled.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):

2013-12-19  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/accessibility changes
        https://bugs.webkit.org/show_bug.cgi?id=125925

        Reviewed by Chris Fleizach.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint): Opt out of code when building for iOS.

2013-12-19  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Compile fix for VS2013 when using ACCELERATED_COMPOSITING.
        https://bugs.webkit.org/show_bug.cgi?id=124866

        Reviewed by Darin Adler.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        * platform/graphics/TiledBackingStore.h:
        Added constructor overload to avoid compile errors
        from using MSVC's make_unique as a default parameter.

2013-12-19  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/loader changes
        https://bugs.webkit.org/show_bug.cgi?id=125879

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added symbols for MemoryCache::{addImageToCache, removeImageFromCache}().
        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable): Added.
        (WebCore::DocumentLoader::DocumentLoader): Initialize m_subresourceLoadersArePageCacheAcceptable.
        (WebCore::DocumentLoader::stopLoading): Modified to conditionally call areAllLoadersPageCacheAcceptable().
        (WebCore::DocumentLoader::handleSubstituteDataLoadSoon): Modified to query FrameLoader::loadsSynchronously()
        whether to load substitute data immediately or to schedule a load.
        (WebCore::DocumentLoader::responseReceived): Modified to create a content filer when the response protocol
        is either HTTP or HTTPS, assuming content filtering is enabled.
        (WebCore::DocumentLoader::dataReceived): Modified to call DocumentLoader::setContentFilterForBlockedLoad()
        as appropriate.
        (WebCore::DocumentLoader::clearMainResourceLoader): Added PLATFORM(IOS)-guarded code. Also added a
        FIXME comment to remove the PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
        (WebCore::DocumentLoader::setResponseMIMEType): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::DocumentLoader::startLoadingMainResource): Added PLATFORM(IOS)-guarded code. Also added a
        FIXME comment to remove the PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
        I also substituted static NeverDestroyed<> for DEFINE_STATIC_LOCAL.
        (WebCore::DocumentLoader::setContentFilterForBlockedLoad): Added; guarded by USE(CONTENT_FILTERING).
        (WebCore::DocumentLoader::handleContentFilterRequest): Added; guarded by USE(CONTENT_FILTERING) and PLATFORM(IOS).
        Also added a FIXME comment to remove the PLATFORM(IOS) guard inside its function body once we upstream
        file ContentFilterIOS.mm and implement ContentFilter::requestUnblockAndDispatchIfSuccessful() for Mac.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setResponse): Added; guard by PLATFORM(IOS). Also added a FIXME comment as
        this method seems to violate the encapsulation of DocumentLoader.
        (WebCore::DocumentLoader::subresourceLoadersArePageCacheAcceptable): Added.
        (WebCore::DocumentLoader::documentURL): Added; returns the URL of the document resulting from the DocumentLoader.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument): Added iOS-specific code to create a PDF document.
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::openDateTimeChooser): Opt out of compiling this code for iOS. Also substituted
        nullptr for 0.
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::~FrameProgressTracker):
        (WebCore::FrameLoader::FrameLoader): Initialize m_loadsSynchronously.
        (WebCore::FrameLoader::initForSynthesizedDocument): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::FrameLoader::checkCompleted): Added iOS-specific code with FIXME comment.
        (WebCore::FrameLoader::willLoadMediaElementURL): Added iOS-specific code.
        (WebCore::FrameLoader::stopForUserCancel): Added iOS-specific code and FIXME comment.
        (WebCore::FrameLoader::commitProvisionalLoad): Added iOS-specific code and FIXME comment.
        (WebCore::FrameLoader::transitionToCommitted): Opt out of ENABLE(TOUCH_EVENTS) logic when building for iOS.
        (WebCore::FrameLoader::didFirstLayout): Added iOS-specific code.
        (WebCore::FrameLoader::connectionProperties): Added; guarded by PLATFORM(IOS).
        (WebCore::createWindow): Added iOS-specific code and FIXME comment.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setLoadsSynchronously): Added.
        (WebCore::FrameLoader::loadsSynchronously): Added.
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState): Opt out of scroll position logic when building for iOS.
        (WebCore::HistoryController::replaceCurrentItem): Added.
        * loader/HistoryController.h:
        * loader/PlaceholderDocument.h: Changed access control of constructor from private to protected and removed the FINAL
        keyword from the class so that we can subclass PlaceholderDocument on iOS.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Added USE(QUICK_LOOK)- and USE(CONTENT_FILTERING)-guarded code.
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::shouldUsePurgeableMemory): Added; guarded by PLATFORM(IOS).
        * loader/ResourceBuffer.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest): Added USE(QUICK_LOOK)-guarded code.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad): Added iOS-specific code.
        (WebCore::ResourceLoadScheduler::scheduleLoad): Ditto.
        (WebCore::ResourceLoadScheduler::remove): Added iOS-specific code with FIXME comment.
        (WebCore::ResourceLoadScheduler::crossOriginRedirectReceived): Added null-check for variable oldHost. Also added
        iOS-specific code.
        (WebCore::ResourceLoadScheduler::servePendingRequests): Added iOS-specific code.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Ditto.
        (WebCore::ResourceLoader::willSendRequest): Ditto.
        (WebCore::ResourceLoader::connectionProperties): Added; guarded by PLATFORM(IOS).
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::startLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::ResourceLoader::iOSOriginalRequest): Added; iOS-specific.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin): Added iOS-specific code.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Ditto.
        (WebCore::SubresourceLoader::startLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::SubresourceLoader::didFinishLoading): Added iOS-specific code.
        (WebCore::SubresourceLoader::willCancel): Ditto.
        (WebCore::SubresourceLoader::notifyDone): Ditto.
        (WebCore::SubresourceLoader::releaseResources): Ditto.
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup): Added iOS-specific code.
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto.
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::executeSQLCommand): Ditto.
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Ditto.
        (WebCore::ApplicationCacheStorage::openDatabase): Ditto.
        (WebCore::ApplicationCacheStorage::executeStatement): Ditto.
        (WebCore::ApplicationCacheStorage::store): Ditto.
        (WebCore::ApplicationCacheStorage::storeUpdatedType): Ditto.
        (WebCore::ApplicationCacheStorage::ensureOriginRecord): Ditto.
        (WebCore::ApplicationCacheStorage::loadCache): Ditto.
        (WebCore::ApplicationCacheStorage::remove): Ditto.
        (WebCore::ApplicationCacheStorage::empty): Ditto.
        (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto.
        (WebCore::ApplicationCacheStorage::manifestURLs): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupSize): Ditto.
        (WebCore::ApplicationCacheStorage::deleteCacheGroup): Ditto.
        (WebCore::ApplicationCacheStorage::vacuumDatabaseFile): Ditto.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): Added.
        (WebCore::CachedImage::imageSizeForRenderer): Added iOS-specific code.
        (WebCore::CachedImageManual::CachedImageManual): Added; guarded by USE(CF). Also added FIXME comment to incorporate
        the functionality of this class into CachedImage and to remove the USE(CF)-guard once we make MemoryCache::addImageToCache()
        platform-independent.
        (WebCore::CachedImageManual::mustRevalidateDueToCacheHeaders): Added; guarded by USE(CF).
        * loader/cache/CachedImage.h: Removed FINAL keyword from class so that we can define derived class CachedImageManual.
        (WebCore::CachedImage::isManual): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::CachedImageManual::addFakeClient): Added; guarded by USE(CF).
        (WebCore::CachedImageManual::removeFakeClient): Added; guarded by USE(CF).
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load): Added iOS-specific code.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone): Added argument shouldPerformPostLoadActions, defaults to true. Modified
        to conditionally call performPostLoadActions() with respect to the argument shouldPerformPostLoadActions.
        (WebCore::CachedResourceLoader::preload): Added iOS-specific code.
        (WebCore::CachedResourceLoader::checkForPendingPreloads): Ditto.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        (WebCore::MemoryCache::add): Added iOS-specific code.
        (WebCore::MemoryCache::revalidationFailed): Ditto.
        (WebCore::MemoryCache::resourceForRequest): Ditto.
        (WebCore::MemoryCache::addImageToCache): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::MemoryCache::removeImageFromCache): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::MemoryCache::pruneLiveResources): Modified to take argument shouldDestroyDecodedDataForAllLiveResources.
        (WebCore::MemoryCache::pruneLiveResourcesToSize): Modified to take argument shouldDestroyDecodedDataForAllLiveResources,
        defaults to false. When this argument is true we destroy the decoded data for all live resources from the memory cache.
        Such functionality is useful when the system is running low on memory.
        (WebCore::MemoryCache::evict): Added iOS-specific code.
        * loader/cache/MemoryCache.h:
        * loader/cf/SubresourceLoaderCF.cpp:
        (WebCore::SubresourceLoader::didReceiveDataArray): Actually make this code compile. In particular, there is no
        method called sendDataToResource on SubresourceLoader or in its class hierarchy.
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule): This method has an empty implementation when building for iOS.
        (WebCore::DocumentLoader::unschedule): Ditto.
        * platform/graphics/BitmapImage.h: Exposed decodedSize() to access the decoded size of the bitmap image.
        This functionality is used in MemoryCache::addImageToCache().

2013-12-19  Jer Noble  <jer.noble@apple.com>

        Build fix for platforms which do not define -[AVSampleBufferAudioRenderer muted].
        Rubber-stamped by Eric Carlson.

        To work around platforms with broken AVSampleBufferAudioRenderer headers, just
        declare only those functions we need, and update isAvalable to bail out early if
        those methods are not present.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

2013-12-16  Darin Adler  <darin@apple.com>

        Improve "bad parent" and "bad child list" assertions in line boxes
        https://bugs.webkit.org/show_bug.cgi?id=125656

        Reviewed by Sam Weinig.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root): Use parent() function with assertions rather than
        using m_parent function, which skips the assertions.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::removeAndDestroyTextBoxes): Call invalidateParentChildLists
        if we are in the optimized document-destruction code path and destroying children
        without removing them from their parents.
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::invalidateParentChildLists): Added.
        * rendering/RenderTextLineBoxes.h: Added invalidateParentChildLists.

2013-12-19  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/15696824> [CFNetwork] Loading stops at server redirects
        https://bugs.webkit.org/show_bug.cgi?id=125984

        Reviewed by Anders Carlsson.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest): If the client uses async callbacks, call its
        willSendRequestAsync callback instead if willSendRequest.

2013-12-19  Andreas Kling  <akling@apple.com>

        CascadedProperties: Deferred properties should have inline capacity.
        <https://webkit.org/b/125994>

        Give CascadedProperties::m_deferredProperties an inline capacity
        of 8 to sidestep malloc churn (0.2% of HTML5-8266 profile.)

        Reviewed by Antti Koivisto.

2013-12-19  Andreas Kling  <akling@apple.com>

        Two small refinements to matched properties cache.
        <https://webkit.org/b/125992>

        - Avoid computing the matched properties hash if we're banned from
          using the cache anyway.

        - When adding a new entry to the cache, use move semantics to avoid
          creating a transient copy of all the data.

        Reviewed by Antti Koivisto.

2013-12-19  Andreas Kling  <akling@apple.com>

        CascadedProperties should use a bitset to track property presence.
        <https://webkit.org/b/125991>

        Avoid zeroing out a bunch of memory in the CascadedProperties ctor
        by using a bitset to track whether each property is present in the
        cascaded set.

        Reviewed by Antti Koivisto.

2013-12-19  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Fix description of parameters in Page.setGeolocationOverride
        https://bugs.webkit.org/show_bug.cgi?id=125983

        Reviewed by Joseph Pecoraro.

        No new tests, no changes in behavior.

        * inspector/protocol/Page.json:

2013-12-18  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add AVSampleBufferRendererSynchronizer support.
        https://bugs.webkit.org/show_bug.cgi?id=125954

        Reviewed by Eric Carlson.

        Instead of slaving all the various renderer's CMTimebases to one master timebase,
        use AVSampleBufferRenderSynchronizer, which essentially does the same thing.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::CMTimebaseEffectiveRateChangedCallback): Added; call effectiveRateChanged().
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC): Set up
            the synchronizer and all the observers.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC): Tear down
            the same.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable): Require the
            AVSampleBufferRenderSynchronizer class.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal): Convert Clock -> Synchronizer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::effectiveRateChanged): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer): Ditto.

        Drive-by fix; audio samples can't be subdivided, and video samples are
        rarely combined, so remove the call to CMSampleBufferCallForEachSample:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):

2013-12-18  Andreas Kling  <akling@apple.com>

        CSS: Fall back to cache-less cascade when encountering explicitly inherited value.
        <https://webkit.org/b/125968>

        When encountering an explicitly inherited value for a property that's not
        "statically inherited", drop out of the matched properties cache path
        immediately instead of waiting for some coincidence to trigger it later on.

        Fixes 3 asserting table tests:

        - fast/table/border-collapsing/cached-69296.html
        - tables/mozilla/bugs/bug27038-3.html
        - tables/mozilla_expected_failures/marvin/backgr_border-table-row-group.html

        Reviewed by Antti Koivisto.

2013-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches
        https://bugs.webkit.org/show_bug.cgi?id=125970

        Reviewed by Antti Koivisto.

        The bug was caused by containingBlockForAbsolutePosition returning a non-RenderBlock render object.
        Fixed the bug by obtaining its containg block.

        Also changed the return type of containingBlockForFixedPosition, containingBlockForAbsolutePosition,
        containingBlockForObjectInFlow from RenderElement to RenderBlock as all callers of these functions
        had assumed the return value to be an instance of RenderBlock.

        Test: svg/text/select-text-inside-non-static-position.html

        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::containingBlockForFixedPosition):
        (WebCore::containingBlockForAbsolutePosition):
        (WebCore::containingBlockForObjectInFlow):
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):

2013-12-18  Andreas Kling  <akling@apple.com>

        Don't waste cycles on zeroing every CascadedProperties::Property.
        <https://webkit.org/b/125966>

        The CascadedProperties constructor already zeroes out the whole
        property array. Move the memset() to setDeferred() which is the only
        other place we create a Property.

        Brought to you by Instruments.app. Profile your code today!

        Reviewed by Antti Koivisto.

2013-12-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify the BoxShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=125548

        Reviewed by Andreas Kling.

        Reduce BoxShape's footprint by about 2/3rds. Instead of caching the
        FloatRoundedRects which represent a BoxShape's shape-padding and shape-margin
        boundaries, compute them as needed.

        No new tests, this is just an internal refactoring.

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::shapeMarginLogicalBoundingBox): Now just computes the bounding box rect.
        (WebCore::BoxShape::shapePaddingLogicalBoundingBox): Ditto.
        (WebCore::BoxShape::shapeMarginBounds): Removed the caching logic.
        (WebCore::BoxShape::shapePaddingBounds): Ditto.
        (WebCore::BoxShape::getExcludedIntervals): Use the computed margin bounds, instead of the cached one.
        (WebCore::BoxShape::getIncludedIntervals): Ditto (padding bounds).
        * rendering/shapes/BoxShape.h:
        (WebCore::BoxShape::BoxShape): Simplified the constructor.
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape):
        (WebCore::Shape::createShape):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add AVSampleBufferAudioRenderer support.
        https://bugs.webkit.org/show_bug.cgi?id=125905

        Reviewed by Eric Carlson.

        On platforms which support AVSampleBufferAudioRenderer, add support
        for playback of audio CMSampleBufferRefs generated by AVStreamDataParser.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable): Require AVSampleBufferAudioRenderer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVolume): Pass through to every audio renderer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setMuted): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Slave the renderer's
            timebase to the master clock.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC): Drive by fix; initialize
            m_enabledVideoTrackID.
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC): Call destroyRenderers().
        (WebCore::callProcessCodedFrameForEachSample): Drive by fix; convert the bool return to an OSErr.
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers): Added; flush and destroy the audio
            renderers.  
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Call destroyRenderers().
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Enable or disable the audio
            renderer in response.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Added audio
            specific version.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Ditto.

2013-12-18  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove leftover code from InspectorController after r108965
        https://bugs.webkit.org/show_bug.cgi?id=125956

        Reviewed by Joseph Pecoraro.

        No new tests, no changes in behavior.

        * inspector/InspectorController.h: PostWorkerNotificationToFrontendTask was removed in r108965.

2013-12-18  Andreas Kling  <akling@apple.com>

        CSS: Add a property cascading pass to style application.
        <https://webkit.org/b/125213>

        Add an intermediate pass to style application where we cascade all
        style properties to figure out their final values before starting
        to build RenderStyles.

        This opens up various opportunities for further optimization.

        Reviewed by Antti Koivisto.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::Property::Property):
        (WebCore::StyleResolver::CascadedProperties::CascadedProperties):
        (WebCore::StyleResolver::CascadedProperties::property):
        (WebCore::StyleResolver::CascadedProperties::set):
        (WebCore::StyleResolver::CascadedProperties::addStyleProperties):
        (WebCore::StyleResolver::CascadedProperties::addMatches):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):

            Added. CascadedProperties is something of a container class
            that takes CSS property/value/linkMatchType as input and boils
            them down to the final values that will actually be used.

            Most properties are poked into an unfancy array where latest
            is greatest (unless !important, of course.) Some properties are
            queued up to be applied in parse order, more on that below.

        (WebCore::StyleResolver::applyCascadedProperties):
        (WebCore::StyleResolver::applyMatchedProperties):

            The brains of this patch. applyMatchedProperties() now creates
            a CascadedProperties and uses it to figure out the final values
            and uses applyCascadedProperties() to apply them. Deferred
            properties (parse order) are applied last.

            We may discover during property application that we won't be
            able to use a matched properties cache item. This happens if
            the effective zoom or font changes. If that happens, we start
            the process over, now with the cache disabled. This may need
            some optimization work.

        (WebCore::extractDirectionAndWritingMode):

            Directional properties ending in e.g -before or -after depend on
            the direction and writing mode in effect, so we must begin with
            resolving those properties before doing the full cascade.

            This is done by simply walking the set of matched properties and
            manually applying '-webkit-writing-mode' and 'direction'.

            If this starts showing up in profiles, we can easily cache some
            of the information in e.g RuleData to avoid the traversal here.

        (WebCore::elementTypeHasAppearanceFromUAStyle):

            To determine whether a form element is styled beyond the default
            UA style sheet, StyleResolver caches the border and background
            values from RenderStyle after applying the UA style sheet.

            Those values are then compared against after all style is applied
            and if some (platform-dependent) values differ, the element is
            considered "styled."

            This really only affects elements with -webkit-appearance values
            in the default UA style sheet, so this function determines if an
            element should take the goofy slow path for this.

        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::StyleResolver::CascadedProperties::setDeferred):
        (WebCore::StyleResolver::CascadedProperties::applyDeferredProperties):

            Some CSS properties will write to the same RenderStyle fields when
            applied, so in order to maintain previous behavior, we must apply
            them in the order they were parsed.

            We accomplish this by keeping an ordered queue of such properties
            to apply separately after all the other properties.

        (WebCore::StyleResolver::CascadedProperties::setPropertyInternal):

            Helper for poking values into a CascadedProperties::Property.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::state):

            Expose the StyleResolver::State so CascadedProperties can access it.

2013-12-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=116377

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Add a missing source required by WebKit1 to
        the WebCore build.

2013-12-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify RectangleShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=125536

        Reviewed by Andreas Kling.

        Instead of caching an instance of a private FloatRoundedRect (ish) class for
        RectangleShape's shape-margin and shape-padding bounds, we just compute
        the FloatRect and radii as needed. This reduces the classes footprint a little
        and it simplifies the implementation.

        Removed the private RectangleShape::ShapeBounds class and made its
        cornerInterceptForWidth() method a static function. Added members for
        the RectangleShape constructor args, and private getters for their properties.

        There are no new tests because this is just an internal refactoring.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::shapePaddingBounds):
        (WebCore::RectangleShape::shapeMarginBounds):
        (WebCore::ellipseXIntercept):
        (WebCore::ellipseYIntercept):
        (WebCore::RectangleShape::getExcludedIntervals):
        (WebCore::RectangleShape::getIncludedIntervals):
        (WebCore::cornerInterceptForWidth):
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        (WebCore::RectangleShape::buildPath):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::RectangleShape):
        (WebCore::RectangleShape::rx):
        (WebCore::RectangleShape::ry):
        (WebCore::RectangleShape::x):
        (WebCore::RectangleShape::y):
        (WebCore::RectangleShape::width):
        (WebCore::RectangleShape::height):
        * rendering/shapes/Shape.cpp:
        (WebCore::createCircleShape): Renamed this internal function (it was createShapeCircle) because it was inconsistent.
        (WebCore::createEllipseShape): Ditto.
        (WebCore::Shape::createShape):

2013-12-18  Benjamin Poulain  <benjamin@webkit.org>

        Add a simple stack abstraction for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=125908

        Reviewed by Geoffrey Garen.

        StackAllocator provides an abstraction to make it hard to make mistakes and protects from obvious
        issues at runtime.

        The key roles of StackAllocators are:
        -Provide the necessary stack alignment for function calls (only x86_64 stack for now).
        -Provide ways to save registers on the stack, restore or discard them as needed.
        -Crash at runtime if an operation would obviously cause a stack inconsistency.

        The way simple inconsistencies are detected is through the StackReference object
        returned whenever something is added on the stack.
        The object keeps a reference to the offset of what has been pushed. When the StackReference
        is used to recover the register, if the offset is different, there is a missmatch between
        push() and pop() after the object was pushed.

        * cssjit/StackAllocator.h: Added.
        (WebCore::StackAllocator::StackReference::StackReference):
        (WebCore::StackAllocator::StackReference::operator unsigned):
        (WebCore::StackAllocator::StackAllocator):
        (WebCore::StackAllocator::~StackAllocator):
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):

        (WebCore::StackAllocator::alignStackPreFunctionCall):
        (WebCore::StackAllocator::unalignStackPostFunctionCall):
        Those helpers provide a simple way to have a valid stack prior to a function call.
        Since StackAllocator knows the offset and the platform rules, it can adjust the stack
        if needed for x86_64.

        (WebCore::StackAllocator::discard): Discard a single register or the full stack.

        (WebCore::StackAllocator::combine): combining stacks is the way to solve branches
        where the stack is used differently in each case.
        To do that, the stack is first copied to A and B. Each branch works on its own
        StackAllocator copy, then the two copies are linked together to the original stack.

        The copies ensure the local consistency in each branch, linking the copies ensure global
        consistencies and that both branches end in the same stack state.

        (WebCore::StackAllocator::offsetToStackReference): Helper function to access the stack by address
        through its StackReference.

        (WebCore::StackAllocator::reset):

2013-12-18  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for GStreamer on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=125946

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        Use new GStreamer property sheets for WinCairo.
        * WebCore.vcxproj/WebCoreCairo.props:
        Include GStreamer directory.

2013-12-18  Oliver Hunt  <oliver@apple.com>

        Refactor CodeGeneratorJS - Move attribute function creation out of getOwnPropertyName guard
        https://bugs.webkit.org/show_bug.cgi?id=125940

        Reviewed by Simon Fraser.

        This is just a huge block move of code out from behind the
        ImplementationOverridesGetOwnProperty guard.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2013-12-18  Tim Horton  <timothy_horton@apple.com>

        [iOS] Frequent ASSERT(hasOneRef()) in SharedBuffer::releasePurgeableBuffer
        https://bugs.webkit.org/show_bug.cgi?id=125939

        Reviewed by Simon Fraser.

        r146082 fixed these assertions by not making a purgeable buffer if a SharedBuffer
        has multiple refs, but the check was put in ResourceBuffer::createPurgeableBuffer
        instead of down in SharedBuffer::createPurgeableBuffer.

        This is fine for most WebKit ports, because ResourceBuffer::createPurgeableBuffer
        is the only caller of SharedBuffer::createPurgeableBuffer, but causes trouble for
        not-quite-yet-upstreamed iOS SharedBuffer code, which adds another caller
        of SharedBuffer::createPurgeableBuffer.

        Push the early-return down into SharedBuffer::createPurgeableBuffer to ensure
        that all callers are protected from creating a purgeable buffer if the SharedBuffer
        has previously been vended elsewhere.

        No new tests, has no effect on the current Open Source tree.

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::createPurgeableBuffer):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createPurgeableBuffer):

2013-12-18  Beth Dakin  <bdakin@apple.com>

        Starting a momentum scroll while rubber banding can cause scrolling to jump back 
        when the rubberband snaps
        https://bugs.webkit.org/show_bug.cgi?id=119507
        -and corresponding-
        <rdar://problem/14655893>

        Reviewed by Simon Fraser.

        This line of code was added with the very first implementation of rubber-banding. 
        As far as I can tell, it was always a belt-and-suspenders line of code that is a 
        no-op in all normal rubber-banding. In this J-shaped scrolling case, this line of 
        code is what causes the bug to occur because this line of code assumes that your 
        rubber-band is always trying to take you back to the origin. 
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: make aria-hidden=false work with subtrees
        https://bugs.webkit.org/show_bug.cgi?id=125592

        Reviewed by Mario Sanchez Prada.

        When a hidden object uses aria-hidden=false, that needs to apply to
        the entire sub-tree (not just the object with aria-hidden on it as it does now).

        Enabling this had the side effect of exposing non-rendered text nodes, so there's
        some extra checks to ensure we don't include those elements in this cases.

        Test: accessibility/aria-hidden-false-works-in-subtrees.html

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

2013-12-18  Oliver Hunt  <oliver@apple.com>

        Simplify bindings codegen for adding getOwnPropertySlot overrides
        https://bugs.webkit.org/show_bug.cgi?id=125934

        Reviewed by Alexey Proskuryakov.

        Simple refactoring no change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateHeader):
        (GenerateImplementation):

2013-12-18  Conrad Shultz  <conrad_shultz@apple.com>

        AudioSessionManagerMac.cpp: kLowPowerVideoBufferSize unused before OS X 10.9
        https://bugs.webkit.org/show_bug.cgi?id=125935

        Reviewed by Jer Noble.

        * platform/audio/mac/AudioSessionManagerMac.cpp:
        Add __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 guard.

2013-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some basic DebuggerAgent cleanup
        https://bugs.webkit.org/show_bug.cgi?id=125901

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDebuggerAgent.h:
        Remove virtual from not really virtual method.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        Use member variable instead of private function.

        (WebCore::InspectorDebuggerAgent::setPauseOnExceptions):
        Inline the three lines from the private function.

2013-12-18  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        REGRESSION (r155536): Broken error recovery in @media at-rule
        https://bugs.webkit.org/show_bug.cgi?id=125637

        Reviewed by Darin Adler.

        Error recovery in @media is broken if any of its rules misses the opening '{'.
        The problem is that when the parser recognises the mistake it removes only the last
        WHITESPACE token instead of the whole selector and tries to recover the selector again.
        it swallows everything until it finds the next opening bracket. thats why the '}' brackets
        of both subrules and even the @media rule are ignored, and the whole @media will be
        considered invalid. By joining the selector and its trailing whitespace the error recovery
        ignores the bad selector only and keep the @media rule.

        Test: fast/css/media-error-recovery.html

        * css/CSSGrammar.y.in:

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit not sending AXMenuClosed notification
        https://bugs.webkit.org/show_bug.cgi?id=125783

        Reviewed by Mario Sanchez Prada.

        When an object with a role=menu is removed, we need to send out a notification informing that the menu has closed.
        This means detecting the right kind of destruction event for an element, because we do not want to 
        send this notification when the entire cache is being torn down.

        Test: platform/mac/accessibility/aria-menu-closed-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::remove):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::document):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::detach):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::detach):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::detach):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2013-12-18  Eric Carlson  <eric.carlson@apple.com>

        Do not create cue subtree just to delete it
        https://bugs.webkit.org/show_bug.cgi?id=125904

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setIsActive): Return early if display tree is NULL.
        (WebCore::TextTrackCue::removeDisplayTree): Ditto.

2013-12-17  Oliver Hunt  <oliver@apple.com>

        Remove JSInlineGetOwnPropertySlot attribute as it is no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=125875

        Reviewed by Brady Eidson.

        Tested this on dromaeo and acid3 (the original reason for this attribute)
        and it no longer provided any benefit. This makes it easier to reason about
        creation of getOwnPropertySlot during binding generation.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.idl:

2013-12-18  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Fix ASSERTION FAILED in WebCore::SVGLengthContext::determineViewport
        https://bugs.webkit.org/show_bug.cgi?id=120284

        Reviewed by Philip Rogers.

        Added handling of root <svg> elements.
        Blink merge: https://chromium.googlesource.com/chromium/blink/+/a7dedf81eb7008276bb6854f0e46465e039788f8

        SVGLengthContext::determineViewport() currently asserts that we're not
        resolving lengths for the topmost element, but there's nothing to
        prevent such calls.

        The patch updates determineViewport() to handle root elements geracefully
        (using their current viewport). It also changes the signature slightly
        to operate directly on a FloatSize, reducing some of the boiler-plate
        client code.

        Tests: svg/custom/svg-length-value-handled.svg
               svg/dom/svg-root-lengths.html

        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToPercentage):
        (WebCore::SVGLengthContext::convertValueFromPercentageToUserUnits):
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLengthContext.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2013-12-18  Darin Adler  <darin@apple.com>

        Additional refinement in MathMLSelectElement toggle implementation
        https://bugs.webkit.org/show_bug.cgi?id=125785

        Reviewed by Andreas Kling.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::defaultEventHandler): Call setDefaultHandled
        so this will be handled by only one element.
        (WebCore::MathMLSelectElement::willRespondToMouseClickEvents): Return true
        only when action is set to toggle, since other select elements will not
        respond to mouse click events.
        (WebCore::MathMLSelectElement::toggle): Simplified code a bit and gave
        local a clearer variable name.

2013-12-18  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] Implement interpolation between keywords in basic shapes
        https://bugs.webkit.org/show_bug.cgi?id=125108

        Reviewed by Simon Fraser.

        Allow blending for all center coordinates since top/left and bottom/right default to correct
        Length values of 0% and 100%. For mixed keyword and value positions compute the length's used
        for blending to percentages. This is possible since we compute the reference box bounds given the
        renderer.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Pass additional RenderBox parameter.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Don't check circle/ellipse center anymore, but do check that both
        shapes use the same reference box.
        (WebCore::BasicShape::referenceBoxSize): Compute box dimension depending on reference box.
        (WebCore::BasicShapeCenterCoordinate::lengthForBlending): Convert to percentage for Bottom/Right.
        (WebCore::BasicShapeRectangle::blend):
        (WebCore::DeprecatedBasicShapeCircle::blend):
        (WebCore::BasicShapeCircle::blend):
        (WebCore::DeprecatedBasicShapeEllipse::blend):
        (WebCore::BasicShapeEllipse::blend):
        (WebCore::BasicShapePolygon::blend):
        (WebCore::BasicShapeInsetRectangle::blend):
        (WebCore::BasicShapeInset::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::blend): Use new lengthForBlending.

2013-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        CSS: Null-pointer dereference with negative 'orphans' value.
        https://bugs.webkit.org/show_bug.cgi?id=125924

        Reviewed by Andreas Kling.

        orphans and widows should be positive integer.

        spec link:
        http://www.w3.org/TR/CSS2/page.html#propdef-orphans

        Backported from Blink: https://codereview.chromium.org/108663009

        Test: fast/css/negative-orphans-crash.html

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

2013-12-18  Andreas Kling  <akling@apple.com>

        Make more computed style helpers return values by PassRef.
        <https://webkit.org/b/125923>

        Tighten yet another handful of CSS computed style helper functions
        to return their CSSValues by PassRef where we never return null.

        Reviewed by Antti Koivisto.

2013-12-18  Andreas Kling  <akling@apple.com>

        Use range for syntax in Frame and FrameView.
        <https://webkit.org/b/125922>

        Convert code in Frame and FrameView to use C++11's range for syntax.

        Reviewed by Antti Koivisto.

2013-12-18  Andreas Kling  <akling@apple.com>

        RenderElement-ize adjustForAbsoluteZoom() and friends.
        <https://webkit.org/b/125921>

        Make adjustForAbsoluteZoom() take a const RenderElement& instead
        of a RenderObject* so we can avoid the extra branch in style().
        All call sites already had RenderElements.

        Reviewed by Antti Koivisto.

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: HTML spec change indicates @aria-required should trump @required on any element
        https://bugs.webkit.org/show_bug.cgi?id=122145

        Reviewed by Mario Sanchez Prada.

        aria-required should win over the native "required" attribute.

        Updated tests: accessibility/aria-required.html

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

2013-12-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2013-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [soup] Fix unused parameter warnings in ResourceHandleSoup.
        https://bugs.webkit.org/show_bug.cgi?id=125918

        Reviewed by Martin Robinson.

        Comment out the method parameters to avoid the warnings.

        No tests required.

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

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Periodically monitor source buffers.
        https://bugs.webkit.org/show_bug.cgi?id=125898

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-monitor-source-buffers.html

        The MSE spec requires that the SourceBuffer Monitoring step is run
        periodically during playback. No specific update interval is specified
        so we will re-use the existing HTMLMediaElement playback progress
        timer to signal the media source monitoring.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::playbackProgressTimerFired):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Add per-track signalling between SourceBuffer and SourceBufferPrivate.
        https://bugs.webkit.org/show_bug.cgi?id=125899

        Reviewed by Eric Carlson.

        To accommodate the future addition of audio support to MSE in the Mac
        port, add the concept of trackIDs to the communication between
        SourceBuffer and SourceBufferPrivate.

        The following virtual methods  now take a trackID parameter:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivate::stopAskingForMoreSamples):
        (WebCore::SourceBufferPrivate::notifyClientWhenReadyForMoreSamples):
        * platform/graphics/SourceBufferPrivateClient.h:
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateDidBecomeReadyForMoreSamples):

        Update overridden methods in subclasses:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        Change the logic in provideMediaData to update a single TrackBuffer
        rather than iterating over all of them:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::provideMediaData):

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorAgent::hasFrontend
        https://bugs.webkit.org/show_bug.cgi?id=125907

        Reviewed by Timothy Hatcher.

        Remove InspectorAgent::hasFrontend only used by
        InspectorInstrumentation::collectingHTMLParseErrors. However,
        following the single callers of that, the result is unused
        in the HTMLDocumentParser and HTMLTreeBuilder. So remove
        more stale / unused code.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::create):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * inspector/InspectorAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some basic InjectedScriptHost cleanup
        https://bugs.webkit.org/show_bug.cgi?id=125902

        Reviewed by Timothy Hatcher.

        Remove InjectedScriptHost::scriptDebugServer. Nobody accesses
        the ScriptDebugServer through the injected script host. This
        also lets us remove the reference to the DebuggerAgent.

        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorFrontendHost.setInjectedScriptForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=125906

        Reviewed by Timothy Hatcher.

        Remove stale code related to a since removed feature,
        Inspector extensions. This allows us to remove a number
        of entry points into InspectorAgent.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        Remove setInjectedScriptForOrigin and InjectedScript management.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Remove the API and calling through InspectorController.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        Remove now unnecessary calls into InspectorAgent.

2013-12-17  Jer Noble  <jer.noble@apple.com>

        Fix TimeRanges::intersectWith
        https://bugs.webkit.org/show_bug.cgi?id=118802

        Test: TestWebKitAPI/Tests/WebCore/TimeRanges.cpp.

        Reviewed by Eric Carlson.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/TimeRanges.cpp:
        (TimeRanges::invert):
        (TimeRanges::intersectWith):

        Merge
        https://chromium.googlesource.com/chromium/blink/+/f557582b6c6283a8b165514f52d01cfd98130e85        

2013-12-17  Eric Carlson  <eric.carlson@apple.com>

        ASSERT setting pseudoID with registered DOMSubtreeModified listener
        https://bugs.webkit.org/show_bug.cgi?id=125900

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/attribute-set-before-element-in-tree.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent): Return early if the node does not have a
            parent and does not have a DOMSubtreeModified listener.

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Remove dead code for reflected attributes from audio, video, and track elements
        https://bugs.webkit.org/show_bug.cgi?id=125838

        Reviewed by Eric Carlson.

        Merge https://chromium.googlesource.com/chromium/blink/+/310514e2f0fd934975b841d463bad0cd62e6fd64

        Where [Reflect] is used in the IDL, the getters and setters in C++ are
        only for internal convenience, and these were unused.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:

2013-12-17  Simon Fraser  <simon.fraser@apple.com>

        Rename "canRubberBands" to "canRubberBand"
        https://bugs.webkit.org/show_bug.cgi?id=125897

        Reviewed by Anders Carlsson.

        Rename "canRubberBands" to "canRubberBand" in various places.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::setCanRubberBandState):
        * page/scrolling/ScrollingTree.h:

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Update duration after appending samples, per spec.
        https://bugs.webkit.org/show_bug.cgi?id=125703

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-duration-after-append.html

        After appending a sample, update the MediaSource duration if the sample's
        presentation end time is greater than the existing duration.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::setDuration): Notify the MediaPlayer.

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Null-deref in CMSampleBufferIsRandomAccess().
        https://bugs.webkit.org/show_bug.cgi?id=125698

        Reviewed by Sam Weinig.

        If a given CMSampleBufferRef does not have a sample attachments array (which is unlikely, but
        possible), CMSampleBufferGetAttachmentsArray() will return a null value.

        Additionally, the CMSampleBuffer documentation states that "samples are assumed to be sync
        samples by default", so the absence of an attachment array (or the absense of a
        kCMSampleAttachmentKey_NotSync entry in any of the attachment dictionaries) indicates the
        sample is sync.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::CMSampleBufferIsRandomAccess):

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Video element's width and height content attributes should not influence intrinsic width and height
        https://bugs.webkit.org/show_bug.cgi?id=125822

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/022ce34efb5b70cb964c3ca29f23c8980ffaef05

        The width/height content attributes already influence specified style via
        HTMLVideoElement::collectStyleForPresentationAttribute, to also influence the intrinsic size has never
        been part of the spec: http://www.w3.org/TR/2013/WD-html51-20130528/embedded-content-0.html#dom-dim-width

        The test case passes in Firefox Nightly and IE11 Release Preview, but fails in Opera Presto, which has
        no default intrinsic size.

        Test: media/video-intrinsic-width-height.html

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/html changes
        https://bugs.webkit.org/show_bug.cgi?id=125765

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * html/Autocapitalize.cpp: Added.
        * html/Autocapitalize.h: Added. Also, added FIXME comment to forward declare AtomicString once we upstream
        more of the iOS port.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent): Opt out of code when building for iOS.
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::isKeyboardFocusable): Added; iOS-specific.
        * html/BaseDateAndTimeInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::FileInputType): Added iOS-specific code.
        (WebCore::FileInputType::~FileInputType): Opt out of code when building for iOS. Also, added FIXME comment.
        (WebCore::FileInputType::requestIcon): Ditto.
        (WebCore::FileInputType::filesChosen): Added; iOS-specific.
        (WebCore::FileInputType::displayString): Added; iOS-specific.
        (WebCore::FileInputType::receiveDroppedFiles): Guarded code with ENABLE(DRAG_SUPPORT).
        * html/FileInputType.h:
        * html/FormController.cpp:
        (WebCore::FormController::formElementsCharacterCount): Added.
        * html/FormController.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget): Opt out of code when building for iOS.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::computePath): Changed argument datatype from RenderElement* to RenderObject*.
        Also, added FIXME comment to fix this up once we upstream iOS's DOMUIKitExtensions.{h, mm}.
        (WebCore::HTMLAreaElement::computeRect): Ditto.
        * html/HTMLAreaElement.h:
        * html/HTMLAttributeNames.in: Added attributes ongesture{start, change, end}, autocorrect, autocapitalize,
        data-youtube-id, onwebkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}, webkit-playsinline,
        x-webkit-airplay, and x-webkit-wirelessvideoplaybackdisabled.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft): Added iOS-specific code.
        (WebCore::HTMLBodyElement::scrollTop): Ditto.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLCanvasElement::createImageBuffer): Added iOS-specific code.
        * html/HTMLCanvasElement.h: Added iOS-specific code and FIXME comment.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument): Added argument isSynthesized (default to false), which is
        passed through to Document::Document(), to create a synthesized document.
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::createSynthesizedDocument): Added.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForPresentationAttribute): Added iOS-specific code.
        (WebCore::populateEventNameForAttributeLocalNameMap): Ditto.
        (WebCore::HTMLElement::willRespondToMouseMoveEvents): Added; iOS-specific.
        (WebCore::HTMLElement::willRespondToMouseWheelEvents): Added; iOS-specific.
        (WebCore::HTMLElement::willRespondToMouseClickEvents): Added; iOS-specific.
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp: Added FIXME comment to share more code with class HTMLFormElement.
        (WebCore::HTMLFormControlElement::autocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::setAutocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::autocapitalizeType): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::autocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::setAutocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp: Added FIXME comment to share more code with class HTMLFormControlElement.
        (WebCore::HTMLFormElement::submitImplicitly): Modified to code to allow implicit submission of multi-input
        forms only if Settings::allowMultiElementImplicitSubmission() returns true. Such behavior is expected by older
        iOS apps. Also, changed datatype of variable submissionTriggerCount from int to unsigned because it represents
        a non-negative value.
        (WebCore::HTMLFormElement::autocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::setAutocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::autocapitalizeType): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::autocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::setAutocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLIFrameElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::displayString): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLInputElement::dateType): Added; guarded by PLATFORM(IOS).
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::willRespondToMouseClickEvents): Added iOS-specific code.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Added iOS-specific code.
        (WebCore::HTMLMediaElement::parseMediaPlayerAttribute): Added; iOS-specific.
        (WebCore::HTMLMediaElement::parseAttribute): Added iOS-specific code.
        (WebCore::HTMLMediaElement::insertedInto): Ditto.
        (WebCore::HTMLMediaElement::load): Ditto.
        (WebCore::HTMLMediaElement::prepareForLoad): Ditto.
        (WebCore::HTMLMediaElement::autoplay): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::playInternal): Ditto.
        (WebCore::HTMLMediaElement::pauseInternal): Ditto.
        (WebCore::HTMLMediaElement::setVolumne): Opt out of code when building for iOS.
        (WebCore::HTMLMediaElement::setMuted): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Added iOS-specific code.
        (WebCore::HTMLMediaElement::updateVolume): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        (WebCore::HTMLMediaElement::userCancelledLoad): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLMediaElement::resume): Added iOS-specific comment. See <rdar://problem/9751303>.
        (WebCore::HTMLMediaElement::deliverNotification): Added iOS-specific code.
        (WebCore::HTMLMediaElement::getPluginProxyParams): Added iOS-specific code. Also, changed src() to getNonEmptyURLAttribute()
        in the non-iOS code as their doesn't exist a method called src in this class or its superclasses.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackTargetAvailabilityChanged): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::addEventListener): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::removeEventListener): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::enterFullscreen): Added iOS-specific code.
        (WebCore::HTMLMediaElement::exitFullscreen): Ditto.
        (WebCore::HTMLMediaElement::createMediaPlayer): Added ENABLE(IOS_AIRPLAY)-guarded code.
        (WebCore::HTMLMediaElement::userRequestsMediaLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLMediaElement::shouldUseVideoPluginProxy): Use dot operator instead of dereference operator (->)
        when accessing Document::settings().
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Added ENABLE(PLUGIN_PROXY_FOR_VIDEO)-guarded code.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::userGestureRequiredToShowPlaybackTargetPicker): Added; guarded by ENABLE(IOS_AIRPLAY).
        * html/HTMLMediaElement.idl: Added ENABLE_IOS_AIRPLAY-guarded attributes and functions:webkitCurrentPlaybackTargetIsWireless,
        onwebkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}, and webkitShowPlaybackTargetPicker().
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process): Added iOS-specific code.
        * html/HTMLObjectElement.cpp:
        (WebCore::shouldNotPerformURLAdjustment): Added; iOS-specific.
        (WebCore::HTMLObjectElement::parametersForPlugin): Modified to call shouldNotPerformURLAdjustment() when
        building for iOS.
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createRenderer): Added iOS-specific code.
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree): Added; iOS-specific.
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::usesMenuList): Added iOS-specific code.
        (WebCore::HTMLSelectElement::createRenderer): Ditto.
        (WebCore::HTMLSelectElement::childShouldCreateRenderer): Ditto.
        (WebCore::HTMLSelectElement::willRespondToMouseClickEvents): Added; iOS-specific.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Added iOS-specific code.
        (WebCore::HTMLSelectElement::scrollToSelection): Ditto.
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer): Ditto.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Opt out of code when building for iOS.
        (WebCore::HTMLSelectElement::defaultEventHandler): Added iOS-specific code.
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::willRespondToMouseClickEvents): Added; iOS-specific.
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::select): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Opt out of code when building for iOS.
        (WebCore::HTMLTextFormControlElement::hidePlaceholder): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTextFormControlElement::showPlaceholderIfNecessary): Added; guarded by PLATFORM(IOS).
        * html/HTMLTextFormControlElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createRenderer): Fix up call to HTMLMediaElement::createRenderer().
        (WebCore::HTMLVideoElement::parseAttribute): Added iOS-specific code.
        (WebCore::HTMLVideoElement::supportsFullscreen): Ditto.
        (WebCore::HTMLVideoElement::webkitWirelessVideoPlaybackDisabled): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLVideoElement::setWebkitWirelessVideoPlaybackDisabled): Added; guarded by ENABLE(IOS_AIRPLAY).
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl: Added ENABLE_IOS_AIRPLAY-guarded attribute: webkitWirelessVideoPlaybackDisabled.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Added iOS-specific code.
        (WebCore::ImageDocument::scale): Ditto.
        (WebCore::ImageDocument::resizeImageToFit): Ditto.
        (WebCore::ImageDocument::imageClicked): Ditto.
        (WebCore::ImageDocument::imageFitsInWindow): Ditto.
        (WebCore::ImageDocument::windowSizeChanged): Ditto.
        * html/InputType.cpp:
        (WebCore::InputType::dateType): Added; guarded by PLATFORM(IOS).
        (WebCore::InputType::isKeyboardFocusable): Added iOS-specific code.
        (WebCore::InputType::displayString): Added; guarded by PLATFORM(IOS).
        * html/InputType.h:
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure): Added iOS-specific code.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleTouchEvent): Ditto.
        (WebCore::RangeInputType::disabledAttributeChanged): Added; iOS-specific.
        * html/RangeInputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::addSearchResult): Opt out of code when building for iOS.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::isKeyboardFocusable): Added iOS-specific code.
        * html/TextFieldInputType.h:
        * html/WebAutocapitalize.h: Added.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData): Added iOS-specific code.
        (WebCore::CanvasRenderingContext2D::getImageData): Ditto.
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::isTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken): Added iOS-specific code.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers): Added; guarded by PLATFORM(IOS).
        (WebCore::disallowTelephoneNumberParsing): Added; guarded by PLATFORM(IOS).
        (WebCore::shouldParseTelephoneNumbersInNode): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody): Added iOS-specific code.
        * html/parser/HTMLTreeBuilder.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): Guarded member initialization of m_controls with ENABLE(VIDEO_TRACK). Also added UNUSED_PARAM(event) when building with
        VIDEO_TRACK disabled.
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): Added UNUSED_PARAM(event) when
        building with VIDEO_TRACK disabled.
        * html/shadow/MediaControls.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement): Added iOS-specific code.
        (WebCore::SliderThumbElement::dragFrom): Opt out of code when building for iOS.
        (WebCore::SliderThumbElement::willDetachRenderers):  Added iOS-specific code.
        (WebCore::SliderThumbElement::exclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::setExclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::clearExclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::findTouchWithIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchStart): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchMove): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchEndAndCancel): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::didAttachRenderers): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchEvent): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::shouldAcceptTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::registerForTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::unregisterForTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::disabledAttributeChanged): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler): Opt out of code when building for iOS.
        * html/shadow/TextControlInnerElements.h:
        * page/Settings.in: Added setting allowMultiElementImplicitSubmission to enable/disable multi-input implicit form
        submission (disabled by default). Also added FIXME comment to rename this setting to allowMultiElementImplicitFormSubmission
        once we upstream the iOS changes to WebView.mm.

2013-12-17  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Pipe through object store IDs and transaction mode for "openTransaction"
        https://bugs.webkit.org/show_bug.cgi?id=125872

        Reviewed by Alexey Proskuryakov.

        Make these enums into enum classes.
        Add const maximums for each enum class that might be serialized to allow for conversion later:
        * Modules/indexeddb/IndexedDB.h:

        Add cross-thread copying for these new enum classes.
        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy):
        * platform/CrossThreadCopier.h:

        Adopt the new enum classes throughout the rest of WebCore:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::stringToDirection):
        (WebCore::IDBCursor::directionToString):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::deleteFunction):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::value):
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::createObjectStore):
        (WebCore::IDBDatabaseBackend::deleteObjectStore):
        (WebCore::IDBDatabaseBackend::createIndex):
        (WebCore::IDBDatabaseBackend::deleteIndex):
        (WebCore::IDBDatabaseBackend::get):
        (WebCore::IDBDatabaseBackend::put):
        (WebCore::IDBDatabaseBackend::setIndexKeys):
        (WebCore::IDBDatabaseBackend::openCursor):
        (WebCore::IDBDatabaseBackend::deleteRange):
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        (WebCore::IDBDatabaseBackend::transactionStarted):
        (WebCore::IDBDatabaseBackend::transactionFinished):
        (WebCore::IDBDatabaseBackend::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackend::transactionFinishedAndCompleteFired):
        (WebCore::IDBDatabaseBackend::createTransaction):
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackend::deleteDatabase):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::stringToMode):
        (WebCore::IDBTransaction::modeToString):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::newVersion):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchIteration):

        * WebCore.exp.in:

2013-12-17  Gavin Barraclough  <barraclough@apple.com>

        Remove PageVisibilityStateUnloaded
        https://bugs.webkit.org/show_bug.cgi?id=125869

        Reviewed by Anders Carlsson.

        This is not currently supported by WebKit, remove this enum value.
        We can always add this back later if/when we add support for this state.

        * page/PageVisibilityState.cpp:
        (WebCore::pageVisibilityStateString):
        * page/PageVisibilityState.h:
            - removed PageVisibilityStateUnloaded

2013-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Build the plugin process against GTK+ 2
        https://bugs.webkit.org/show_bug.cgi?id=116374

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Split off the GTK+-dependent sources into
        libWebCorePlatformGTK and compile libWebCorePlatformGTK2 when
        WebKit2 is enabled.

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        Compile fix for WebGL on Windows without GRAPHICS_SURFACE.
        https://bugs.webkit.org/show_bug.cgi?id=125867

        Reviewed by Martin Robinson.

        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffScreenSurface):
        Protect reference to EGLOffScreenSurface with USE(GRAPHICS_SURFACE).

2013-12-17  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Positioned elements in regions get clipped if they fall outside the region
        https://bugs.webkit.org/show_bug.cgi?id=117120

        Reviewed by Mihnea Ovidenie.

        Fixed the computing of the box decorations clip rect when having statically positioned
        elements inside positioned elements. The existing algorithm computed the rect in a loop
        running up the containing block chain and only checked for positioned elements before 
        starting the loop. If a positioned elements was found in the middle of a loop (as would
        be the case with a positioned element parenting a non-positioned element), it was not 
        correctly handled.
        Also changed it so the clip is only performed in the fragmentation direction as that was 
        the original purpose of this method.

        Tests: fast/regions/absolute-in-relative-overflow.html
               fast/regions/static-in-relative-overflow.html
               fast/regions/sticky-border-overflow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):

2013-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160717.
        http://trac.webkit.org/changeset/160717
        https://bugs.webkit.org/show_bug.cgi?id=125863

        New tests are failing, and possibly broke an existing test
        (Requested by ap on #webkit).

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Invalid dir attributes should resolve to ltr
        https://bugs.webkit.org/show_bug.cgi?id=125830

        Reviewed by Darin Adler.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/2d592d1c998bec9438e421e1ce1ee6caba05a884

        The dir attribute should resolve to direction: ltr by default when the attribute value is
        "not in a defined state": http://www.w3.org/TR/2013/WD-html51-20130528/dom.html#the-directionality

        Test: fast/dom/HTMLElement/set-and-clear-dir-attribute.html

        * html/HTMLElement.cpp:
        (WebCore::isLTROrRTLIgnoringCase): Extracted from HTMLElement::directionality.
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLElement::directionality):

2013-12-17  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect repaint of fixed element with transformed parent
        https://bugs.webkit.org/show_bug.cgi?id=125756

        Reviewed by Darin Adler.

        When collecting the layers for fixed positioned elements with named flow
        as a containing block, use layers collection at named flow layer level
        instead of relying on the positioned elements collection.

        Modified also FlowThreadController::collectFixedPositionedLayers function
        to always return the layers sorted by z-index, as this operation was always
        done at the call sites.

        Tests: fast/regions/repaint/fixed-in-named-flow-cb-changed.html
               fast/regions/repaint/fixed-in-named-flow-cb-changed2.html

        * rendering/FlowThreadController.cpp:
        (WebCore::compareZIndex):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2013-12-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        REGRESSION(r159166?): fast/block/float/float-with-fractional-height-vertical-lr.html, fast/block/float/float-with-fractional-height.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=124506

        Reviewed by Dirk Schulze.

        Floor the endpoints of the floating object interval to keep the old
        behavior until a better fix can be created.

        No new tests, fixes regression in existing tests.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::intervalForFloatingObject):

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        [Win] Visual Studio workaround for compiling WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=125808

        Reviewed by Darin Adler.

        * platform/graphics/GraphicsContext3D.cpp:
        Don't inline outermost function to prevent Visual Studio crash.

2013-12-17  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for <dl>, <dt> and <dd>
        https://bugs.webkit.org/show_bug.cgi?id=125857

        Reviewed by Chris Fleizach.

        Map description lists to the newly introduced ATK roles
        ATK_ROLE_DESCRIPTION_LIST, ATK_ROLE_DESCRIPTION_TERM and
        ATK_ROLE_DESCRIPTION_VALUE, introduced in ATK 2.11.4.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Do the right mapping.
        (webkitAccessibleGetRole): Update call to atkRole, now that it
        receives an AccessibilityObject* as parameter.

2013-12-17  Frédéric Wang  <fred.wang@free.fr>

        Ensure inferred mrows for msqrt, mstyle, merror, mphantom and math.
        https://bugs.webkit.org/show_bug.cgi?id=124841

        Reviewed by Darin Adler.

        Tests: mathml/presentation/inferred-mrow-baseline.html
               mathml/presentation/inferred-mrow-stretchy.html

        * css/mathml.css: make merror, mphantom and mstyle behave like an mrow.
        (mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle):
        * mathml/MathMLInlineContainerElement.cpp: ditto
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/mathtags.in: ditto
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::paint): fix failure in mathml/presentation/phantom.html now that phantom can stretch operators.

2013-12-17  Simon Pena  <simon.pena@samsung.com>

        [NIX] Enable full debug builds by having ar creating thin archives
        https://bugs.webkit.org/show_bug.cgi?id=125850

        Reviewed by Csaba Osztrogonác.

        By default, CMake uses ar to generate libWebCore.a with cr parameters
        (do not warn if the library has to be created, and replace existing
        files in the archive). That results in a very large file, and ar fails
        with sizes over 4GB.

        By using thin archives (the T option of ar), the generated
        libWebCore.a is much smaller, and can be successfully archived. As a
        result, we can generate a full debug build. This patch is based on Xan
        López's webkit.org/b/110580.

        * PlatformNix.cmake: Instruct cmake to invoke ar with T option.

2013-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r160336.

        * bindings/gobject/webkitdom.symbols: Add new methods exposed for
        VideoPlaybackQuality.

2013-12-17  Mihai Maerean  <mmaerean@adobe.com>

        Fix hit testing for divs with a hierarchy of css transformed and non-transformed elements
        https://bugs.webkit.org/show_bug.cgi?id=124777

        Reviewed by Darin Adler.

        After bug #124647, the hit test will still behave incorrectly for transformed divs with non
        transformed siblings that are all inside a transformed element (tested by the
        hover-rotated-with-children-negative-z.html layout test).

        The fix is to not take zOffset into account during hit-testing when child layers are in the
        same 3D rendering context. Only when preserve3d is true, should hit-testing compute the
        zOffset of the layers with transformations and, when two layers overlap, to return the layer
        with the highest zOffset.

        The patch includes the work of a.renevier from https://codereview.chromium.org/79943002/

        Tests: transforms/3d/hit-testing/hover-rotated-with-children-negative-z.html
               transforms/3d/hit-testing/negative-zoffset-hit-test.html
               transforms/3d/hit-testing/overlapping-layers-hit-test.html

        * rendering/RenderLayer.cpp:
        (WebCore::computeZOffset):
        (WebCore::RenderLayer::hitTestLayer):

2013-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove a few more guards mistakenly added in r160367

        Reviewed by Martin Robinson.

        r160367 was too liberal in hiding APIs from the GObject DOM bindings.

        * Modules/battery/NavigatorBattery.idl: Expose NavigatorBattery.

2013-12-17  Benjamin Poulain  <benjamin@webkit.org>

        Add a simple register allocator to WebCore for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=125771

        Reviewed by Geoffrey Garen.

        Add a brain dead register allocator to simplify the use of registers
        when writting code generators.

        RegisterAllocator has two purposes:
        -make it easy to name registers properly.
        -make it hard to reuse a register accidentally.

        A helper class LocalRegister is also defined to provide an easy
        way to work with registers within a C++ scope. For example:
            LocalRegister elementPointer(allocator);
            assembler.load(address, elementPointer);

        RegisterAllocator makes no attempt at optimizing register allocations, but it reduces
        implicit dependencies by returning used register at the end of the queue, making it less
        likely they will be reused before their last instruction is executed.

        The current implementation only support unix x86_64, it only uses caller saved registers.

        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/RegisterAllocator.h: Added.
        (WebCore::RegisterAllocator::allocateRegister): Provides any available register.
        To restrict runtime exploitation of compiler bugs, the method crashes in release
        if the register pool is empty.

        (WebCore::RegisterAllocator::reserveRegister): Reserve a particular register.
        (WebCore::RegisterAllocator::returnRegister): Return a previously allocated or reserved register.

        (WebCore::RegisterAllocator::allocatedRegisters):
        (WebCore::LocalRegister::LocalRegister):
        (WebCore::LocalRegister::~LocalRegister):
        (WebCore::LocalRegister::operator JSC::MacroAssembler::RegisterID):
        (WebCore::RegisterAllocator::RegisterAllocator):

2013-12-16  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Checking RTCPeerConnection signalingState before setting local/remoteDescription
        https://bugs.webkit.org/show_bug.cgi?id=125655

        Reviewed by Eric Carlson.

        Before setting a session description RTCPeerConnection must check if it is in valid state for that SDP type.

        New tests: fast/mediastream/RTCPeerConnection-have-local-answer.html
               fast/mediastream/RTCPeerConnection-have-local-offer.html
               fast/mediastream/RTCPeerConnection-have-local-pranswer.html
               fast/mediastream/RTCPeerConnection-have-remote-offer.html
               fast/mediastream/RTCPeerConnection-have-remote-pranswer.html
               fast/mediastream/RTCPeerConnection-stable.html

        Modified: fast/mediastream/RTCPeerConnection-remoteDescription.html

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::checkStateForLocalDescription): Checks if the current state of RTCPeerConnection is
        valid for the local SDP that is being set.
        (WebCore::RTCPeerConnection::checkStateForRemoteDescription): Checks if the current state of RTCPeerConnection
        is valid for the remote SDP that is being set.
        (WebCore::RTCPeerConnection::setLocalDescription): Now calls checkStateForLocalDescription prior to set the
        local SDP.
        (WebCore::RTCPeerConnection::setRemoteDescription): Now Calls checkStateForRemoteDescription prior to set the
        remote SDP.
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mock/RTCNotifiersMock.cpp: Adding new class to notify RTCPeerConnection about a signaling state
        change: SignalingStateNotifier.
        (WebCore::SignalingStateNotifier::SignalingStateNotifier):
        (WebCore::SignalingStateNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::signalingStateFromSDP): Defines the new state that RTCPeerConnection
        should be, according the SDP that is being set.
        (WebCore::RTCPeerConnectionHandlerMock::setLocalDescription): Calls signalingStateFromSDP, in order to get the
        new signaling state and notify RTCPeerConnection object.
        (WebCore::RTCPeerConnectionHandlerMock::setRemoteDescription): Ditto.
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-12-16  Tim Horton  <timothy_horton@apple.com>

        Revert a mysterious and inexplicable part of http://trac.webkit.org/changeset/160685

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeEnum):
        (WebCore::KeyedEncoder::encodeObject):
        (WebCore::KeyedEncoder::encodeConditionalObject):
        (WebCore::KeyedEncoder::encodeObjects):

2013-12-16  Anders Carlsson  <andersca@apple.com>

        Remove EnumClass.h from WTF
        https://bugs.webkit.org/show_bug.cgi?id=125820

        Reviewed by Darin Adler.

        Replace uses of ENUM_CLASS with real enum class declarations.

        * Modules/webdatabase/DatabaseBasicTypes.h:
        * Modules/webdatabase/DatabaseError.h:
        * Modules/webdatabase/SQLTransactionState.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * crypto/CryptoAlgorithmIdentifier.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyData.h:
        * crypto/CryptoKeyType.h:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * inspector/InspectorTimelineAgent.h:

2013-12-16  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Pinching beyond the extremes doesn't animate back to the min/max
        https://bugs.webkit.org/show_bug.cgi?id=125750

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export a few things so WebKit2 can use them.

2013-12-16  Joseph Pecoraro  <pecoraro@apple.com>

        Fix some whitespace issues in inspector code
        https://bugs.webkit.org/show_bug.cgi?id=125814

        Reviewed by Darin Adler.

        * inspector/protocol/DOM.json:
        * inspector/protocol/DOMStorage.json:
        * inspector/protocol/Timeline.json:

2013-12-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Use JSC::SourceID and JSC::BreakpointID instead of WebCore dups
        https://bugs.webkit.org/show_bug.cgi?id=125818

        Reviewed by Mark Lam.

        Remove the WebCore typedefs of JSC types. Prefer JSC namespace
        prefixed types throughout WebCore's Inspector code.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BreakpointID.h: Removed.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/SourceID.h: Removed.
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/dom changes
        https://bugs.webkit.org/show_bug.cgi?id=125646

        Reviewed by David Kilzer.

        * WebCore.exp.in: Added symbol __ZN7WebCore8Settings17setLayoutIntervalEi and removed symbol
        __ZN7WebCore24cLayoutScheduleThresholdE.
        * dom/ActiveDOMObject.h: Add suspension reason DocumentWillBePaused.
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Opt-out of ENABLE(VIDEO) logic when
        building for iOS.
        * dom/DeviceMotionClient.h: Made class non-copyable.
        (WebCore::DeviceMotionClient::DeviceMotionClient): Added;
        * dom/DeviceMotionController.cpp: Added FIXME comment to reconcile iOS and OpenSource differences.
        (WebCore::DeviceMotionController::suspendUpdates): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceMotionController::resumeUpdates): Added; guarded by PLATFORM(IOS).
        * dom/DeviceMotionController.h: Added FIXME comment to reconcile iOS and OpenSource differences.
        * dom/DeviceOrientationClient.h: Made class non-copyable.
        (WebCore::DeviceOrientationClient::DeviceOrientationClient): Added.
        * dom/DeviceOrientationController.cpp: Added FIXME comment to reconcile iOS and OpenSource differences.
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::suspendUpdates): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationController::resumeUpdates): Added; guarded by PLATFORM(IOS).
        * dom/DeviceOrientationController.h: Added FIXME comment to reconcile iOS and OpenSource differences.
        * dom/DeviceOrientationData.cpp:
        (WebCore::DeviceOrientationData::create): Added; iOS-specific. Added FIXME comment.
        (WebCore::DeviceOrientationData::DeviceOrientationData): Added iOS-specific code.
        (WebCore::DeviceOrientationData::compassHeading): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::compassAccuracy): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::canProvideCompassHeading): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::canProvideCompassAccuracy): Added; guarded by PLATFORM(IOS).
        * dom/DeviceOrientationData.h:
        * dom/DeviceOrientationEvent.idl: Added iOS-specific code.
        * dom/Document.cpp: Moved constant cLayoutScheduleThreshold to Settings.cpp and renamed it
        layoutScheduleThreshold towards allowing a port to configure the layout interval.
        (WebCore::Document::Document): Added optional argument isSynthesized, defaults false.
        (WebCore::Document::~Document): Added iOS-specific code to destroy the device motion
        and device orientation controllers.
        (WebCore::Document::didBecomeCurrentDocumentInFrame): Added iOS-specific code with FIXME comment.
        (WebCore::Document::prepareForDestruction): Added iOS-specific touch event code.
        (WebCore::Document::removeAllEventListeners): Ditto.
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Added; compiles to an empty function on
        non-iOS port.
        (WebCore::Document::suspendActiveDOMObjects): Modified to call platformSuspendOrStopActiveDOMObjects().
        (WebCore::Document::resumeActiveDOMObjects): Ditto.
        (WebCore::Document::stopActiveDOMObjects): Added.
        (WebCore::Document::implicitClose): Modified to query Settings::layoutInterval().
        (WebCore::Document::minimumLayoutDelay): Ditto.
        (WebCore::Document::processViewport): Added iOS-specific code.
        (WebCore::Document::updateViewportArguments): Ditto.
        (WebCore::setParserFeature): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::processFormatDetection): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::processWebAppOrientations): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::isTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::setIsTelephoneNumberParsingAllowed): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::isTelephoneNumberParsingAllowed): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::initSecurityContext): Added iOS-specific code.
        (WebCore::Document::suspendScheduledTasks): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::deviceMotionController): Added; iOS-specific.
        (WebCore::Document::deviceOrientationController): Added; iOS-specific.
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale): Added iOS-specific code.
        (WebCore::Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale): Added iOS-specific code.
        * dom/Document.h: Register gesture events gesture{change, end, start}; guarded by ENABLE(IOS_GESTURE_EVENTS).
        (WebCore::Document::isSynthesized): Added.
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Added.
        * dom/Document.idl:
        * dom/DocumentMarker.h: Added iOS-specific changes. We should look to reconcile the differences between
        iOS and OpenSource. See <rdar://problem/11306422>.
        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        (WebCore::DocumentMarker::DocumentMarker): Added; iOS-specific.
        (WebCore::DocumentMarker::alternatives): Added; iOS-specific.
        (WebCore::DocumentMarker::setAlternative): Added; iOS-specific.
        (WebCore::DocumentMarker::metadata): Added; iOS-specific.
        (WebCore::DocumentMarker::setMetadata): Added; iOS-specific.
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addDictationPhraseWithAlternativesMarker):
        (WebCore::DocumentMarkerController::addDictationResultMarker):
        (WebCore::DocumentMarkerController::shiftMarkers):
        * dom/DocumentMarkerController.h:
        * dom/Element.cpp:
        (WebCore::Element::focus): Add iOS-specific workaround for <rdar://problem/6699741>.
        * dom/Element.h: Register gesture events gesture{change, end, start}; guarded by ENABLE(IOS_GESTURE_EVENTS).
        * dom/EventContext.cpp: Opt-out of ENABLE(TOUCH_EVENTS)-guarded code when building the iOS port.
        * dom/EventContext.h: Ditto.
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::EventRelatedNodeResolver): Ditto.
        (WebCore::EventDispatcher::dispatchEvent): Ditto.
        (WebCore::EventPath::EventPath): Ditto.
        * dom/EventNames.h: Added events webkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}
        and gesture{change, end, start}.
        * dom/EventNames.in: Added event names GestureEvent and WebKitPlaybackTargetAvailabilityEvent conditioned on
        the macro defines ENABLE_IOS_GESTURE_EVENTS and ENABLE_IOS_AIRPLAY.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsScrollOffset): Added iOS-specific code.
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::willBeDeletedFrom): Ditto.
        (WebCore::Node::isDescendantOf): Fixed style issue in function prototype; moved '*' to the left side.
        (WebCore::Node::isDescendantOrShadowDescendantOf): Added.
        (WebCore::tryAddEventListener): Added iOS-specific code; also added FIXME comment.
        (WebCore::tryRemoveEventListener): Ditto.
        (WebCore::Node::dispatchEvent): Opt-out of ENABLE(TOUCH_EVENTS)-guarded code when building the iOS port.
        (WebCore::Node::defaultEventHandler): Added iOS-specific code.
        (WebCore::Node::willRespondToMouseMoveEvents): Added iOS-specific code; also added FIXME comment.
        (WebCore::Node::willRespondToMouseClickEvents): Added iOS-specific code; also added FIXME comment.
        (WebCore::Node::willRespondToMouseWheelEvents): Added.
        * dom/Node.h:
        * dom/Position.h:
        (WebCore::operator<): Added.
        (WebCore::operator>): Added.
        (WebCore::operator>=): Added.
        (WebCore::operator<=): Added.
        * dom/Range.cpp:
        (WebCore::Range::create): Added iOS-specific code; also added FIXME comment.
        (WebCore::intervalsSufficientlyOverlap): Added; guarded by PLATFORM(IOS).
        (WebCore::printRects): Added; guarded by PLATFORM(IOS).
        (WebCore::adjustLineHeightOfSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::coalesceSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::Range::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        * dom/Range.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects): Added iOS-specific code.
        (WebCore::ScriptExecutionContext::dispatchErrorEvent): Ditto.
        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint): Ditto.
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes): Ditto.
        (WebCore::setViewportFeature): Added iOS-specific code.
        (WebCore::finalizeViewportArguments): Added; iOS-specific.
        * dom/ViewportArguments.h:
        * dom/make_names.pl: Added support to find the path to gcc with respect to the environment
        variable SDKROOT.
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::suspend):
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize setting m_layoutInterval to layoutScheduleThreshold.
        (WebCore::Settings::setLayoutInterval): Added.
        * page/Settings.h:
        (WebCore::Settings::layoutInterval): Added.

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the Windows build after r160672.
        
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Apply overhang shadow and linen to UI-side layers
        https://bugs.webkit.org/show_bug.cgi?id=125807

        Reviewed by Tim Horton.
        
        With UI-side compositing, we need to apply the overhang shadow and linen
        background to layers in the UI process. Achieve this by setting a "custom
        appearance" flag on layers that need a shadow or linen background, and
        migrating this flag to the UI process. Static functions on ScrollbarThemeMac
        are exposed to do the actual setting.

        * WebCore.exp.in: Export ScrollbarThemeMac and GraphicsLayerCA functions.
        * WebCore.xcodeproj/project.pbxproj: ScrollbarThemeMac.h and ScrollbarThemeComposite.h
        need to be Private.
        * platform/graphics/GraphicsLayer.cpp: Initialize m_customAppearance.
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h: Getter/setter for CustomAppearance.
        (WebCore::GraphicsLayer::setCustomAppearance):
        (WebCore::GraphicsLayer::customAppearance):
        * platform/graphics/ca/GraphicsLayerCA.cpp: Update CustomAppearanceChanged as
        we do other properties.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateCustomAppearance):
        (WebCore::GraphicsLayerCA::setCustomAppearance):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: When we have a custom
        appearance, use ScrollbarThemeMac functions to update the layer. Ensure
        that if the bounds change, we update the shadow (whose path depends on the bounds).
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::clone):
        (PlatformCALayerMac::setBounds):
        (PlatformCALayerMac::requiresCustomAppearanceUpdateOnBoundsChange):
        (PlatformCALayerMac::updateCustomAppearance):
        * platform/mac/ScrollbarThemeMac.h: Export some static functions.
        * platform/mac/ScrollbarThemeMac.mm: Change code to use static functions.
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaBackground):
        (WebCore::ScrollbarThemeMac::removeOverhangAreaBackground):
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaShadow):
        (WebCore::ScrollbarThemeMac::removeOverhangAreaShadow):
        (WebCore::ScrollbarThemeMac::setUpOverhangAreasLayerContents):
        (WebCore::ScrollbarThemeMac::setUpContentShadowLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition): No need to call
        setUpContentShadowLayer() now when size changes; PlatformCALayer takes
        care of that.
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): Now set
        custom appearance via GraphicsLayer.

2013-12-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove dead code after converstion to VS2013
        https://bugs.webkit.org/show_bug.cgi?id=125795

        Reviewed by Darin Adler.

        * WebCorePrefix.h: Remove VS2012 include kludge.
        * loader/FTPDirectoryParser.cpp: Remove gmtime workaround code.
        * page/DOMWindow.cpp: Remove older pointer-based open implementation.
        * page/DOMWindow.h: Ditto
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::TextEncodingNameHash::equal): Remove optimization bug workaround
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend): Remove compiler workaround

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/history changes
        https://bugs.webkit.org/show_bug.cgi?id=125769

        Reviewed by Darin Adler.

        * history/BackForwardClient.h:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::current): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::BackForwardList::setCurrent): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::BackForwardList::clearAllPageCaches): Added; guarded by PLATFORM(IOS).
        * history/BackForwardList.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Added iOS-specific code.
        (WebCore::CachedFrame::CachedFrame): Ditto.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Ditto.
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Ditto.
        * history/HistoryItem.h:
        (WebCore::HistoryItem::scale): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::scaleIsInitial): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setScale): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::viewportArguments): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setViewportArguments): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::bookmarkID): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setBookmarkID): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::sharedLinkUniqueIdentifier): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setSharedLinkUniqueIdentifier): Added; guarded by PLATFORM(IOS).
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision): Added iOS-specific code.
        (WebCore::logCanCachePageDecision): Ditto.
        (WebCore::PageCache::canCachePageContainingThisFrame): Ditto.
        (WebCore::PageCache::canCache): Ditto.
        (WebCore::PageCache::pruneToCapacityNow): Added.
        * history/PageCache.h:

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/svg changes
        https://bugs.webkit.org/show_bug.cgi?id=125784

        Reviewed by Darin Adler.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::willRespondToMouseClickEvents): Added.
        * svg/SVGAElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseAttribute): Added attribute listeners for touch{cancel, end, move, start},
        and gesture{change, end, start}.

2013-12-13  Jeffrey Pfau  <jpfau@apple.com>

        [Mac] Cache partitioning asserts when associated NSURLRequest is nil
        https://bugs.webkit.org/show_bug.cgi?id=125716

        Reviewed by Darin Adler.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2013-12-16  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Fix a few bugs with opening an IDB connection
        https://bugs.webkit.org/show_bug.cgi?id=125798

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::processPendingCalls): As the comment says, we should only
          early return when there *are* pending delete calls. The logic here was backwards,
          preventing the backend from ever getting to processPendingOpenCalls().

2013-12-16  Alex Christensen  <achristensen@webkit.org>

        Fixed Win64 build on VS2013.
        https://bugs.webkit.org/show_bug.cgi?id=125753

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        Added correct PlatformToolset for 64-bit builds.

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Package up some data about scrollability into a struct for use in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=125792

        Reviewed by Beth Dakin.

        Both scrolling state nodes and scrolling nodes share a set of parameters
        relating to scrollability and rubberbanding, so package them into a struct
        for re-use. Send the struct wholesale to the scrolling thread.

        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollableAreaParameters::ScrollableAreaParameters): New struct.
        (WebCore::ScrollableAreaParameters::operator==):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode): Reordering.
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin): Moved.
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters): Set the parameters all at once.
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        * page/scrolling/ScrollingStateScrollingNode.h: Getters access the struct. Reorder member variables.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollOrigin):
        (WebCore::ScrollingTreeScrollingNode::horizontalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::verticalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledHorizontalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledVerticalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::canHaveScrollbars):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Removed setScrollParametersForNode().
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated): Set the params in this
        function. Reordering.

2013-12-16  Sam Weinig  <sam@webkit.org>

        CTTE: Convert more of SVG to use references
        https://bugs.webkit.org/show_bug.cgi?id=125762

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::removeClientFromCache):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        (WebCore::RenderSVGResourceContainer::markAllClientLayersForInvalidation):
        (WebCore::RenderSVGResourceContainer::markClientForInvalidation):
        (WebCore::RenderSVGResourceContainer::removeClient):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::removeClientFromCache):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::removeClientFromCache):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::removeClientFromCache):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::removeClientFromCache):
        * rendering/svg/SVGResources.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientStyleChanged):
        (WebCore::SVGResourcesCache::clientWasAddedToTree):
        (WebCore::SVGResourcesCache::clientWillBeRemovedFromTree):
        (WebCore::SVGResourcesCache::clientDestroyed):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::invalidateFilterPrimitiveParent):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidate):
        (WebCore::SVGFilterPrimitiveStandardAttributes::primitiveAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        (WebCore::SVGPathElement::pathSegListChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::setupInitialView):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::svgAttributeChanged):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::svgAttributeChanged):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2013-12-16  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Add support for the computing the included intervals for a BoxShape
        https://bugs.webkit.org/show_bug.cgi?id=124605

        Reviewed by Andreas Kling.

        Setting shape-inside to content-box now works.

        Changed FloatRoundedRect::xInterceptsAtY() to include the bottom edge of
        the rectangle and to check for the special cases where any or all of the
        corner radii are empty.

        Test: fast/shapes/shape-inside/shape-inside-content-box.html

        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::xInterceptsAtY):
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getIncludedIntervals): Replaced the stub implementation with logic that's similar to getExcludedIntervals().
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Removed a meaningless assert.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor):

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for more WAI-ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=125596

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with the proper AtkRoles, some of
        them to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-16  Eric Carlson  <eric.carlson@apple.com>

        Fix QuickTime plug-in replacement scripting bugs
        https://bugs.webkit.org/show_bug.cgi?id=125717

        Reviewed by Sam Weinig.

        No new tests, existing test updated.

        * Modules/plugins/QuickTimePluginReplacement.js:
        (Replacement): Change '' to "" to avoid "Empty character constant" warning when creating
            Derived Sources.
        (Replacement.prototype.createVideoElement): Handle qtsrc attribute. Remember base url.
        (Replacement.prototype.setURL): Resolve urls relative to base.

2013-12-15  Darin Adler  <darin@apple.com>

        Catch callers who forget to use initializeStyle
        https://bugs.webkit.org/show_bug.cgi?id=125763

        Reviewed by Andreas Kling.

        A recent fix was because a caller used setStyle first rather than using
        initializeStyle. This patch adds an assertion to catch cases where we do
        that so we see the mistake right away instead of indirectly later.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle): Simplified an assertion.
        (WebCore::RenderElement::setStyle): Added an assertion that m_hasInitializedStyle
        is true, with an exception for RenderView, which needs to be created before we
        have the correct style computed for it (at least for now). Also broke out an
        assertion that was using &&, since we would prefer to know which clause failed,
        making separate assertions more useful than a combined assertion.

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_CHECK_MENU_ITEM
        https://bugs.webkit.org/show_bug.cgi?id=125594

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with checkmenuitem role with the
        proper AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_ARTICLE
        https://bugs.webkit.org/show_bug.cgi?id=125587

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with article role with the proper
        AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-11-27  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix the preferred logical widths code to work with spanning grid items
        https://bugs.webkit.org/show_bug.cgi?id=123994

        Reviewed by Andreas Kling.

        From Blink r159189 by <jchaffraix@chromium.org>

        There was no definition in the specs for the intrinsic / preferred
        logical widths on the grid element. The following was proposed to
        the WG and later accepted:
        - The sum of the grid tracks' UsedBreadth is the minimum logical width
        - The sum of the grid tracks' MaxBreadth is the maximum logical width

        http://lists.w3.org/Archives/Public/www-style/2013Oct/0054.html
        for more information.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        * rendering/RenderGrid.h:

2013-12-15  Frédéric Wang  <fred.wang@free.fr>

        Add support for maction@toggle
        https://bugs.webkit.org/show_bug.cgi?id=120059

        Reviewed by Chris Fleizach.

        Test: mathml/presentation/maction-toggle.html

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedChildAndIndex):
        (WebCore::MathMLSelectElement::updateSelectedChild):
        (WebCore::MathMLSelectElement::defaultEventHandler):
        (WebCore::MathMLSelectElement::willRespondToMouseClickEvents):
        (WebCore::MathMLSelectElement::toggle):
        * mathml/MathMLSelectElement.h:

2013-12-15  Darin Adler  <darin@apple.com>

        More nullptr in RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=125764

        Reviewed by Andreas Kling.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::uncachedFirstLineStyle):
        (WebCore::RenderElement::updateShapeImage):
        (WebCore::RenderElement::destroyLeftoverChildren):
        (WebCore::RenderElement::findNextLayer):
        Use nullptr in a few more places.

2013-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: 2x regression on Dromaeo DOM query tests
        https://bugs.webkit.org/show_bug.cgi?id=125377

        Reviewed by Filip Pizlo.

        The bug was caused by JSC not JIT'ing property accesses on document because of its having
        custom named getter (named properties).  This resulted in resolution of methods on document
        such as getElementById to happen inside the interpreter.

        Fixed the bug by using the new JSC type info flag which tells JSC to JIT property access on
        document, and then notifying JSC whenever a new named property appeared on document.

        Tests: js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
               js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
               js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::addImpureProperty): Wraps VM::addImpureProperty.
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Added the support for NewImpurePropertyFiresWatchpoints.
        * bindings/scripts/IDLAttributes.txt: Ditto.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::addDocumentNamedItem): Calls addImpureProperty.
        * html/HTMLDocument.idl: Added NewImpurePropertyFiresWatchpoints.

2013-12-15  Brent Fulgham  <bfulgham@webkit.org>

        [WIn] Unreviewed build fix after r160599

        * rendering/RenderMediaControls.cpp:
        (WebCore::determineState): RenderObject::theme now returns
        a reference.

2013-12-15  Brent Fulgham  <bfulgham@webkit.org>

        [Win] Unreviewed build fix

        The build system continues to attempt to build QTMovieWin, even
        though it is excluded from the build solution. I'm actually
        removing the project files to prevent this.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Removed.
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj.filters: Removed.

2013-12-15  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] shape-outside animation does not handle 'auto' well
        https://bugs.webkit.org/show_bug.cgi?id=125700

        Reviewed by Dirk Schulze.

        Handle the case where we are blending/animating with a null ShapeValue due to 'auto'.

        Adapted LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation.html for testing this.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2013-12-15  Andy Estes  <aestes@apple.com>

        [iOS] Upstream changes to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=125742

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2013-12-14  Darin Adler  <darin@apple.com>

        Crash in CSSImageGeneratorValue and RenderScrollbar
        https://bugs.webkit.org/show_bug.cgi?id=125702

        Reviewed by Alexey Proskuryakov.

        This crash had two causes at two different levels. The crash fixes both.

        At the RenderScrollbar level, we were setting up a new renderer, a
        RenderScrollbarPart, and never calling initializeStyle. This meant that
        we did not do proper style setup, which meant we did not end up calling
        CSSImageGeneratorValue::addClient and so had a removeClient that was not
        properly balanced by an addClient. This is the primary bug.

        At the CSSImageGeneratorValue level, the addClient and removeClient
        functions were not properly handling possibly-mismatched calls. It was
        easy to fix the functions to work even if the calls are not perfectly
        matched up, which makes the consequences of a missed addClient call
        much less dire, no longer messing up reference counting. Fixing this
        mitigates the risk if we made this same mistake elsewhere, although I
        could not find any other places with some quick searches.

        Test: fast/css/scrollbar-image-crash.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient): Only call ref if this will
        add the first client.
        (WebCore::CSSImageGeneratorValue::removeClient): Only call deref if this
        removes the last client. Also added an assertion that can fire if we call
        removeClient without first calling addClient, which is illegal. However,
        the function handles that case without over-deref'ing itself.

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart): Simplify the logic for
        needRenderer a bit. Use initializeStyle rather than setStyle when first
        creating the RenderScrollbarPart. Also use add and take properly so we
        don't do extra hash lookups the old code did with get/set and get/remove.

2013-12-14  Sam Weinig  <sam@webkit.org>

        CTTE: SVGResourcesCache::cachedResourcesForRenderObject() should take a reference
        https://bugs.webkit.org/show_bug.cgi?id=125743

        Reviewed by Dan Bernstein.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::shouldGenerateMarkerPositions):
        (WebCore::RenderSVGShape::markerRect):
        (WebCore::RenderSVGShape::drawMarkers):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        (WebCore::SVGRenderSupport::layoutChildren):
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources):
        (WebCore::SVGRenderSupport::filtersForceContainerLayout):
        (WebCore::SVGRenderSupport::pointInClippingArea):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject):
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientDestroyed):
        * rendering/svg/SVGResourcesCache.h:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles):

2013-12-14  Dan Bernstein  <mitz@apple.com>

        Clean up the project after r160487

        * WebCore.xcodeproj/project.pbxproj: Moved reference to Security.framework from the top
        level of the project to the Frameworks group, and made it SDK-relative.

2013-12-14  Andreas Kling  <akling@apple.com>

        Page::theme() should return a reference.
        <https://webkit.org/b/125737>

        There's always a RenderTheme, and not a single call site was checking
        for null pointers anyway. Updated RenderObject::theme() as well.

        Reviewed by Antti Koivisto.

2013-12-13  Sam Weinig  <sam@webkit.org>

        CTTE: Convert Element and RenderObject iterator usage to use range-based for loops
        https://bugs.webkit.org/show_bug.cgi?id=125731

        Reviewed by Andreas Kling.

        Perform straight forward conversions. A few stragglers that do odd things remain.

2013-12-14  Joseph Pecoraro  <pecoraro@apple.com>

        Small string improvements to JSInjectedScriptHost::type and other bindings
        https://bugs.webkit.org/show_bug.cgi?id=125722

        Reviewed by Timothy Hatcher.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::type):
        Use SmallStrings, jsNontrivialString and ASCIILiteral.

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::type):
        Use jsNontrivialString.

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::stringValue):
        Use jsNontrivialString and ASCIILiteral.

2013-12-14  Andreas Kling  <akling@apple.com>

        Move a couple of inlines from RenderObject to RenderElement.
        <https://webkit.org/b/125734>

        Take most of the inline functions on RenderObject that call style()
        and move them over to RenderElement where style() is branchless.

        Reviewed by Antti Koivisto.

2013-12-14  Andreas Kling  <akling@apple.com>

        RenderElement::rendererForRootBackground() should return a reference.
        <https://webkit.org/b/125735>

        This function always finds a renderer to return.

        Reviewed by Antti Koivisto.

2013-12-14  Mark Rowe  <mrowe@apple.com>

        Build fix after r160557.

        * Configurations/WebCore.xcconfig: Find JavaScriptCore.framework below SDKROOT so that we'll pick
        up the built version in production builds rather than the system version.

2013-12-14  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Use GMutexLocker instead of g_mutex_lock
        https://bugs.webkit.org/show_bug.cgi?id=125588

        Reviewed by Philippe Normand.

        No new tests because this is just code simplification.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkTimeoutCallback):
        (webkitVideoSinkRender):
        (unlockBufferMutex):
        (webkitVideoSinkUnlockStop):
        (webkitVideoSinkStart):

2013-12-13  Andreas Kling  <akling@apple.com>

        Move RenderObject::repaintAfterLayoutIfNeeded() to RenderElement.
        <https://webkit.org/b/125712>

        This function is only ever called on RenderElements, so move it there.
        Removes some RenderObject::style() branchiness.

        Reviewed by Darin Adler.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move Inspector and Debugger protocol domains into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125707

        Reviewed by Timothy Hatcher.

          - Switch TypeBuilder::Page::SearchMatch to TypeBuilder::GenericTypes::SearchMatch
            which comes from InspectorJSTypeBuilders.
          - Remove domains that moved to JavaScriptCore.

        No new tests, this only moves code around. There are no functional changes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        Add new files.

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::searchInResource):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:
        Update includes and type builder type names.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::breakpointActionTypeForString):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        Use the new getEnum function names.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove pre-VS2013 support code.
        https://bugs.webkit.org/show_bug.cgi?id=125693

        Reviewed by Darin Adler.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setQuota): Use C99 format arguments
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine): Ditto
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnretainedIcons): Ditto 
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setMaximumSize): Ditto

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        SVG bindings are improperly being generated with "fastGetAttribute"
        https://bugs.webkit.org/show_bug.cgi?id=125670

        Reviewed by Darin Adler.

        A bug was introduced in r152845 that improperly called the
        IsSVGAnimatedType using the $attribute hash, rather than the
        expected $attribute->signature->type.

        * bindings/scripts/CodeGenerator.pm:
        (GetterExpression): Clean up attribute type confusion.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        * WebCore.vcxproj/WebCore.vcxproj: Exclude MediaPlayerPrivateQuickTimeVisualContext from
        Windows build.
        * platform/graphics/MediaPlayer.cpp: Don't use QuickTime as the PlatformMediaEngine.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        [GTK] Remove Warnings in building about duplicate INSPECTOR variables
        https://bugs.webkit.org/show_bug.cgi?id=125710

        Reviewed by Tim Horton.

        * GNUmakefile.am:

2013-12-13  Roger Fong  <roger_fong@apple.com>

        [WebGL] Check for global variable precision mismatch between vertex and fragment shaders.
        https://bugs.webkit.org/show_bug.cgi?id=125546.
        <rdar://problem/15203364>

        Reviewed by Brent Fulgham.

        Covered Khronos conformances tests:
        webgl/1.0.2/glsl/misc/shader-with-global-variable-precision-mismatch.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::linkProgram):
        * platform/graphics/GraphicsContext3D.h: Rename areProgramSymbolsValid since it currently only serves one purpose.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::precisionsMatch):

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        * WebCore.vcxproj/WebCoreGenerated.vcxproj: Specify that we are
        using the vs120_xp build target for Makefile-based projects.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Inspector Code Generation to JavaScriptCore for Runtime Domain
        https://bugs.webkit.org/show_bug.cgi?id=125595

        Reviewed by Timothy Hatcher.

          - CodeGeneration changed to output Frontend and Backend dispatchers
            in namespace Inspector. So update all the agent's appropriately.
          - Update Derived Sources code generation to use the Scripts that had
            moved to JavaScriptCore. Some ports just use JSC/inspector/scripts
            directly, but others have to use the Scripts exported by JSC
            in JavaScriptCore's PrivateHeaders.
          - Add ForwardingHeaders for the files generated in JavaScriptCore.
          - Update the names of Inspector DerivedSources files, since they
            were renamed to InspectorWeb*.

        No new tests, this only moves code around. There are no functional changes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/InspectorJSBackendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorJSFrontendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorJSTypeBuilders.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/build-generated-files.sh:
        * WebCore.xcodeproj/project.pbxproj:
        Remove files, rename files, update code generation.

        * make-generated-sources.sh:
        Update this standalone developer script to fill in the new InspectorScripts variable.

        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/ScriptCallFrame.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.h:
        Updates header names and class namespace changes.

2013-12-13  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding RTCPeerConnectionErrorCallback
        https://bugs.webkit.org/show_bug.cgi?id=125574

        Reviewed by Eric Carlson.

        According to the spec there should be a RTCPeerConnectionErrorCallback function type for createOffer/Answer,
        setLocal/RemoteDescription and updateIce function calls. This callback must handle a DOMError object.

        Existing tests were updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::addIceCandidate):
        * Modules/mediastream/RTCErrorCallback.h: Removed.
        * Modules/mediastream/RTCErrorCallback.idl: Removed.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnectionErrorCallback.h: Added.
        * Modules/mediastream/RTCPeerConnectionErrorCallback.idl: Added.
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.cpp:
        (WebCore::RTCSessionDescriptionRequestImpl::create):
        (WebCore::RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl):
        (WebCore::RTCSessionDescriptionRequestImpl::requestFailed):
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
        * Modules/mediastream/RTCVoidRequestImpl.cpp:
        (WebCore::RTCVoidRequestImpl::create):
        (WebCore::RTCVoidRequestImpl::RTCVoidRequestImpl):
        (WebCore::RTCVoidRequestImpl::requestFailed):
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (WebCore::RTCPeerConnectionHandler::incompatibleConstraintsErrorName):
        (WebCore::RTCPeerConnectionHandler::invalidSessionDescriptionErrorName):
        (WebCore::RTCPeerConnectionHandler::incompatibleSessionDescriptionErrorName):
        (WebCore::RTCPeerConnectionHandler::internalErrorName):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::SessionRequestNotifier::SessionRequestNotifier):
        (WebCore::SessionRequestNotifier::fire):
        (WebCore::VoidRequestNotifier::VoidRequestNotifier):
        (WebCore::VoidRequestNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):
        (WebCore::RTCPeerConnectionHandlerMock::createAnswer):

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch WebKit solution to Visual Studio 2013
        https://bugs.webkit.org/show_bug.cgi?id=125192

        Reviewed by Anders Carlsson.

        * WebCore.vcxproj/WebCore.vcxproj: Update for VS2013
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Ditto

2013-12-13  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto Key.usages should be ordered alphabetically
        https://bugs.webkit.org/show_bug.cgi?id=125696

        Reviewed by Darin Adler.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::usages): Do it.

2013-12-13  Darin Adler  <darin@apple.com>

        Make some optimizations for DOM bindings involving vectors
        https://bugs.webkit.org/show_bug.cgi?id=125680

        Reviewed by Andreas Kling.

        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS): Removed unnecessary copying of vectors when converting them
        to JavaScript values.
        (WebCore::toRefPtrNativeArray): Use reserveInitialCapacity and uncheckedAppend.
        (WebCore::toNativeArray): Ditto.
        (WebCore::toNativeArguments): Ditto.

2013-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r155784): [GTK] Some methods incorrectly removed in r155784 and deprecated in r158662
        https://bugs.webkit.org/show_bug.cgi?id=125692

        Reviewed by Martin Robinson.

        In r155784 the build was fixed by skipping Console::profile() and
        Console::profileEnd(), but the patch also skipped other methods
        containing the profile method name. Those were incorrectly
        deprecated in r158662 thinking that the property had been removed
        in the idl.

        * bindings/gobject/WebKitDOMDeprecated.cpp: Undeprecate
        webkit_dom_html_head_element_get_profile and
        webkit_dom_html_head_element_set_profile.
        * bindings/gobject/WebKitDOMDeprecated.h: Ditto.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Ditto.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip webkit_dom_console_profile and
        webkit_dom_console_profile_end.

2013-12-13  Rob Buis  <rob.buis@samsung.com>

        Clean up SVGScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=125527

        Reviewed by Darin Adler.

        From the Blink port of this bug it becomes clear that svg/dom/SVGScriptElement/script-set-href.svg and
        svg/dom/svg-element-attribute-js-null.xhtml still hit an assert in Debug because SVGNames::typeAttr can't
        be used with fastGetAttribute in all cases, because it can be animatable. However for SVGScriptElement
        it is not animatable, so make isAnimatableAttribute virtual (note Debug only method) and allow typeAttr
        in the SVGScriptElement case to be useable for fastGetAttribute.

        Test: svg/dom/SVGScriptElement/script-type-attribute.svg

        * svg/SVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::isAnimatableAttribute):
        * svg/SVGScriptElement.h:

2013-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose also webkit_dom_document_get_url
        https://bugs.webkit.org/show_bug.cgi?id=125691

        Reviewed by Martin Robinson.

        For some reason we expose the URL property, so it can be accessed
        with g_object_get(), but we have a special case to not provide a
        public getter.

        * bindings/gobject/webkitdom.symbols: Add new symbol.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunctions): Remove the special case of URL property.

2013-12-13  Andreas Kling  <akling@apple.com>

        CSSFilterImageValue constructor should require both image and filter.
        <https://webkit.org/b/125056>

        Make the CSSFilterImageValue::create() helper take both the image and
        filter CSSValues by PassRef since they should never be null.

        Tweaked ComputedStyleExtractor::valueForFilter() to return a PassRef
        for this to work.

        Reviewed by Anders Carlsson.

2013-12-12  Andreas Kling  <akling@apple.com>

        StyleResolver::adjustRenderStyle() should take RenderStyle references.
        <https://webkit.org/b/125623>

        This function doesn't handle null styles being passed, so prevent
        it at compile time.

        Reviewed by Anders Carlsson.

2013-12-13  Darin Adler  <darin@apple.com>

        Eliminate awkward virtualComputedStyle construction
        https://bugs.webkit.org/show_bug.cgi?id=125681

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle): Tweak coding style a bit.

        * dom/Element.h: Marked computedStyle virtual and got rid of virtualComputedStyle.
        This fixes a bug that we would not call SVGElement::computedStyle if we called
        it through an Element pointer or reference. Not sure how to get test coverage for this.

        * dom/Node.cpp:
        (WebCore::Node::computedStyle): Use a loop instead of recursive virtual calls.

        * dom/Node.h: Made computedStyle virtual and got rid of virtualComputedStyle.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::computedStyle): Tweak coding style a bit.

        * svg/SVGElement.h: Made computedStyle virtual (and FINAL) and got rid fo
        virtualComputedStyle.

2013-12-13  Darin Adler  <darin@apple.com>

        Fix a couple stray uses of RefPtr that should release
        https://bugs.webkit.org/show_bug.cgi?id=125679

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFilter): Add calls to release, in
        one case rearranging the order of operations slightly so we
        don't release the pointer before using it.

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto wrapKey operation doesn't check key usage
        https://bugs.webkit.org/show_bug.cgi?id=125675

        Reviewed by Darin Adler.

        Tests: crypto/subtle/unwrapKey-check-usage.html
               crypto/subtle/wrapKey-check-usage.html

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::wrapKey):
        Added accidentally omitted code. Other operations are fine.

2013-12-12  Darin Adler  <darin@apple.com>

        Make some improvements in CSSImageGeneratorValue code
        https://bugs.webkit.org/show_bug.cgi?id=125676

        Reviewed by Simon Fraser.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageKnownToBeOpaque): Take a reference to the CSSValue, since
        it's known not to be null. Used checked cast.
        (WebCore::CSSCrossfadeValue::knownToBeOpaque): Updated to pass a reference.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize): Use
        make_unique instead of adoptPtr.
        (WebCore::CSSImageGeneratorValue::subimageIsPending): Use checked cast.
        (WebCore::CSSImageGeneratorValue::cachedImageForCSSValue): Ditto, also
        use nullptr.

        * css/CSSImageGeneratorValue.h: Removed unneeded includes, added some forward
        declarations, used unique_ptr instead of OwnPtr, and used CSS_VALUE_TYPE_CASTS
        macro to create cast functions.

        * css/CSSValue.cpp: Removed unneeded include of CSSImageGeneratorValue.h.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear): Use nullptr instead of 0.
        (WebCore::StyleResolver::applyProperty): Use checked cast and pass references
        instead of pointers to StyleGeneratedImage::create.
        (WebCore::StyleResolver::styleImage): Use checked cast and pass references
        instead of pointers to generatedOrPendingFromValue.
        (WebCore::StyleResolver::generatedOrPendingFromValue): Take the value as a
        reference instead of a pointer.
        (WebCore::StyleResolver::loadPendingImage): Pass a refernece instead of a
        pointer to StyleGeneratedImage::create.
        (WebCore::StyleResolver::loadPendingImages): Use auto for iteration instead of
        a lot type name.

        * css/StyleResolver.h: Changed generatedOrPendingFromValue to take the value
        as a reference instead of a pointer.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter): Pass a reference insted of a pointer to
        StyleGeneratedImage::create.
        (WebCore::crossfadeBlend): Ditto.
        (WebCore::blendFunc): Ditto. Also use references for local variables.

        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::StyleGeneratedImage): Use PassRef instead of
        PassRefPtr for the argument type.
        (WebCore::StyleGeneratedImage::cssValue): Updated since m_imageGeneratorValue
        is now a Ref instead of a RefPtr. Sadly this requires a const_cast that we can
        come back and get rid of later.
        (WebCore::StyleGeneratedImage::imageSize): Ditto.
        (WebCore::StyleGeneratedImage::image): Ditto.

        * rendering/style/StyleGeneratedImage.h: Changed create function and constructor
        to take a PassRef. Made imageValue non-const since it returns a non-const value,
        to be consistent with "conceptual const". Changed m_imageGeneratorValue to be a
        Ref instead of a RefPtr.

        * rendering/style/StyleImage.h: Made WrappedImagePtr be const void*, since it's
        a pointer used only for equality checks. Not a great idiom, but fine to use a
        const pointer instead of non-const, and avoids the const_cast we'd otherwise
        need in StyleGeneratedImage::data.

2013-12-12  KyungTae Kim  <ktf.kim@samsung.com>

        Improve the find word boundary performance
        https://bugs.webkit.org/show_bug.cgi?id=125619

        In endWordBoundary case, the textBreakPrevious call in findWordBoundary is unnecessary.
        So use separate function for endWordBoundary can improve the performance.

        Reviewed by Darin Adler.

        No tests because no operation changes.

        * editing/VisibleUnits.cpp: Use findEndWordBoundary in endWordBoundary
        (WebCore::endWordBoundary):
        * platform/text/TextBoundaries.cpp: Add findEndWordBoundary function
        (WebCore::findEndWordBoundary):
        * platform/text/TextBoundaries.h:
        * platform/text/mac/TextBoundaries.mm: Add findEndWordBoundary function
        (WebCore::findEndWordBoundary):

2013-12-12  Benjamin Poulain  <bpoulain@apple.com>

        Fix a silly mistake of r160467
        https://bugs.webkit.org/show_bug.cgi?id=125657

        Reviewed by Alexey Proskuryakov.

        Fix a typo. The validity check was missing the logical not.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):

2013-12-12  Tim Horton  <timothy_horton@apple.com>

        [wk2] Handle pinch-to-zoom gesture
        https://bugs.webkit.org/show_bug.cgi?id=125604

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export some TransformationMatrix functions.

        * WebCore.xcodeproj/project.pbxproj:
        Make some headers private so that RenderLayerCompositor/Backing can be used from WebKit2.

        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::layerForContentShadow):
        Add a getter for the content shadow layer.

2013-12-12  Brady Eidson  <beidson@apple.com>

        DatabaseProcess IndexedDB: Establish a metadata backing store on disk
        https://bugs.webkit.org/show_bug.cgi?id=125258

        Reviewed by Alexey Proskuryakov, Anders Carlsson, and Tim Horton.

        Teach CrossThreadCopier how to handle IDBDatabaseMetadata.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseMetadata.cpp: Added.
        (WebCore::IDBDatabaseMetadata::isolatedCopy):
        (WebCore::IDBObjectStoreMetadata::isolatedCopy):
        (WebCore::IDBIndexMetadata::isolatedCopy):
        * Modules/indexeddb/IDBDatabaseMetadata.h:

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::isolatedCopy):
        * Modules/indexeddb/IDBKeyPath.h:

        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy): Add an IDBDatabaseMetadata specialization.
        * platform/CrossThreadCopier.h:

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Add support for RSAES-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=125647

        Build fix.

        * crypto/CommonCryptoUtilities.h: Declare a newly used private constant.

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Add support for RSAES-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=125647

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/rsaes-pkcs1-v1_5-decrypt.html
               crypto/subtle/rsaes-pkcs1-v1_5-wrap-unwrap-aes.html

        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        Removed meaningless parameters arguments from private functions. The base arguments
        class is always empty.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp: Added.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::CryptoAlgorithmRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::~CryptoAlgorithmRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::create):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::identifier):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h: Added.
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Added support for this algorithm.

2013-12-12  Andreas Kling  <akling@apple.com>

        [Mac] Stop not caching HTTP resources with "Vary" header in response.
        <https://webkit.org/b/125483>
        <rdar://problem/11781097>

        Remove the workaround preventing resources with the "Vary" header
        from going into cache, as the CFNetwork cache has supported this
        for quite a while now.

        31.5 MB progression on Membuster3, because we can now mmap those
        resources from disk once they are in the cache.

        We keep the workaround on PLATFORM(WIN) for now.

        Reviewed by Antti Koivisto.

2013-12-12  Sam Weinig  <sam@webkit.org>

        Replace uses of WTF::BitArray with std::bitset
        https://bugs.webkit.org/show_bug.cgi?id=125642

        Reviewed by Anders Carlsson.

        * css/CSSParser.cpp:
        (WebCore::filterProperties):
        (WebCore::CSSParser::createStyleProperties):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText):

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Public key in a generated KeyPair should always be extractable
        https://bugs.webkit.org/show_bug.cgi?id=125643

        Reviewed by Sam Weinig.

        The spec doesn't explain how generateKey works with key pairs (there are open bugs
        about that). Making public keys non-extractable makes no sense one way or another.

        Test: crypto/subtle/rsa-oaep-generate-non-extractable-key.html

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::generatePair):

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Make algorithm.name return registered name, not normalized one
        https://bugs.webkit.org/show_bug.cgi?id=125641

        Reviewed by Anders Carlsson.

        Currently, WebCrypto editor's draft stipulates that algorithm name is lowercased
        as part of normalization.

        But it makes little sense to register algorithms as mixed (mostly upper) case, yet
        return the name lowercased. Other implementations don't bother respecting this,
        and signs are that the spec will change.

        I'd like to match other implementations here, because sticking to the spec only
        makes us fail 3rd party test suites for no good reason.

        Updated many existing tests.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoAlgorithmRegistry.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:

2013-12-12  Csaba Osztrogonác  <ossy@webkit.org>

        Move CertificateInfo to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124720

        Reviewed by Darin Adler.

        Based on the patch by Kwang Yul Seo <skyul@company100.net>

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/mac/CertificateInfo.h: Renamed from Source/WebKit2/Shared/mac/CertificateInfo.h.
        (WebCore::CertificateInfo::setCertificateChain): Added, because WebCoreArgumentCoders needs it.
        * platform/network/mac/CertificateInfoMac.mm: Renamed from Source/WebKit2/Shared/mac/CertificateInfo.mm.
        (WebCore::CertificateInfo::CertificateInfo): Moved encode() and decode() to WebCoreArgumentCodersMac.mm.
        * platform/network/soup/CertificateInfo.cpp: Copied from Source/WebKit2/Shared/WebCertificateInfo.h.
        (WebCore::CertificateInfo::CertificateInfo): Moved encode() and decode() to WebCoreArgumentCodersSoup.cpp.
        * platform/network/soup/CertificateInfo.h: Renamed from Source/WebKit2/Shared/soup/CertificateInfo.h.
        (WebCore::CertificateInfo::setCertificate): Added, because WebCoreArgumentCoders needs it.
        (WebCore::CertificateInfo::setTLSErrors): Added, because WebCoreArgumentCoders needs it.

2013-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160417.
        http://trac.webkit.org/changeset/160417
        https://bugs.webkit.org/show_bug.cgi?id=125629

        The patch is causing crashes (Requested by zdobersek1 on
        #webkit).

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::remove):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper):

2013-12-12  Martin Robinson  <mrobinson@igalia.com>

        Remove a few more guards mistakenly added in r160367

        Reviewed by Carlos Garcia Campos

        r160367 was too liberal in hiding APIs from the GObject DOM bindings.
        We should expose the BatteryManager and the text and audio tracks.

        * Modules/battery/BatteryManager.idl:
        * html/HTMLMediaElement.idl:

2013-12-11  Darin Adler  <darin@apple.com>

        StylePendingImage needs to correctly manage the CSSValue pointer lifetime
        https://bugs.webkit.org/show_bug.cgi?id=125468

        Reviewed by Andreas Kling.

        Test: fast/css/pending-image-crash.xhtml

        Disconnect the reference counted StylePendingImage from the CSSValue that owns
        it when it's not needed any more, otherwise we could end up using a pointer
        that might no longer be valid.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::detachPendingImage): Added. Calls detachFromCSSValue
        on the current image if it is a StylePendingImage.
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue): Call detachPendingImage.
        (WebCore::CSSCursorImageValue::cachedImage): Call detachPendingImage before changing
        m_image to a new value.
        (WebCore::CSSCursorImageValue::clearCachedImage): Ditto.
        * css/CSSCursorImageValue.h: Added detachPendingImage.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::detachPendingImage): Added. Calls detachFromCSSValue
        on the current image set if it is a StylePendingImage.
        (WebCore::CSSImageSetValue::~CSSImageSetValue): Call detachPendingImage.
        (WebCore::CSSImageSetValue::cachedImageSet): Call detachPendingImage before changing
        m_imageSet to a new value.
        * css/CSSImageSetValue.h: Added detachPendingImage.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::detachPendingImage): Added. Calls detachFromCSSValue on the
        current image if it is a StylePendingImage.
        (WebCore::CSSImageValue::~CSSImageValue): Call detachPendingImage.
        (WebCore::CSSImageValue::cachedImage): Call detachPendingImage before changing m_image
        to a new value.
        * css/CSSImageValue.h: Added detachPendingImage.

        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::cssImageValue): Added a null check.
        (WebCore::StylePendingImage::cssImageGeneratorValue): Added a null check.
        (WebCore::StylePendingImage::cssCursorImageValue): Added a null check.
        (WebCore::StylePendingImage::cssImageSetValue): Added a null check.
        (WebCore::StylePendingImage::detachFromCSSValue): Added. Sets m_value to null since
        the style is no longer using this StylePendingImage.
        (WebCore::StylePendingImage::data): Changed to use the "this" pointer since all we
        need is some arbitrary pointer uniquely identifying the image. Before loading the image,
        we have no suitable weak identifier, so it suffices to use the unique pointer to each
        StylePendingImage object. This function is used only in a limited way; it would be nice
        to find a way to make the code less strange long term.

2013-12-11  Darin Adler  <darin@apple.com>

        Remove some unneeded code noticed while looking at StylePendingImage
        https://bugs.webkit.org/show_bug.cgi?id=125618

        Reviewed by Andreas Kling.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage): Removed redundant function calls.

        * rendering/RenderImageResource.cpp: Removed unneeded nullImage and
        usesImageContainerSize member functions.
        (WebCore::RenderImageResource::image): Use Image::nullImage directly instead of
        through RenderImageResourceImage::nullImage.

        * rendering/RenderImageResource.h: Removed unneeded usesImageContainerSize
        and nullImage functions. Also removed unneeded includes.

        * rendering/RenderImageResourceStyleImage.h: Removed unneeded
        usesImageContainerSize override. Nobody was calling it.

2013-12-11  Benjamin Poulain  <bpoulain@apple.com>

        Add the CFNetwork implementation of the asynchronous ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=124440

        Reviewed by Alexey Proskuryakov.

        Add a second subclass of ResourceHandleCFURLConnectionDelegate: ResourceHandleCFURLConnectionDelegateWithOperationQueue.
        The difference is those objects handle the network callback on a different queue.

        Some common code has been refactored in ResourceHandleCFURLConnectionDelegate to reduce duplicated code.

        The initialization of the request and connection is moved to the subclass to clean up initialization.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::willCacheResponseAsync):
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp: Added.
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::~ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::connectionWasCancelled):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupConnectionScheduling):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueDidReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h: Copied from Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillCacheResponse):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegate::releaseHandle):
        (WebCore::ResourceHandleCFURLConnectionDelegate::synthesizeRedirectResponseIfNecessary):
        (WebCore::ResourceHandleCFURLConnectionDelegate::createResourceRequest):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupConnectionScheduling):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueWillSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueDidReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueShouldUseCredentialStorage):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueWillCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:

2013-12-11  David Kilzer  <ddkilzer@apple.com>

        Define m_hasBadParent in InlineBox if defined(ADDRESS_SANITIZER)
        <http://webkit.org/b/125329>

        Reviewed by Darin Adler.

        No tests since this is a build fix for:

            $ ./Tools/Scripts/build-webkit --release OTHER_CFLAGS="$inherited -DADDRESS_SANITIZER=1"

        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        - Replace ASSERT_DISABLED use with
          ASSERT_WITH_SECURITY_IMPLICATION_DISABLED for m_hasBadParent.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::~InlineFlowBox):
        - Use !ASSERT_WITH_SECURITY_IMPLICATION_DISABLED instead of
          #ifndef NDEBUG since this calls setHasBadParent().
        (WebCore::InlineFlowBox::checkConsistency):
        - Move ASSERT(!m_hasBadChildList) outside of
          #if CHECK_CONSISTENCY and change to
          ASSERT_WITH_SECURITY_IMPLICATION(!m_hasBadChildList).

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::setHasBadChildList):
        - Change #ifndef NDEBUG to
          #if !ASSERT_WITH_SECURITY_IMPLICATION_DISABLED for code using
          m_hasBadChildList.

2013-12-11  Ralph Thomas  <ralpht@gmail.com>

        [WebGL] Fix build on GL ES 2.0 targets after r160119
        https://bugs.webkit.org/show_bug.cgi?id=125541

        Reviewed by Brent Fulgham.

        GL ES 2.0 doesn't define GL_HALF_FLOAT_ARB, so pass through HALF_FLOAT_OES (which is defined for GL ES 2.0).
        This change also reverts r160324 which incorrectly defined GL_HALF_FLOAT_ARB for the Windows ANGLE target.

        No new tests, no change in functionality.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2013-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push More Inspector Required Classes Down into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125324

        Reviewed by Timothy Hatcher.

        Part 1: Push down core inspector classes.

          - Move InspectAgentBase, InspectorAgentRegistry, InspectorBackendDispatcher, InspectorValues
            down to JavaScriptCore and into the Inspector namespace.
          - Add forwarding headers for JavaScriptCore/inspector files.
          - Use the Inspector namespace where appropriate.
          - Rename InspectorBaseAgent to InspectorAgentBase for clarity.

        Part 2: Push Script wrapper classes down into JavaScriptCore/bindings.

          - Move ScriptObject and ScriptValue into JavaScriptCore but namespace Deprecated
          - Add forwarding headers
          - Use Deprecated::ScriptObject and Deprecated::ScriptValue everywhere.

        Part 3: Push Down ScriptFunctionCall

          - Move ScriptFunctionCall to JavaScriptCore/bindings into namespace Deprecated.
          - Give constructor a function to all for a different JSC::call, because
            WebCore ScriptFunctionCall's use JSMainThreadExecState when isMainThread.
          - Prefer Deprecated::ScriptFunctionCall everywhere it is used in WebCore.

        Part 4: Extract InspectorTypeBuilder helper functions

          - There is a chunk of InspectorTypeBuilder that never changes. Extract it into
            its own file, InspectorTypeBuilder.h in JSC/inspector, Inspector namespace.
          - This moves TypeBuilder from namespace WebCore to namespace Inspector
          - Rename the WebCore generated InspectorTypeBuilder to InspectorWebTypeBuilders,
            eventually the CodeGenerator script will do this for more then TypeBuilders
            and there will be "JS" TypeBuilders and "Web" TypeBuilders files.

        No new tests. No change in functionality, just moving things around.

        * CMakeLists.txt:
        * ForwardingHeaders/bindings/ScriptFunctionCall.h: Added.
        * ForwardingHeaders/bindings/ScriptObject.h: Added.
        * ForwardingHeaders/bindings/ScriptValue.h: Added.
        * ForwardingHeaders/inspector/InspectorAgentBase.h: Added.
        * ForwardingHeaders/inspector/InspectorAgentRegistry.h: Added.
        * ForwardingHeaders/inspector/InspectorBackendDispatcher.h: Added.
        * ForwardingHeaders/inspector/InspectorTypeBuilder.h: Added.
        * ForwardingHeaders/inspector/InspectorValues.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBAny.cpp:
        (WebCore::IDBAny::scriptValue):
        (WebCore::IDBAny::IDBAny):
        * Modules/indexeddb/IDBAny.h:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp):
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::lowerValue):
        (WebCore::IDBKeyRange::upperValue):
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBKeyRange.h:
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::generateIndexKeysForValue):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::count):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::onSuccessInternal):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/mediastream/CapabilityRange.cpp:
        (WebCore::scriptValue):
        (WebCore::CapabilityRange::min):
        (WebCore::CapabilityRange::max):
        * Modules/mediastream/CapabilityRange.h:
        * Modules/mediastream/MediaTrackConstraint.h:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * UseJSC.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/Dictionary.h:
        (WebCore::Dictionary::getEventListener):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::deserializeIDBValue):
        (WebCore::deserializeIDBValueBuffer):
        (WebCore::idbKeyToScriptValue):
        (WebCore::scriptValueToIDBKey):
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::JSInjectedScriptHost::inspectedObject):
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/js/JSInjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::functionCallHandlerFromAnyThread):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::currentState):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        (WebCore::handleInitMessageEvent):
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptArguments):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::executeScriptInWorld):
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::updateCallStack):
        (WebCore::ScriptDebugServer::dispatchDidPause):
        (WebCore::ScriptDebugServer::runScript):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptGlobalObject.cpp: Renamed from Source/WebCore/bindings/js/ScriptObject.cpp.
        (WebCore::handleException):
        (WebCore::ScriptGlobalObject::set):
        (WebCore::ScriptGlobalObject::get):
        (WebCore::ScriptGlobalObject::remove):
        * bindings/js/ScriptGlobalObject.h: Copied from Source/WebCore/inspector/ScriptCallStack.h.
        (WebCore::ScriptGlobalObject::ScriptGlobalObject):
        * bindings/js/ScriptObject.h: Removed.
        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        (WebCore::ScriptProfile::buildInspectorObjectForHead):
        (WebCore::ScriptProfile::buildInspectorObjectForBottomUpHead):
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::objectByHeapObjectId):
        (WebCore::ScriptProfiler::getHeapObjectId):
        * bindings/js/ScriptProfiler.h:
        * bindings/js/ScriptState.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeForInspector):
        (WebCore::SerializedScriptValue::serialize):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):
        * bindings/js/WorkerScriptController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjAnyAttribute):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::initCustomEvent):
        * dom/CustomEvent.h:
        (WebCore::CustomEvent::detail):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::dataAsScriptValue):
        * dom/PopStateEvent.h:
        (WebCore::PopStateEvent::state):
        * dom/ScriptElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType.get_raw_validator_call_text):
        (RawTypes.Object.get_array_item_raw_c_type_text):
        (RawTypes.Any.get_array_item_raw_c_type_text):
        (RawTypes.Array.get_array_item_raw_c_type_text):
        (CommandReturnPassModel.OptOutput.get_return_var_type):
        (CommandReturnPassModel.OptOutput.get_output_parameter_type):
        (TypeModel.ExactlyInt.get_input_param_type_text):
        (TypeModel.ExactlyInt.get_opt_output_type_):
        (TypeModel.init_class):
        (TypeBindings.create_named_type_declaration.Helper):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.EnumBinding.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (Inspector):
        (ArrayBinding.get_array_item_c_type_text):
        (Generator.go):
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:
        (void):
        (InspectorFrontend_h):
        (InspectorBackendDispatchers_h):
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        (WebCore::messageTypeValue):
        (WebCore::messageLevelValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getFunctionDetails):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::getInternalProperties):
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::releaseObject):
        (WebCore::InjectedScript::wrapCallFrames):
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::wrapTable):
        (WebCore::InjectedScript::wrapNode):
        (WebCore::InjectedScript::findObjectById):
        (WebCore::InjectedScript::inspectNode):
        (WebCore::InjectedScript::releaseObjectGroup):
        (WebCore::InjectedScript::nodeAsScriptValue):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptBase.cpp:
        (WebCore::InjectedScriptBase::InjectedScriptBase):
        (WebCore::InjectedScriptBase::initialize):
        (WebCore::InjectedScriptBase::injectedScriptObject):
        (WebCore::InjectedScriptBase::callFunctionWithEvalEnabled):
        (WebCore::InjectedScriptBase::makeCall):
        (WebCore::InjectedScriptBase::makeEvalCall):
        * inspector/InjectedScriptBase.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::wrapCanvas2DContext):
        (WebCore::InjectedScriptCanvasModule::wrapWebGLContext):
        (WebCore::InjectedScriptCanvasModule::callWrapContextFunction):
        (WebCore::InjectedScriptCanvasModule::markFrameEnd):
        (WebCore::InjectedScriptCanvasModule::callStartCapturingFunction):
        (WebCore::InjectedScriptCanvasModule::callVoidFunctionWithTraceLogIdArgument):
        (WebCore::InjectedScriptCanvasModule::traceLog):
        (WebCore::InjectedScriptCanvasModule::replayTraceLog):
        (WebCore::InjectedScriptCanvasModule::resourceInfo):
        (WebCore::InjectedScriptCanvasModule::resourceState):
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::InspectableObject::get):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::wrapWebGLRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::injectedScriptCanvasModule):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasInstrumentation.h:
        (WebCore::InspectorInstrumentation::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorInstrumentation::wrapWebGLRenderingContextForInstrumentation):
        * inspector/InspectorClient.cpp:
        * inspector/InspectorClient.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectableHeapObject::get):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::breakpointActionTypeForString):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::scriptToInspectorObject):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::compileScript):
        (WebCore::InspectorDebuggerAgent::runScript):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorForwarding.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::evaluateAsBoolean):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::create):
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::FrontendMenuProvider::FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        (WebCore::InspectorHeapProfilerAgent::getObjectByHeapObjectId):
        (WebCore::InspectorHeapProfilerAgent::getHeapObjectId):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::buildObjectForIntRect):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceTypeJson):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::buildObjectForSearchResult):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::createProfileHeader):
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getCPUProfile):
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        (WebCore::InspectorProfilerAgent::getHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::buildErrorRangeObject):
        (WebCore::InspectorRuntimeAgent::parse):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::buildMediaObject):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        (WebCore::InspectorStyleSheet::canBind):
        * inspector/InspectorStyleTextEditor.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::sendEvent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/InspectorWebAgentBase.h: Renamed from Source/WebCore/inspector/InspectorAgentRegistry.h.
        (WebCore::InspectorAgentBase::InspectorAgentBase):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/InstrumentingAgents.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::InspectableNode::get):
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::create):
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::argumentAt):
        (WebCore::ScriptArguments::getFirstArgumentAsString):
        * inspector/ScriptArguments.h:
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h:
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * inspector/ScriptDebugListener.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::createWebSocketCreateData):
        (WebCore::TimelineRecordFactory::createGenericWebSocketData):
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * page/Console.cpp:
        * page/ContentSecurityPolicy.cpp:
        * page/Frame.cpp:
        * page/PageConsole.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        * testing/Internals.h:
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::createConnectEvent):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerThread.cpp:
        * xml/XMLTreeViewer.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-12-11  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Store SHA1 hash in std::array
        https://bugs.webkit.org/show_bug.cgi?id=125446

        Reviewed by Darin Adler.

        Change Vector to std::array and use typedef.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::createDigest):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-12-11  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto keys should support structured clone
        https://bugs.webkit.org/show_bug.cgi?id=125590

        Reviewed by Oliver Hunt.

        Tests: crypto/subtle/aes-postMessage.html
               crypto/subtle/hmac-postMessage.html
               crypto/subtle/postMessage-worker.html
               crypto/subtle/rsa-postMessage.html

        * crypto/CryptoAlgorithmIdentifier.h:
        (WebCore::CryptoAlgorithmIdentifier):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        AES_KW was added to WebCrypto spec editor's draft yesterday night. Now that we're
        adding a matching enum for structired clone serialization, it's as good a time as
        any to update the order of values to match.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::countUsages):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        (WebCore::CloneDeserializer::readHMACKey):
        (WebCore::CloneDeserializer::readAESKey):
        (WebCore::CloneDeserializer::readRSAKey):
        (WebCore::CloneDeserializer::readCryptoKey):
        (WebCore::CloneDeserializer::readTerminal):
        Added serialization/deserialization for CryptoKey. This doesn't update version
        number, because we don't currently store structured clones in persistent storage -
        and even if we did, we wouldn't want to invalidate everything users already stored.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::shared):
        (WebCore::registryMutex):
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoKey.idl:
        With structured clone, it is now possible to send a Key to a web worker. That's
        of no practical use because the crypto API is not exposed in workers, but we
        shouldn't crash anyway.

        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::CryptoKeyAES):
        (WebCore::CryptoKeyAES::isValidAESAlgorithm):
        * crypto/keys/CryptoKeyAES.h:
        Exposed isValidAESAlgorithm, so that a caller could know whether the constructor
        will assert.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCommon.props:
        Added crypto/keys to search paths to avoid build breakage.

2013-12-11  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Highlight margin-shape for shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=125175

        Reviewed by Darin Adler.

        In addition to highlighting the shape, also highlight the shape created
        by shape-margin with a slightly more transparent color. This patch modifies
        the shape info passed to the Inspector Overlay to include a path for both
        the raw shape and the shape with margin.

        Test: inspector-protocol/model/highlight-shape-outside-margin.html

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForShapeOutside): Call Shape::buildDisplayPaths rather than
        Shape::buildPath, and pass along any relevant paths to the Inspector overlay.
        * inspector/InspectorOverlayPage.js:
        (_drawShapeHighlight): Draw the margin shape in addition to the raw shape.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::addRoundedRect): Add a rounded rect to the path.
        (WebCore::BoxShape::buildDisplayPaths): Create the applicable [margin/padding/raw] shapes.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::addPolygon): Add a set of vertices as a polygon to the path.
        (WebCore::PolygonShape::buildDisplayPaths): Create the applicable [margin/padding/raw] shapes.
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::buildDisplayPaths): Ditto.
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::buildDisplayPaths): Ditto.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects WAI-ARIA landmark roles
        https://bugs.webkit.org/show_bug.cgi?id=125584

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with landmark roles with the proper
        AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (atkRole):

2013-12-11  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add a UPower-based BatteryProvider
        https://bugs.webkit.org/show_bug.cgi?id=115719

        Reviewed by Martin Robinson.

        Introduce the BatteryProviderUPower, a provider of the system's battery status that produces the information
        using the upower-glib library.

        The BatteryProviderUPower creates a new UPower client when the provider should start emitting updates and hooks
        up to device alteration signals. These only fire recalculation of the battery status when a battery device is altered.

        When recalculating, every battery device is taken into account, accumulating the energy capacities when both empty
        and full, the current rate of energy charging/discharging, and the battery status (whether the device is charging or
        discharging). This gives a set of data that covers the overall battery status of the system.

        This data is then used to calculate the battery status as perceived by the WebCore implementation. Charging is determined
        by examining the integral sign of the current combined energy rate. Charging and discharging times are calculated, when
        appropriate, by dividing the chargable/dischargable capacity with the current combined energy rate. The battery level is
        calculated by dividing the current energy capacity with the full energy capacity (i.e. the combined capacity of all
        the batteries that the system possesses). The status is (indirectly) passed onto BatteryManager by invoking the
        updateBatteryStatus method on the client, with the first parameter representing the battery charging/discharging state,
        the second parameter representing the time left until the battery is fully charged (when charging) or fully
        depleted (when discharging), and the third parameter representing the current battery level.

        Whenever the implementation cannot provide any information about the battery status of the system, the client's
        updateBatteryStatus method is invoked with the first parameter reporting the unavailability of any information
        about the battery status. The other two parameters can be omitted as they default to 0 when not given and are neither
        available nor useful in such circumstances. The client should handle such an update by reporting the 'default' battery
        status - charging, the battery level being at 1.0 and both the charging and discharging time having the value of
        the positive infinity (as per the Battery Status API specification).

        The implementation is heavily inspired by a similar approach to calculating battery status in GNOME Settings Daemon.

        No new tests - no new functionality. The feature is not yet enabled. When enabled, the relevant tests pass.

        * GNUmakefile.list.am: Add the BatteryProviderUPower(Client) build targets.
        * platform/glib/BatteryProviderUPower.cpp: Added.
        (powerDeviceAlterationCallback):
        (BatteryProviderUPower::BatteryProviderUPower):
        (BatteryProviderUPower::startUpdating):
        (BatteryProviderUPower::stopUpdating):
        (BatteryProviderUPower::updateBatteryStatus):
        * platform/glib/BatteryProviderUPower.h: Added.
        (WebCore):
        (BatteryProviderUPower):
        * platform/glib/BatteryProviderUPowerClient.h: Added.
        (WebCore):
        (BatteryProviderUPowerClient):

2013-12-11  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Improving createOffer and createAnswer LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=125568

        Reviewed by Philippe Normand.

        The constraints parameter should be optional in both. Also adding tests to check if we already have a local SDP
        when creating an answer.

        Existing tests were updated.

        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):

2013-12-11  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Fix build with CONTEXT_MENUS flag set OFF
        https://bugs.webkit.org/show_bug.cgi?id=125572

        Reviewed by Gyuyoung Kim.

        dispatchEventAsContextMenuEvent is called regardless of CONTEXT_MENUS flag setting,
        thus its definition in InspectorFrontendHost should not be guarded by this flag.

        No new tests, no behaviour change.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):

2013-12-11  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        [CURL] Build fails after r160386.
        https://bugs.webkit.org/show_bug.cgi?id=125571

        Reviewed by Zoltan Herczeg.

        Need no new tests.

        Fix a typo in commit r160386 that prevents building with curl.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):

2013-12-11  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] Take into account fill-rule for polygon interpolation
        https://bugs.webkit.org/show_bug.cgi?id=125508

        Reviewed by Dirk Schulze.

        Implement the polygon fill-rule part of http://dev.w3.org/csswg/css-shapes/#basic-shape-interpolation.

        Adapt fast/shapes/shape-outside-floats/shape-outside-animation.html.

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Test: accessibility/children-changed-sends-notification.html

        Emit children-changed::add and children-changed::remove whenever
        an object has been added/removed to the accessibility hierarchy,
        that is, when a new AtkObject is being attached/detached.

        * accessibility/AXObjectCache.h: Added new enumeration to know
        when we are detaching a wrapper because of the cache or the
        element is being destroyed, so we can use that information.
        (WebCore::AXObjectCache::detachWrapper): Added a new parameter and
        updated all the prototypes in different ports.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache): Call detachWrapper()
        specifying that we do it because the cache is being destroyed.
        (WebCore::AXObjectCache::remove): Call detachWrapper() specifying
        that we do it because an accessible element is being destroyed.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper): Emit the children-changed
        signal when needed. We rely on the cached reference to the parent
        AtkObject (using the implementation of atk_object_get_parent from
        the AtkObject class) to find the right object to emit the signal
        from here, since the accessibility hierarchy from WebCore will no
        longer be accessible at this point.
        (WebCore::AXObjectCache::attachWrapper): Emit the children-change
        signal from here unless we are in the middle of a layout update,
        trying to provide as much information (e.g. the offset) as possible.
        (WebCore::AXObjectCache::postPlatformNotification): Make sure we
        update (touch) the subtree under an accessibility object whenever
        we receive AXChildrenChanded from WebCore, to ensure that those
        objects will also be visible rightaway to ATs, and that those get
        properly notified of the event at that very same moment.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper): Updated function signature.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Ditto.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper): Ditto.

2013-12-11  Andreas Kling  <akling@apple.com>

        REGRESSION(r160389): SVG test assertion extravaganza.

        Unreviewed. Use getAttribute() instead of fastGetAttribute() for
        the "type" attribute since it's animatable on SVG elements.

2013-12-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Set m_nextBreakablePosition as private in InlineIterator, and use it.
        https://bugs.webkit.org/show_bug.cgi?id=125482

        Reviewed by Andreas Kling.

        InlineIterator has been exported m_nextBreakablePosition as public though it is member variable.
        This patch set it as private, and add getter/setter functions for it.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::nextBreakablePosition):
        (WebCore::InlineIterator::setNextBreakablePosition):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):

2013-12-10  Gurpreet Kaur  <k.gurpreet@samsung.com>

        top and bottom black background line not getting displayed
        https://bugs.webkit.org/show_bug.cgi?id=21664

        Reviewed by Simon Fraser.

        The table cell's background was not being displayed. Since the table
        cell had no child correct offsetWidth was not being set even if table
        width is being defined.

        Test: fast/dom/HTMLTableElement/empy-table-cell-with-background-color.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        cellHasContent should also be set to true incase background color is
        present.

2013-12-10  Beth Dakin  <bdakin@apple.com>

        Horizontal rubber-banding without a horizontal scrollbar is distracting
        https://bugs.webkit.org/show_bug.cgi?id=125550

        Reviewed by Simon Fraser.

        Setting the ScrollElasticity to ScrollElasticityAutomatic will make sure we only 
        rubber-band horizontally when there is a horizontal scrollbar.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        Correct a preprocessor guard from a mis-merged patch

        In r160367, I mismerged a patch from Gustavo Noronha. This commit
        fixes the merge and thus fixes the CMake build.

        * html/HTMLMediaElement.idl: Move the preprocessor guard to the correct property.

2013-12-10  Rob Buis  <rob.buis@samsung.com>

        Clean up SVGScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=125527

        Reviewed by Sam Weinig.

        Rewrite to not store type in m_type and also remove type getter/setter.

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseAttribute):
        (WebCore::SVGScriptElement::typeAttributeValue):
        * svg/SVGScriptElement.h:
        * svg/SVGScriptElement.idl:

2013-12-10  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Use std::array when computing MD5 checksum
        https://bugs.webkit.org/show_bug.cgi?id=125509

        Reviewed by Anders Carlsson.

        Use MD5::Digest type and MD5::hashSize when computing MD5 checksum.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):

2013-12-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose splitter elements with ATK_ROLE_SEPARATOR
        https://bugs.webkit.org/show_bug.cgi?id=125522

        Reviewed by Chris Fleizach.

        Expose objects with SplitterRole role as ATK_ROLE_SEPARATOR.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Elements with role 'alertdialog' should be ATK_ROLE_ALERT
        https://bugs.webkit.org/show_bug.cgi?id=125521

        Reviewed by Chris Fleizach.

        Stop exposing alert dialogs as ATK_ROLE_DIALOG and do it as
        ATK_ROLE_ALERT instead.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-10  Brendan Long  <b.long@cablelabs.com>

        [GTK][GStreamer] media/video-preload.html is flakily crashing on WK2
        https://bugs.webkit.org/show_bug.cgi?id=125411

        Reviewed by Philippe Normand.

        No new tests because this fixes flakeyness in existing tests (media/video-preload.html, and various tests in media/track/{audio,in-band,video}).

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkitTextCombinerPadGetProperty): Copy tag list to prevent concurrent modification problems.
        (webkitTextCombinerPadEvent): Add locking.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Call tagsChanged() because we need it to setup m_tags.
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Clear m_tags.
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged): Lookup the tags while we're in this callback, because it's the only time we can guarantee that the input-selector won't unref them.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Use m_tags.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Add m_tags and a mutex.

2013-12-10  László Langó  <lango@inf.u-szeged.hu>

        PageConsole::addMessage should automatically determine column number alongside line number
        https://bugs.webkit.org/show_bug.cgi?id=114319

        Reviewed by Joseph Pecoraro.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::InlineStyleSheetOwner):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        * dom/ScriptableDocumentParser.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        * html/parser/HTMLDocumentParser.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printSourceURLAndPosition):
        (WebCore::PageConsole::addMessage):
        * page/PageConsole.h:
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::error):

2013-12-10  Andreas Kling  <akling@apple.com>

        Jettison all StyleResolver data on memory pressure.
        <https://webkit.org/b/125498>

        The StyleResolver can be rebuilt relatively quickly; we already
        have an optimization that discards it some time after last use.

        If we find ourseles under serious memory pressure, don't wait for
        the timer to kick in, throw everything overboard right away.

        ~5MB progression post-pressure on Membuster3.

        Reviewed by Anders Carlsson.

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=116375

        Reviewed by Gustavo Noronha Silva.

        The CMake build is more complete than the autotools counterpart, so autotools doesn't consider
        some supplemental IDL attributes when building the DOM bindings. To prevent API breaks we should
        protect these attributes from DOM binding generation.

        * Modules/battery/BatteryManager.idl: Protect non-GObject DOM bound methods by C preprocessor checks.
        * Modules/battery/NavigatorBattery.idl: Ditto.
        * Modules/mediastream/HTMLMediaElementMediaStream.idl: Ditto.
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl: Ditto.
        * Modules/networkinfo/NetworkInfoConnection.idl: Ditto.
        * PlatformGTK.cmake: Add build steps for building the bindings.
        * dom/Document.idl: Protect non-GObject DOM bound methods by C preprocessor checks.
        * html/HTMLMediaElement.idl: Ditto.

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        Various fixes for the CMake GTK+ build

        Reviewed by Gustavo Noronha.

        * PlatformGTK.cmake: Update source list.

2013-12-10  Robert Sipka  <sipka@inf.u-szeged.hu>

        [nix][curl] Buildfix after r160310
        https://bugs.webkit.org/show_bug.cgi?id=125489

        Reviewed by Gustavo Noronha Silva.

        Curl doesn't include soup files.

        * PlatformNix.cmake:

2013-12-10  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] REGRESSION: www.yahoo.com redirects to the mobile version after UA change
        https://bugs.webkit.org/show_bug.cgi?id=125444

        Reviewed by Martin Robinson.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString): more correctly pretend we're Mac OS X.
        (WebCore::standardUserAgent): ditto.

2013-12-09  Gustavo Noronha Silva  <gns@gnome.org>

        [Soup] Send original encoded data size to didReceiveBuffer
        https://bugs.webkit.org/show_bug.cgi?id=125410

        Reviewed by Martin Robinson.

        No tests, the only way to test this seems to be through the inspector UI.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): data member to track stream
        position.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::currentStreamPosition): obtains the current stream position by querying
        the first seekable input stream we find.
        (WebCore::nextMultipartResponsePartCallback): store the position before we start reading a new part.
        (WebCore::sendRequestCallback): store the position before we start reading the response body.
        (WebCore::readCallback): pass the position delta to didReceiveData.

2013-12-09  Andreas Kling  <akling@apple.com>

        Clear out font width measurement caches on memory pressure.
        <https://webkit.org/b/125481>

        The data kept in WidthCaches can be regenerated on demand. Throwing
        it away when we're under memory pressure buys us ~4MB on Membuster3.

        Reviewed by Antti Koivisto.

2013-12-09  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove enabled() in InspectorRuntimeAgent.
        https://bugs.webkit.org/show_bug.cgi?id=125476

        Reviewed by Joseph Pecoraro.

        Dead code. It's never called anywhere.

        No new tests, no behavior change.

        * inspector/InspectorRuntimeAgent.h:

2013-12-09  Sam Weinig  <sam@webkit.org>

        Replace use of WTF::FixedArray with std::array
        https://bugs.webkit.org/show_bug.cgi?id=125475

        Reviewed by Anders Carlsson.

        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * platform/graphics/GlyphMetricsMap.h:

2013-12-09  Benjamin Poulain  <bpoulain@apple.com>

        Refactor the CFURLConnectionClient to be the synchronous implementation of an abstract network delegate
        https://bugs.webkit.org/show_bug.cgi?id=125379

        Reviewed by Alexey Proskuryakov.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp: Added.
        (WebCore::ResourceHandleCFURLConnectionDelegate::ResourceHandleCFURLConnectionDelegate):
        (WebCore::ResourceHandleCFURLConnectionDelegate::~ResourceHandleCFURLConnectionDelegate):
        (WebCore::ResourceHandleCFURLConnectionDelegate::willSendRequestCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveResponseCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveDataCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didFinishLoadingCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didFailCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::willCacheResponseCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveChallengeCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didSendBodyDataCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::shouldUseCredentialStorageCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpaceCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveDataArrayCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::makeConnectionClient):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h: Added.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp: Added.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::SynchronousResourceHandleCFURLConnectionDelegate):
        (WebCore::synthesizeRedirectResponseIfNecessary):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveData):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFail):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveChallenge):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didSendBodyData):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::shouldUseCredentialStorageCallback):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpace):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveDataArray):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h: Added.

2013-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r136280): input[type=image] should assume coords of 0,0 when activated without physically clicking
        https://bugs.webkit.org/show_bug.cgi?id=125392

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/3c33d42207cd209bb171083ba66c225f694f2101

        Activating an image button with the keyboard or element.click() should result in selected coords of (0,0) per
        http://www.w3.org/TR/2013/CR-html5-20130806/forms.html#image-button-state-(type=image)
        "If the user activates the control without explicitly selecting a coordinate, then the coordinate (0,0) must be assumed."

        New behavior also matches that of Internet Explorer and Firefox.

        Tests: fast/forms/input-image-submit.html

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent): Set m_clickLocation to (0, 0) for simulated events.

2013-12-09  Jer Noble  <jer.noble@apple.com>

        [MSE] Add support for VideoPlaybackMetrics.
        https://bugs.webkit.org/show_bug.cgi?id=125380

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-video-playback-quality.html

        Add a new object type VideoPlaybackQuality to be returned by
        HTMLMediaElement.getVideoPlaybackQuality().

        HTMLMediaElements must separately track a droppedVideoFrame count, as
        certain operations on SourceBuffer will drop incoming frames, which must
        be accounted for. Reset this count when the media engine changes, which is
        indicitive of a new media load requset starting.

        Add the new VideoPlaybackQuality class:
        * Modules/mediasource/VideoPlaybackQuality.cpp: Added.
        (WebCore::VideoPlaybackQuality::create):
        (WebCore::VideoPlaybackQuality::VideoPlaybackQuality):
        * Modules/mediasource/VideoPlaybackQuality.h: Added.
        (WebCore::VideoPlaybackQuality::creationTime):
        (WebCore::VideoPlaybackQuality::totalVideoFrames):
        (WebCore::VideoPlaybackQuality::droppedVideoFrames):
        (WebCore::VideoPlaybackQuality::corruptedVideoFrames):
        (WebCore::VideoPlaybackQuality::totalFrameDelay):
        * Modules/mediasource/VideoPlaybackQuality.idl: Added.

        Add support for the new class to HTMLMediaElement:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::shouldUseVideoPluginProxy):
        (HTMLMediaElement::getVideoPlaybackQuality):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        Report the video quality metrics from the MediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::totalVideoFrames):
        (WebCore::MediaPlayer::droppedVideoFrames):
        (WebCore::MediaPlayer::corruptedVideoFrames):
        (WebCore::MediaPlayer::totalFrameDelay):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::totalVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::totalFrameDelay):

        Correctly report the dropped frame count:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer): needsRandomAccessFlag defaults to true.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Check the sync status of the incoming sample.
        (WebCore::SourceBuffer::didDropSample): Notify the media element of a dropped frame.
        * Modules/mediasource/SourceBuffer.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (HTMLMediaElement::mediaPlayerEngineUpdated): Reset m_droppedFrameCount.
        (HTMLMediaElement::getVideoPlaybackQuality): Return a new VideoPlaybackQuality object.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::incrementDroppedFrameCount): Simple incrementer.
        * platform/MediaSample.h:
        (WebCore::MediaSample::isSync): Convenience function.
        (WebCore::MediaSample::isNonDisplaying): Ditto.

        Add support in the AVFoundation MediaSource Engine:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay):

        Add support in the Mock MediaSource Engine:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::totalVideoFrames): Simple accessor.
        (WebCore::MockMediaPlayerMediaSource::droppedVideoFrames): Ditto.
        (WebCore::MockMediaPlayerMediaSource::corruptedVideoFrames): Ditto.
        (WebCore::MockMediaPlayerMediaSource::totalFrameDelay): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate):
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::enqueueSample): Increment the frame counts based on
            the incoming sample.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        Add the new files to the project:
        * bindings/gobject/GNUmakefile.am:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * GNUMakefile.list.am:
        * CMakeLists.txt:

2013-12-09  Simon Fraser  <simon.fraser@apple.com>

        Avoid divide by zero in scrollbar code, and protect against Obj-C exceptions
        https://bugs.webkit.org/show_bug.cgi?id=125469
        <rdar://problem/15535772>

        Reviewed by Beth Dakin.
        
        In ScrollbarThemeMac::setPaintCharacteristicsForScrollbar(), proportion could
        end up as NaN if scrollbar->totalSize() were zero. Protect against that.
        
        Also wrap functions that call into Objective-C with BEGIN_BLOCK_OBJC_EXCEPTIONS/
        END_BLOCK_OBJC_EXCEPTIONS.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar):
        (WebCore::scrollbarPainterPaint):

2013-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        Implement Document.cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=11646

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/dc7879025e01d63be9fcf6a84ca6c9b8b5768a80

        Implement the behavior specified in the current DOM4 working draft:
        http://www.w3.org/TR/2013/WD-dom-20131107/#dom-node-clonenode

        Tests: fast/dom/Document/clone-node.html
               fast/dom/HTMLDocument/clone-node-quirks-mode.html
               svg/custom/clone-node.html

        * dom/Document.cpp:
        (WebCore::Document::cloneNode):
        (WebCore::Document::cloneDocumentWithoutChildren):
        (WebCore::Document::cloneDataFromDocument):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::cloneDocumentWithoutChildren):
        * html/HTMLDocument.h:
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::cloneDocumentWithoutChildren):
        * svg/SVGDocument.h:

2013-12-09  Andreas Kling  <akling@apple.com>

        REGRESSION(r160260): Memory pressure signal causes web process to hang.
        <https://webkit.org/b/125465>

        Reviewed by Tim Horton.

        This command caused all of my web processes to hang:

            notifyutil -p org.WebKit.lowMemory

        This only happens when the cache pruning code encounters a resource
        using purgeable memory.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):

            Grab the next CachedResource pointer before continuing the loop.

2013-12-09  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] OpenGL compile error.
        https://bugs.webkit.org/show_bug.cgi?id=125383

        Reviewed by Darin Adler.

        * platform/graphics/opengl/Extensions3DOpenGLES.h: Define GL_HALF_FLOAT_ARB on Windows when OPENGL_ES_2 is used.

2013-12-09  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix handling of 'inherit' and 'initial' for grid lines.
        https://bugs.webkit.org/show_bug.cgi?id=125223

        Reviewed by Darin Adler.

        'initial' and 'inherit' are always allowed values for CSS properties.
        As the CSSParser handles them automatically, those 2 values were never
        taken care of in StyleResolver, leading to crashes.

        Added tests cases for 'inherit' and 'initial' to the following tests:

        fast/css-grid-layout/grid-item-column-row-get-set.html
        fast/css-grid-layout/grid-item-end-after-get-set.html
        fast/css-grid-layout/grid-item-start-before-get-set.html

        Patch backported from Blink: https://src.chromium.org/viewvc/blink?revision=149257&view=revision

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.cpp:
        (WebCore::StyleGridItemData::StyleGridItemData):

2013-12-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Inspector.json and CodeGenerator tweaks
        https://bugs.webkit.org/show_bug.cgi?id=125321

        Reviewed by Timothy Hatcher.

        * inspector/protocol/Runtime.json:
        Runtime.js was depending on Network.FrameId. This is a layering
        violation, so ideally we can fix this later. For now, just copy
        the FrameId type into Runtime. They are strings so all is good.

        * inspector/CodeGeneratorInspector.py:
        (Generator.EventMethodStructTemplate.append_epilog):
        * inspector/CodeGeneratorInspectorStrings.py:
        Improve --help usage information.
        Make the script work with a single domain json file.
        Add ASCIILiteral's where appropriate.

2013-12-09  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Nix] Fix file name typo in PlatformNix.cmake
        https://bugs.webkit.org/show_bug.cgi?id=125457

        Reviewed by Gustavo Noronha Silva.

        Wrong file name introduced in http://trac.webkit.org/changeset/160310.
        * PlatformNix.cmake:

2013-12-09  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Memory leak due to incorrect use of gst_tag_list_merge in TextCombinerGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=125452

        Reviewed by Philippe Normand.

        No new tests because this fixes a memory leak.

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkitTextCombinerPadEvent): Use gst_tag_list_insert instead of gst_tag_list_merge, since we don't want to create a new list.

2013-12-09  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit ignores @alt on IMG elements with role="text"
        https://bugs.webkit.org/show_bug.cgi?id=125363

        Reviewed by Mario Sanchez Prada.

        If an <img> element has a different role, the alt attribute should still be used in the 
        name calculation if present.

        Test: accessibility/alt-tag-on-image-with-nonimage-role.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::usesAltTagForTextComputation):
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        (WebCore::AccessibilityNodeObject::text):
        * accessibility/AccessibilityNodeObject.h:

2013-12-08  Martin Robinson  <mrobinson@igalia.com>

        [WK2][Soup] Use didReceiveBuffer instead of didReceiveData
        https://bugs.webkit.org/show_bug.cgi?id=118598

        Reviewed by Gustavo Noronha Silva.

        Original patch by Kwang Yul Seo  <skyul@company100.net> and Csaba OsztrogonÃ¡c  <ossy@webkit.org>.

        Switch from using didReceiveData to didReceiveBuffer for the Soup backend and
        let SharedBuffer wrap a SoupBuffer. This is necessary because the NetworkProcess
        only supports getting data via SharedBuffer.

        * GNUmakefile.list.am: Add the new SharedBufferSoup.cpp file to the list.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformNix.cmake:
        * platform/SharedBuffer.cpp: We no longer used the no-op version of the platformFoo methods.
        * platform/SharedBuffer.h: Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:  Use didReceiveBuffer instead of didReceiveData.
        * platform/network/ResourceHandleInternal.h: Have only a m_soupBuffer member instead of three to manage the buffer.
        * platform/network/soup/GOwnPtrSoup.cpp: Add support for SoupBuffer.
        * platform/network/soup/GOwnPtrSoup.h: Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData): ASSERT_NOT_REACHED here, since it should never be
        called now.
        (WebCore::WebCoreSynchronousLoader::didReceiveBuffer): Handle this call properly.
        (WebCore::ResourceHandle::ensureReadBuffer): Now we package up our buffer into a SoupBuffer.
        (WebCore::redirectSkipCallback): Use the new m_soupBuffer member.
        (WebCore::cleanupSoupRequestOperation): Ditto.
        (WebCore::nextMultipartResponsePartCallback): Ditto.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::readCallback):
        * platform/soup/SharedBufferSoup.cpp: Added.

2013-12-09  Michal Poteralski  <m.poteralski@samsung.com>

        DataCloneError exception is not thrown when postMessage's second parameter is the source
        port or the target port.

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

        Reviewed by Alexey Proskuryakov.

        According to specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#dom-window-postmessage

        If the method was invoked with a second argument transfer then if any of the objects in the
        transfer are either the source port or the target port (if any), then a DataCloneError
        exception should be thrown. Currently an InvalidStateError exception is thrown what is an
        incorrect behaviour.

        The proposed solution is change to the correct the exception value.

        Tests: fast/dom/Window/postMessage-clone-port-error.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage): Improve exception value

2013-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build with NetworkProcess enabled.

        * GNUmakefile.list.am: Add missing file to compilation.

2013-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        getComputedStyle border-radius shorthand omits vertical radius information
        https://bugs.webkit.org/show_bug.cgi?id=125394

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/4c2866855dddbb28bb7d978ad627acc368af23d0

        getComputedStyle of border-radius shows the vertical radius components if they differ from their horizontal counterpants.
        We were incorrectly detecting this case and over simplifying the results of getComputedStyle.
        This patch ensures we only hide the vertical values if they are identical to the horizontal values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusShorthandValue):

2013-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not skip attributes with only custom setter
        https://bugs.webkit.org/show_bug.cgi?id=125417

        Reviewed by Gustavo Noronha Silva.

        For attributes with a custom setter, we now generate the code as a
        read-only attribute with a getter method, unless it also has a
        custom getter in which case the attribute is skipped.

        * bindings/gobject/GNUmakefile.am: Generate WebKitDOMMediaController
        that is now required by an attribute having a custom setter.
        * bindings/gobject/WebKitDOMCustom.cpp: Remove methods that are now generated.
        * bindings/gobject/WebKitDOMCustom.h: Ditto.
        * bindings/gobject/WebKitDOMCustom.symbols: Ditto.
        * bindings/gobject/webkitdom.symbols: Add new symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute): Do not skip attributes having a custom setter.
        (GetWriteableProperties): Do not include attributes having a
        custom setter.
        (GenerateProperty): Do not return early for attributes having
        custom setter.
        (GenerateFunctions): Do not generate setter for attributes having
        a custom setter.

2013-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not generate new dispatch_event methods marked as deprecated
        https://bugs.webkit.org/show_bug.cgi?id=125416

        Reviewed by Gustavo Noronha Silva.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip dispatch_event methods for objects
        implementing EventTarget interface unless they are already
        deprecated.
        (GenerateFunction): Pass also the parentNode to SkipFunction().

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

        [MSE] Bring end-of-stream algorithm section up to current spec.
        https://bugs.webkit.org/show_bug.cgi?id=125270

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-end-of-stream.html

        Separate the "endOfStream()" method from the "end of stream algorithm".

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::SourceBufferIsUpdating): Added predicate function.
        (WebCore::MediaSource::endOfStream): Call streamEndedWithError().
        (WebCore::MediaSource::streamEndedWithError): Added.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired): Call streamEndedWithError().
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        * Modules/mediasource/SourceBuffer.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::mediaLoadingFailedFatally): Renamed from mediaEngineError.
        (HTMLMediaElement::mediaLoadingFailed): Call renamed method.
        * html/HTMLMediaElement.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::markEndOfStream): Set load state to Loaded.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::setNetworkState): Simple setter.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate): Set the intitial duration to NaN.
        (WebCore::MockMediaSourcePrivate::markEndOfStream): Set load state to Loaded.

2013-12-04  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash when removing MediaSource from HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=125269

        Reviewed by Sam Weinig.

        Fixes the media/media-source/media-source-fastseek.html test when run with MallocScribble enabled.

        It's possible for a SourceBufferPrivateAVFObjC to outlive its MediaSourcePrivateAVFObjC, so
        make sure to clear the pointer from the former to the latter when the latter is destroyed.
        That means we now have to check to see if the pointer to the latter is still valid at every
        call site.

        As a drive-by fix, rename m_parent to m_mediaSource to more accurately reflect what the pointer
        points to.

        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC): Clear the SourceBuffer's backpointer.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        (WebCore::SourceBufferPrivateAVFObjC::clearMediaSource): 
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC): Rename m_parent -> m_mediaSource.
        (WebCore::SourceBufferPrivateAVFObjC::append): Check m_mediaSource before calling.
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::readyState): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::setActive): Ditto.
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::~MockMediaSourcePrivate): Clear the SourceBuffer's backpointer.
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::MockSourceBufferPrivate): Rename m_parent -> m_mediaSource.
        (WebCore::MockSourceBufferPrivate::removedFromMediaSource): Check m_mediaSource before calling.
        (WebCore::MockSourceBufferPrivate::readyState): Ditto.
        (WebCore::MockSourceBufferPrivate::setReadyState): Ditto.
        (WebCore::MockSourceBufferPrivate::setActive): Ditto.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        (WebCore::MockSourceBufferPrivate::clearMediaSource):

2013-12-07  Zoltan Horvath  <zoltan@webkit.org>

        Remove statusWithDirection static function from RenderBlockLineLayout
        https://bugs.webkit.org/show_bug.cgi?id=125372

        Reviewed by Andreas Kling.

        I run into a FIXME about using BidiStatus constructor rather than statusWithDirection,
        once it's implemented. BidiStatus has got the appropriate constructor now, so I removed
        statusWithDirection and updated the code to use the constructor of BidiStatus.

        No new tests, no behavior change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment):

2013-12-07  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Build fix for gtk port after r160260.

        * loader/cache/CachedImage.h: Add missing a header.

2013-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        ubuntu software center hits _XReadEvents() error
        https://bugs.webkit.org/show_bug.cgi?id=123480

        Reviewed by Martin Robinson.

        * platform/gtk/WidgetBackingStoreGtkX11.cpp:
        (WebCore::WidgetBackingStoreGtkX11::~WidgetBackingStoreGtkX11): clear the surface
        before freeing the associated pixmap.

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        [mac] Keep around more decoded image data, since it's purgeable
        https://bugs.webkit.org/show_bug.cgi?id=125273
        <rdar://problem/13205438>

        Unreviewed patch to fix review comments...

        * platform/graphics/BitmapImage.h:
        Dan noticed that these return statements were improperly indented.

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

        [MSE][Mac] Disable AVFoundation when enabling the MockMediaPlayerMediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=125338

        Reviewed by Darin Adler.

        The MediaSource API has some assumptions which break if more than one installed
        media engine supports MediaSources at the same time. So when enabling the mock
        media source engine in DRT or WKTR, disable AVFoundation so that only the mock
        engine will support media source loading.

        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockMediaSource):

2013-12-06  Antti Koivisto  <antti@apple.com>

        Use NeverDestroyed instead of DEFINE_STATIC_LOCAL

        Reviewed by Anders Carlsson.

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

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

        [MSE] Add a runtime-setting for the MediaSource constructor.
        https://bugs.webkit.org/show_bug.cgi?id=125336

        Reviewed by Eric Carlson.

        Add a Setting to enable the MediaSource constructor.

        * Modules/mediasource/MediaSource.idl:
        * page/Settings.in:

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        [mac] Keep around more decoded image data, since it's purgeable
        https://bugs.webkit.org/show_bug.cgi?id=125273
        <rdar://problem/13205438>

        Reviewed by Simon Fraser.

        No new tests, just an optimization.

        Instead of throwing away decoded image data eagerly, allow the operating
        system to manage the memory via the standard purgeability mechanism,
        where it can.

        This improves the performance on some pathological cases (extremely large
        animated GIFs) by up to 8x.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        Don't prune live resources' decoded data if it is purgeable.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        Don't eagerly throw away decoded image data if it's purgeable.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::decodedDataIsPurgeable):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::decodedDataIsPurgeable):

2013-12-06  Antti Koivisto  <antti@apple.com>

        Save original text for RenderText to a map
        https://bugs.webkit.org/show_bug.cgi?id=125278

        Reviewed by Darin Adler.
        
        Currently the original text is fetched from the Text node. This is one of the few things 
        where we use the RenderText node pointer and is stopping Text nodes from being anonymous.
        
        It is very rare of original text to differ from the actual text so we can just squirrel the
        original to a map when it differs. This is also simplifies the code.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::updateDepth):
        * rendering/RenderText.cpp:
        (WebCore::originalTextMap):
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::~RenderText):
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::originalText):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::setText):
        * rendering/RenderText.h:
        * rendering/RenderTextFragment.cpp:
        * rendering/RenderTextFragment.h:

2013-12-04  Jer Noble  <jer.noble@apple.com>

        [MSE] Refactor MediaSourceBase back into MediaSource
        https://bugs.webkit.org/show_bug.cgi?id=125245

        Reviewed by Eric Carlson.

        Now that the legacy WebKitMediaSource has been removed, there is no reason to have
        a separate MediaSource and MediaSourceBase. Re-integrate the two.

        Copy all the methods from MediaSource into MediaSourceBase, and rename the class MediaSource:
        * Modules/mediasource/MediaSource.cpp: Copied from MediaSourceBase.cpp.
        (WebCore::MediaSource::create): Copied from MediaSource.cpp.
        (WebCore::MediaSource::addSourceBuffer): Ditto.
        (WebCore::MediaSource::removeSourceBuffer): Ditto.
        (WebCore::MediaSource::isTypeSupported): Ditto.
        (WebCore::MediaSource::eventTargetInterface): Ditto.
        (WebCore::MediaSource::sourceBufferDidChangeAcitveState): Ditto.
        * Modules/mediasource/MediaSource.h: Copied from MediaSourceBase.h.
        (WebCore::MediaSource::sourceBuffers): Copied from MediaSource.h.
        (WebCore::MediaSource::activeSourceBuffers): Copied from MediaSource.h.
        * Modules/mediasource/MediaSourceBase.cpp: Removed.
        * Modules/mediasource/MediaSourceBase.h: Removed.

        Change all references to MediaSourceBase into MediaSource:
        * Modules/mediasource/DOMURLMediaSource.cpp:
        (WebCore::DOMURLMediaSource::createObjectURL):
        * Modules/mediasource/DOMURLMediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::registerURL):
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:

        Remove MediaSourceBase.cpp/h from the project file:
        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

2013-12-06  Eric Carlson  <eric.carlson@apple.com>

        r159827 broke plug-in snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=125365

        Reviewed by Dean Jackson.

        No new tests, covered by existing tests.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Return early if there is NOT
            a page, not if there IS a page.

2013-12-06  Roger Fong <roger_fong@apple.com> and Brent Fulgham  <bfulgham@apple.com>

        [Win] Support compiling with VS2013
        https://bugs.webkit.org/show_bug.cgi?id=125353

        Reviewed by Anders Carlsson.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Use nullptr
        (WebCore::LegacyWebArchive::createFromSelection): Ditto

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation, MediaPlayerPrivateMediaSourceAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=123378

        Reviewed by Eric Carlson.

        Add an AVFoundation implementation of MediaPlayerPrivate which creates and uses
        MediaSourcePrivate and SourceBufferPrivate subclasses.

        Add the new media engine to the list of installed engines:
        * platform/MediaSample.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        * platform/graphics/MediaPlayer.h:

        Add the new files to the project:
        * WebCore.xcodeproj/project.pbxproj:

        Drive by fix for ports who implement seekDouble():
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekWithTolerance):

        Add new Video and AudioTrackPrivate types which handle their own enable state:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp: Added
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::AudioTrackPrivateMediaSourceAVFObjC):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::assetTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setEnabled):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h: Added
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.cpp: Added.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::VideoTrackPrivateMediaSourceAVFObjC):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::assetTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setSelected):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h: Added.

        Add a new MediaPlayerPrivate which can handle MediaSource objects:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: Added.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::create):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::getSupportedTypes):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareToPlay):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformMedia):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsScanning):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasVideo):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAudio):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startTimeDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initialTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seeking):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::networkState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::readyState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::maxTimeSeekableDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::minTimeSeekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::didLoadingProgress):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::movieLoadType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareForRendering):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::engineDescription):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::languageOfPrimaryAudioTrack):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::extraMemoryCost):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateDuration):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateStates):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setNetworkState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer):

        Add a new MediaSourcePrivate implementation:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h: Added.
        (WebCore::MediaSourcePrivateAVFObjC::player):
        (WebCore::MediaSourcePrivateAVFObjC::activeSourceBuffers):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm: Added.
        (WebCore::MediaSourcePrivateAVFObjC::create):
        (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::removeSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::duration):
        (WebCore::MediaSourcePrivateAVFObjC::setDuration):
        (WebCore::MediaSourcePrivateAVFObjC::markEndOfStream):
        (WebCore::MediaSourcePrivateAVFObjC::unmarkEndOfStream):
        (WebCore::MediaSourcePrivateAVFObjC::readyState):
        (WebCore::MediaSourcePrivateAVFObjC::setReadyState):
        (WebCore::MediaSourcePrivateAVFObjC::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MediaSourcePrivateAVFObjCHasAudio):
        (WebCore::MediaSourcePrivateAVFObjC::hasAudio):
        (WebCore::MediaSourcePrivateAVFObjCHasVideo):
        (WebCore::MediaSourcePrivateAVFObjC::hasVideo):
        (WebCore::MediaSourcePrivateAVFObjC::seekToTime):

        Add a new SourceBufferPrivate implementation:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: Added.
        (-[WebAVStreamDataParserListener initWithParser:parent:WebCore::]):
        (-[WebAVStreamDataParserListener dealloc]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
        (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]):
        (WebCore::MediaSampleAVFObjC::create):
        (WebCore::MediaSampleAVFObjC::~MediaSampleAVFObjC):
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC):
        (WebCore::MediaSampleAVFObjC::platformSample):
        (WebCore::CMSampleBufferIsRandomAccess):
        (WebCore::MediaSampleAVFObjC::flags):
        (WebCore::MediaDescriptionAVFObjC::create):
        (WebCore::MediaDescriptionAVFObjC::~MediaDescriptionAVFObjC):
        (WebCore::MediaDescriptionAVFObjC::MediaDescriptionAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::create):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferPrivateAVFObjC::didFailToParseStreamDataWithError):
        (WebCore::callProcessCodedFrameForEachSample):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):
        (WebCore::SourceBufferPrivateAVFObjC::didReachEndOfTrackWithTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::setClient):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource):
        (WebCore::SourceBufferPrivateAVFObjC::readyState):
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState):
        (WebCore::SourceBufferPrivateAVFObjC::evictCodedFrames):
        (WebCore::SourceBufferPrivateAVFObjC::isFull):
        (WebCore::SourceBufferPrivateAVFObjC::hasVideo):
        (WebCore::SourceBufferPrivateAVFObjC::hasAudio):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::createNonDisplayingCopy):
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::setActive):
        (WebCore::SourceBufferPrivateAVFObjC::fastSeekTimeForMediaTime):
        (WebCore::SourceBufferPrivateAVFObjC::seekToTime):
        * platform/mac/PlatformClockCM.h:

        Add a SOFT_LINK_CLASS_OPTIONAL macro:
        * platform/mac/SoftLinking.h:

2013-12-06  Alexey Proskuryakov  <ap@apple.com>

        Remove some duplicate checks from SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=125358

        Reviewed by Geoffrey Garen.

        There is no need to call inherits() before WebCore's toXXX(JSValue) functions.

        Also, the result of toArrayBuffer() is a raw pointer, not a RefPtr (it's confusing
        because toArrayBufferView returns a RefPtr).

        * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneSerializer::dumpIfTerminal):

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        Remove Image::decodedSize()
        https://bugs.webkit.org/show_bug.cgi?id=125327

        Reviewed by Simon Fraser.

        Missed a comment when removing this code.

        * svg/graphics/SVGImage.h:

2013-12-06  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] ShapeOutsideInfo needs to use the parent's writing mode when calculating offsets
        https://bugs.webkit.org/show_bug.cgi?id=124680

        Reviewed by Dirk Schulze.

        Do not take the writing-mode property on the float into account for shape-outside.
        Add a virtual method writingMode() in order to do this for shape-outside but
        keep old behavior (element writingMode) for shape-inside.

        Change existing test floats/shape-outside-floats-different-writing-modes.html to test the
        new behavior.

        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::writingMode):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::writingMode):
        * rendering/shapes/ShapeOutsideInfo.h:

2013-12-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Staging Workaround
        https://bugs.webkit.org/show_bug.cgi?id=125354

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspector.py:

2013-12-06  Joseph Pecoraro  <pecoraro@apple.com>

        Simplify ScriptFunctionCall by removing dead code.
        https://bugs.webkit.org/show_bug.cgi?id=125274

        Reviewed by Timothy Hatcher.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/js/ScriptFunctionCall.h:

2013-12-06  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/rendering changes
        https://bugs.webkit.org/show_bug.cgi?id=125239

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::previousOnLineExists): Added.
        * rendering/InlineBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionBackground): Modified to query RenderStyle
        on iOS for the composition fill color. Added FIXME to make this platform-independent.
        (WebCore::InlineTextBox::paintDecoration): Added iOS-specific decoration code.
        (WebCore::lineStyleForMarkerType):
        (WebCore::InlineTextBox::paintDocumentMarkers): Added iOS-specific code. Also, added
        FIXME to make this code platform-independent.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): Ditto.
        (WebCore::positionForPointRespectingEditingBoundaries): Added iOS-specific code.
        * rendering/RenderBlock.h: Changed access control of logical{Left, Right}SelectionOffset()
        from private to protected so that these methods can be used from RenderImage::collectSelectionRects().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderRadii): Added.
        (WebCore::RenderBox::paintBoxDecorations): Added iOS-specific workaround. See <rdar://problem/6209763>
        for more details.
        (WebCore::RenderBox::computeRectForRepaint): Added iOS-specific code. 
        (WebCore::customContainingBlockWidth): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockLogicalWidth): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockLogicalHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockAvailableLogicalHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderBox::availableLogicalHeightUsing): Added iOS-specific code; calls customContainingBlockAvailableLogicalHeight().
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Added iOS-specific code; calls customContainingBlockLogicalWidth().
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned): Added iOS-specific code; calls customContainingBlockLogicalHeight().
        (WebCore::RenderBox::layoutOverflowRectForPropagation): Added iOS-specific code.
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::layout): Added; iOS-specific. Includes FIXME comment.
        See <rdar://problem/7675493> for more details.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange): Added iOS-specific code.
        (WebCore::RenderElement::styleDidChange): Modified to only call areCursorsEqual() and
        EventHandler::scheduleCursorUpdate() on a non-iOS port.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing): Added iOS-specific code.
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReason): This method has an empty implementation for iOS.
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReasonWithDescription): Ditto.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeHeight):
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Added iOS-specific code.
        (WebCore::RenderFileUploadControl::paintObject): Ditto.
        (WebCore::RenderFileUploadControl::fileTextValue): Ditto.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::positionFrames): Ditto; Also added FIXME comment as this code may not
        be specific to iOS.
        * rendering/RenderIFrame.h: Added iOS-specific workaround to RenderObject::renderName(). Added
        FIXME comment to determine whether this workaround is still applicable.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderImage::paintAreaElementFocusRing): This method has an empty implementation for iOS.
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteQuadsForSelection): Added; guarded by PLATFORM(IOS).
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Added iOS-specific member initialization.
        (WebCore::RenderLayer::~RenderLayer): Added iOS-specific code.
        (WebCore::RenderLayer::willBeDestroyed): Added; iOS-specific.
        (WebCore::RenderLayer::hasAcceleratedTouchScrolling): Ditto.
        (WebCore::RenderLayer::handleTouchEvent): Ditto.
        (WebCore::RenderLayer::registerAsTouchEventListenerForScrolling): Ditto.
        (WebCore::RenderLayer::unregisterAsTouchEventListenerForScrolling): Ditto.
        (WebCore::RenderLayer::updateNeedsCompositedScrolling): Added iOS-specific code as we use UIKit
        to composite our scroll bars.
        (WebCore::RenderLayer::scrollTo): Added iOS-specific code.
        (WebCore::RenderLayer::scrollRectToVisible): Ditto.
        (WebCore::RenderLayer::styleChanged): Modified to make use of the passed StyleDifference on iOS.
        (WebCore::RenderLayer::visibleContentRect): Added; iOS-specific.
        (WebCore::RenderLayer::didStartScroll): Ditto.
        (WebCore::RenderLayer::didEndScroll): Ditto.
        (WebCore::RenderLayer::didUpdateScroll): Ditto.
        (WebCore::RenderLayer::invalidateScrollbarRect): Added iOS-specific code.
        (WebCore::RenderLayer::invalidateScrollCornerRect): Ditto.
        (WebCore::RenderLayer::verticalScrollbarWidth): Ditto.
        (WebCore::RenderLayer::horizontalScrollbarHeight): Ditto.
        (WebCore::RenderLayer::updateScrollableAreaSet): Ditto.
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Add iOS-specific workaround with FIXME. See
        <rdar://problem/15579797> for more details.
        (WebCore::RenderLayer::paintOverflowControls): Added iOS-specific code.
        (WebCore::RenderLayer::calculateClipRects): Ditto.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Modified to not apply page scale on iOS
        as we apply a page scale at a different time in the code.
        (WebCore::RenderLayerBacking::layerWillBeDestroyed): Added; guarded by PLATFORM(IOS).
        (WebCore::layerOrAncestorIsTransformedOrScrolling): Added iOS-specific variant with FIXME comment.
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds): Added iOS-specific code.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Ditto.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Ditto.
        (WebCore::RenderLayerBacking::registerScrollingLayers): Ditto.
        (WebCore::RenderLayerBacking::updateScrollingLayers): Ditto.
        (WebCore::RenderLayerBacking::containsPaintedContent): Call RenderLayer::hasBoxDecorationsOrBackground()
        when building on iOS Simulator.
        (WebCore::RenderLayerBacking::parentForSublayers): Added iOS-specific code and FIXME comment.
        (WebCore::RenderLayerBacking::paintsIntoWindow): Opt-into coordinated graphics code path.
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Added iOS-specific code.
        (WebCore::RenderLayerBacking::paintIntoLayer): Compile-out ASSERT_NOT_REACHED for iOS and added FIXME comment.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlush): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::chromeClient): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Added iOS-specific code.
        (WebCore::scrollbarHasDisplayNone): Added; iOS-specific.
        (WebCore::updateScrollingLayerWithClient): Ditto.
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush): Ditto.
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::didChangeVisibleRect): Ditto.
        (WebCore::RenderLayerCompositor::addToOverlapMap): Don't apply page scale factor on iOS. We apply
        the page scale factor at a different time in the code. Also, added FIXME comment.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Added iOS-specific workaround.
        See <rdar://problem/8348337> for more details.
        (WebCore::RenderLayerCompositor::setIsInWindow): Use non-Mac code path for iOS.
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Ditto.
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Ditto.
        (WebCore::RenderLayerCompositor::reasonsForCompositing): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation): Opt-into calling
        AnimationController::isRunningAnimationOnRenderer() on iOS.
        (WebCore::RenderLayerCompositor::requiresCompositingForScrolling): Added; guarded by PLATFORM(IOS).
        (WebCore::isStickyInAcceleratedScrollingLayerOrViewport): Added iOS-specific code.
        (WebCore::isViewportConstrainedFixedOrStickyLayer): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles): Ditto.
        (WebCore::RenderLayerCompositor::ensureRootLayer): Ditto.
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints): Ditto.
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer): This method has an empty implementation for iOS
        as we batch update viewport-constrained layers in the iOS-specific method, RenderLayerCompositor::updateCustomLayersAfterFlush().
        (WebCore::RenderLayerCompositor::unregisterViewportConstrainedLayer): Ditto.
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers): Ditto.
        (WebCore::RenderLayerCompositor::registerAllScrollingLayers): Ditto.
        (WebCore::RenderLayerCompositor::unregisterAllScrollingLayers): Ditto.
        (WebCore::RenderLayerCompositor::scrollingLayerAddedOrUpdated): Ditto.
        (WebCore::RenderLayerCompositor::scrollingLayerRemoved): Ditto.
        (WebCore::RenderLayerCompositor::startInitialLayerFlushTimerIfNeeded): Ditto.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.h: Added iOS-specific Clang workaround to ignore
        an unused private field.
        * rendering/RenderMenuList.cpp:
        (WebCore::selectedOptionCount): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderMenuList::RenderMenuList): On iOS we don't make use of RenderMenuList::m_popupIsVisible.
        (WebCore::RenderMenuList::~RenderMenuList): On iOS we don't make use of RenderMenuList::m_popup.
        (WebCore::RenderMenuList::adjustInnerStyle): Add iOS-specific code.
        (RenderMenuList::updateFromElement): On iOS we don't make use of RenderMenuList::m_popup.
        (RenderMenuList::setTextFromOption): Add iOS-specific code.
        (RenderMenuList::showPopup): Define RenderMenuList::showPopup() to ASSERT_NOT_REACHED() on iOS as
        we don't make use of RenderMenuList::m_popup.
        (RenderMenuList::hidePopup): This method has an empty implementation for iOS as we don't make use
        of RenderMenuList::m_popup.
        (RenderMenuList::popupDidHide): This method has an empty implementation for iOS as we don't make use
        of RenderMenuList::m_popupIsVisible.
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::columnNumberForOffset): Added; guarded by PLATFORM(IOS). Also, added a FIXME comment to
        make this function return an unsigned integer instead of a signed integer.
        (WebCore::RenderObject::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderObject::destroy): Added iOS-specific code.
        (WebCore::RenderObject::innerLineHeight): Added.
        (WebCore::RenderObject::willRenderImage): Added iOS-specific code.
        * rendering/RenderObject.h: Change the access control of RenderObject::drawLineForBoxSide() from protected to
        public so that it can be used from RenderThemeIOS::adjustMenuListButtonStyle().
        (WebCore::RenderObject::absoluteQuadsForSelection):
        * rendering/RenderScrollbar.h: Change the access control of RenderScrollbar::getScrollbarPseudoStyle() from
        private to public so that it can be used from the iOS-specific static function, scrollbarHasDisplayNone,
        defined in RenderLayerCompositor.cpp.
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::itemText): Added iOS-specific code.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderText::setTextInternal): Added iOS-specific code.
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle): Ditto.
        (WebCore::RenderTextControl::canScroll): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderTextControl::innerLineHeight): Ditto.
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAvgCharWidth): Compile-out code when building for iOS.
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle): Added iOS-specific code.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): Ditto.
        (WebCore::RenderTextControlSingleLine::getAvgCharWidth): Compile-out code when building for iOS.
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth): Ditto.
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::lineDirectionPointFitsInBox): Ditto.
        (WebCore::RenderTextLineBoxes::positionForPoint): Added iOS-specific code.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly): Ditto.
        (WebCore::RenderTheme::paintDecorations): Modified to call the control-specific paint*Decorations().
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintCheckboxDecorations): Added.
        (WebCore::RenderTheme::paintRadioDecorations): Added.
        (WebCore::RenderTheme::paintButtonDecorations): Added.
        (WebCore::RenderTheme::paintTextFieldDecorations): Added.
        (WebCore::RenderTheme::paintTextAreaDecorations): Added.
        (WebCore::RenderTheme::paintMenuListDecorations): Added.
        (WebCore::RenderTheme::paintPushButtonDecorations): Added.
        (WebCore::RenderTheme::paintSquareButtonDecorations): Added.
        (WebCore::RenderTheme::paintFileUploadIconDecorations): Added.
        (WebCore::RenderTheme::paintSliderThumbDecorations): Added.
        (WebCore::RenderTheme::paintSearchFieldDecorations): Added.
        * rendering/RenderThemeIOS.h: Added.
        * rendering/RenderThemeIOS.mm: Added.
        * rendering/RenderThemeMac.h: Don't compile the contents of this file when building for iOS.
        * rendering/RenderThemeMac.mm: Ditto.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize): Compile-out code when building for iOS.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight): Add iOS-specific workaround. See <rdar://problem/7166808>.
        (WebCore::fixedPositionOffset): Added; used in iOS-specific code (e.g. RenderView::mapLocalToContainer()).
        (WebCore::RenderView::mapLocalToContainer): Use WebCore::fixedPositionOffset() instead of 
        FrameView::scrollOffsetForFixedPosition().
        (WebCore::RenderView::pushMappingToContainer): Ditto.
        (WebCore::RenderView::mapAbsoluteToLocalPoint): Ditto.
        (WebCore::RenderView::repaintViewRectangle): Ditto.
        (WebCore::RenderView::computeRectForRepaint): Ditto.
        (WebCore::isFixedPositionInViewport): Added; used in RenderView::hasCustomFixedPosition().
        (WebCore::RenderView::hasCustomFixedPosition): Added; guarded by PLATFORM(IOS).
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed): Added iOS-specific code.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox): Ditto.
        * rendering/break_lines.cpp: Only include header <CoreServices/CoreServices.h> when building for Mac.

2013-12-06  Zoltan Horvath  <zoltan@webkit.org>

        Clean up the includes of RenderBlock.h 
        https://bugs.webkit.org/show_bug.cgi?id=125351

        Reviewed by Darin Adler.

        I turned some header includes into forward declarations. I also removed / 
        moved out some includes, which don't belong to RenderBlock.h anymore.

        No new tests, no behavior change.

        * editing/VisibleUnits.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        * html/TextFieldInputType.cpp:
        * html/TextInputType.cpp:
        * rendering/InlineElementBox.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/line/LineBreaker.h:
        * rendering/line/LineWidth.cpp:

2013-12-06  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Define SHA1 hash size in SHA1.h and use it at various places.
        https://bugs.webkit.org/show_bug.cgi?id=125345

        Reviewed by Darin Adler.

        Use SHA1::hashSize instead of local variables.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-12-06  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add load delegate methods for responding to authentication challenges
        https://bugs.webkit.org/show_bug.cgi?id=125333

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported core(NSURLCredential *).

2013-12-06  Daniel Bates  <dabates@apple.com>

        Rename {adjust, paint}SearchFieldDecoration, {adjust, paint}SearchFieldResultsDecoration
        https://bugs.webkit.org/show_bug.cgi?id=125191

        Reviewed by Joseph Pecoraro.

        Towards upstreaming the iOS concept of render theme decorations, we should rename
        RenderTheme::{adjust, paint}SearchFieldDecorationStyle and RenderTheme::{adjust, paint}SearchFieldResultsDecoration
        to avoid ambiguity with the iOS concept.

        * platform/efl/RenderThemeEfl.cpp:
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWinCE.cpp:
        * rendering/RenderThemeWinCE.h:

2013-12-06  Andreas Kling  <akling@apple.com>

        Make remaining CSSValue constructors return PassRef.
        <https://webkit.org/b/125337>

        Tweak the remaining CSSValue create() helpers to return PassRef
        instead of PassRefPtr in the cases where nullptr is never returned.

        Reviewed by Anders Carlsson.

2013-12-06  Roger Fong  <roger_fong@apple.com>

        Hook into some shader symbol logic following the ANGLE update in r159533.
        https://bugs.webkit.org/show_bug.cgi?id=125332.

        Reviewed by Brent Fulgham.

        No new functionality added.

        * html/canvas/WebGLRenderingContext.cpp: Add some error checking for errors related to 
            shader symbols that exist across both vertex and fragment shaders.
        (WebCore::WebGLRenderingContext::linkProgram):
        * platform/graphics/ANGLEWebKitBridge.cpp: Add logic for handling varyings 
            and add new fields to the ANGLEShaderSymbol struct.
        (WebCore::getSymbolInfo):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h: Add those same fields to the SymbolInfo struct 
            as well so that we can access them from our shader source map.
            Also add a map of varyings along side the uniforms and attributes.
        (WebCore::GraphicsContext3D::SymbolInfo::SymbolInfo):
        (WebCore::GraphicsContext3D::ShaderSourceEntry::symbolMap):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::areProgramSymbolsValid): Will be filled in later, this method 
            will use the shader source map to check for issues with unused varyings and precisions 
            mismatches of shader symbols that exist across both the vertex and fragment shaders.

2013-12-06  Lukasz Gajowy  <l.gajowy@samsung.com>

        [ATK] Missing aria roles mappings
        https://bugs.webkit.org/show_bug.cgi?id=117729

        Reviewed by Mario Sanchez Prada.

        Added a few mappings from ARIA roles to ATK roles.

        Test: accessibility/aria-mappings.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-11-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webkitwebaudiosrc element needs to emit stream-start, caps and segment events
        https://bugs.webkit.org/show_bug.cgi?id=123015

        Reviewed by Martin Robinson.

        When the source element starts emitting buffers send along various
        events to notify downstream elements.

        No new tests, change covered by existing webaudio tests.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init): Initialize segment.
        (webKitWebAudioSrcConstructed): Give an explicit name to each
        queue added in front of the interleave element.
        (webKitWebAudioSrcLoop): Before sending the first buffers push
        stream-start, caps and segment events on each queue's sinkpad.

2013-12-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Audio/Video sink management is incoherent
        https://bugs.webkit.org/show_bug.cgi?id=125304

        Reviewed by Gustavo Noronha Silva.

        Allow subclasses of MediaPlayerPrivateGStreamerBase to create
        custom audio/video sinks in a coherent manner using
        create{Audio,Video}Sink methods. Convenience getters are also
        available. Also removed some un-needed member variables in the
        playbin-based player.

        No new tests, existing media tests cover this change.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::audioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::createAudioSink):

2013-12-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce IMAGE_TYPE_CASTS, and use it
        https://bugs.webkit.org/show_bug.cgi?id=125330

        Reviewed by Ryosuke Niwa.

        As a step to use TYPE_CASTS_BASE, this cl introduce IMAGE_TYPE_CASTS.
        BitmapImage and SVGImage can use it to generate toFoo() type case helper functions.

        No new tests, no behavior changes.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::resumeAnimatingImagesForLoader):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * svg/graphics/SVGImage.h:

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        Clean up the forwarding headers of RenderBlock.h
        https://bugs.webkit.org/show_bug.cgi?id=125323

        Reviewed by Ryosuke Niwa.

        In this patch, I removed the unnecessary forwarding headers from RenderBlock.h, and moved some to RenderBlockFlow.h.

        No new tests, no behavior change.

        * rendering/RenderBlock.h: Remove unnecessary forwarding headers.
        * rendering/RenderBlockFlow.h: Moved some forwarding headers from RenderBlock.h

2013-12-04  Oliver Hunt  <oliver@apple.com>

        Refactor static getter function prototype to include thisValue in addition to the base object
        https://bugs.webkit.org/show_bug.cgi?id=124461

        Reviewed by Geoffrey Garen.

        Change bindings codegen to produce static getter functions
        with the correct types.  Also update the many custom implementations
        to the new type.

        No change in behaviour.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-05  Tim Horton  <timothy_horton@apple.com>

        Remove Image::decodedSize()
        https://bugs.webkit.org/show_bug.cgi?id=125327

        Reviewed by Sam Weinig.

        No new tests, just removing dead code.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::resetAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:

2013-12-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160133.
        http://trac.webkit.org/changeset/160133
        https://bugs.webkit.org/show_bug.cgi?id=125325

        broke bindings tests on all the bots (Requested by thorton on
        #webkit).

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-05  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove 'cookiesString' output from Page.getCookies
        https://bugs.webkit.org/show_bug.cgi?id=125268

        Reviewed by Timothy Hatcher.

        Remove 'cookiesString' output from Page.getCookies protocol.
        It is no longer meaningful because it is an unused parameter.

        No new tests, no behavior change.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:

2013-12-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: expose node and frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124326

        Reviewed by Joseph Pecoraro.

        This adds snapshotRect() and snapshotNode() to the Page domain.
        Both methods create snapshots using FrameSnapshotting APIs
        and send images to the inspector frontend as a data URL.

        Remove the unimplemented Page.captureScreenshot API.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::snapshotNode): Added.
        (WebCore::InspectorPageAgent::snapshotRect): Added.
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json: Added new protocol APIs.

2013-12-04 Bear Travis <betravis@adobe.com>

    [CSS Shapes] Enable CSS Shapes on Windows
    https://bugs.webkit.org/show_bug.cgi?id=89957

    Reviewed by Brent Fulgham.

    * css/CSSPropertyNames.in: Tweak to ensure shapes properties are regenerated.

2013-12-05  Roger Fong  <roger_fong@apple.com>

        [WebGL] Make sure we satisfy uniform and varying packing restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=125124.
        <rdar://problem/15203291>

        Reviewed by Brent Fulgham.

        Tests covered by WebGL Khronos conformance tests:
        webgl/1.0.2/conformance/glsl/misc/shader-uniform-packing-restrictions.html
        webgl/1.0.2/conformance/glsl/misc/shader-varying-packing-restrictions.html

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

2013-12-05  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        32bit buildfix after r160151
        https://bugs.webkit.org/show_bug.cgi?id=125298

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleDataReceived):

2013-12-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Cropping and drawing ImageBuffers results in uninitialized data being shown
        https://bugs.webkit.org/show_bug.cgi?id=125271

        Reviewed by Simon Fraser.

        createCroppedImageIfNecessary() crops to the bottom left of the ImageBuffer
        backing store instead of the top left. In addition, ImageBuffer::draw()
        draws the entire ImageBuffer's backing store instead of just the relevant
        portion of it.

        No new tests are necessary because the existing tests already test this
        functionality

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createCroppedImageIfNecessary): Crop to the top left of the
        backing store 
        (WebCore::ImageBuffer::draw): Draw only the logical portion of the
        backing store 

2013-12-05  Joseph Pecoraro  <pecoraro@apple.com>

        Remove stale ScriptGlobalObject methods
        https://bugs.webkit.org/show_bug.cgi?id=125276

        Reviewed by Sam Weinig.

        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptObject.h:

2013-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        Change how the form element pointer affects parsing template elements, to reduce weirdness in templates
        https://bugs.webkit.org/show_bug.cgi?id=125279

        Reviewed by Antti Koivisto.

        Faithfully update the HTML5 parser after http://html5.org/tools/web-apps-tracker?from=8330&to=8331.

        Test: fast/dom/HTMLTemplateElement/no-form-association-2.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLFormElement): Don't the form element pointer if the context
        element or its ancestor is a template element.
        (WebCore::HTMLConstructionSite::insideTemplateElement): Added.
        (WebCore::HTMLConstructionSite::createHTMLElement): Renamed openElementsContainTemplateElement to
        insideTemplateElement to reflect the true semantics of the boolean.

        * html/parser/HTMLConstructionSite.h:

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody): Ignore the form element pointer if there
        is a template element on the stack of open elements. This faithfully reflects what's being said in the
        specification. We should probably make isParsingTemplateContents more efficient by storing a boolean
        and then wrap from() in some helper function but that should probbaly happen in a separate patch.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInBody): Don't unset or rely on the form element pointer
        when there is a template element on the stack of open elements.

        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::isParsingTemplateContents): Added a trivial implementation for when
        TEMPLATE_ELEMENT is disabled.
        (WebCore::HTMLTreeBuilder::isParsingFragmentOrTemplateContents): Merged two implementations.

2013-12-05  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [MediaStream] Firing negotiationneeded event upon track add/remove on MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=125243

        Reviewed by Eric Carlson.

        Spec states that: In particular, if an RTCPeerConnection object is consuming a MediaStream on which a track is
        added, by, e.g., the addTrack() method being invoked, the RTCPeerConnection object must fire the
        "negotiationneeded" event. Removal of media components must also trigger "negotiationneeded".

        Existing tests updated.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::addObserver):
        (WebCore::MediaStream::removeObserver):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::~RTCPeerConnection):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::didAddOrRemoveTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::addStream):

2013-12-05  Beth Dakin  <bdakin@apple.com>

        Bad repaints on twitter when the tile cache has a margin
        https://bugs.webkit.org/show_bug.cgi?id=125263
        -and corresponding-
        <rdar://problem/15576884>

        Reviewed by Tim Horton.

        When tiles that used to be margin tiles become real-content tiles, they need to be 
        invalidated.

        Two new helper functions will make it so that we don’t have to manually factor out 
        the margin from the bounds in more than one place in the code.
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::boundsWithoutMargin):
        (WebCore::TileController::boundsAtLastRevalidateWithoutMargin):

         Here is one existing place where we used to factor out the margin, but now we can 
        call boundsWithoutMargin().
        (WebCore::TileController::adjustRectAtTileIndexForMargin):

        And here is where we invalidate the formerly-margin tiles.
        (WebCore::TileController::revalidateTiles):

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        Remove the forward declaration of BidiContext class from RenderBlock.h
        https://bugs.webkit.org/show_bug.cgi?id=125265

        Reviewed by Csaba Osztrogonác.

        No new tests, no behavior change.

        * rendering/RenderBlock.h: BidiContext is not used in RenderBlock.h

2013-12-05  Aloisio Almeida Jr  <aloisio.almeida@openbossa.org>

        [Cairo] Avoid extra copy when drawing images
        https://bugs.webkit.org/show_bug.cgi?id=124209

        Reviewed by Carlos Garcia Campos.

        This commit applies some changes proposed after the original patch has
        been landed. It fixes the logic to create the subsurface (as it was
        inverted). It also remove an unnecessary RefPtr variable to hold the
        subsurface.

        No new tests. It's an enhancement. Already covered by existing tests.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Fix inset when only a subset of the arguments are defined
        https://bugs.webkit.org/show_bug.cgi?id=125277

        Reviewed by David Hyatt.

       I thought Length's default value is fixed-0, but actually it's auto-0. For the optional arguments
       of inset shape, we need to use fixed-0, so I updated the code and the tests to use that explicitly.

        No new tests, I updated the old ones.

        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not use deprecated gtk-doc 'Rename to' tag
        https://bugs.webkit.org/show_bug.cgi?id=125303

        Reviewed by Philippe Normand.

        GObject introspection rename-to annotation is available in
        since version 0.6.3 so we should use that instead.

        * bindings/gobject/WebKitDOMEventTarget.h:

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing symbols to WebKitDOMDeprecated.symbols
        https://bugs.webkit.org/show_bug.cgi?id=125300

        Reviewed by Philippe Normand.

        Add webkit_dom_html_element_get_id and
        webkit_dom_html_element_set_id to the symbols files.

        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings symbols file after r159711.

        * bindings/gobject/webkitdom.symbols:

2013-12-05  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move platform sources free of layering violations under libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=117509

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.list.am: Move additional source files located in the platform layer under libPlatform.
        All moved sources are free of layering violations and thus ready for the migration.

2013-12-05  László Langó  <lango@inf.u-szeged.hu>

        Remove bridge/testqtbindings.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=125287

        Reviewed by Alexey Proskuryakov.

        * bridge/testqtbindings.cpp: Removed. There is no QT anymore.
        We don't need this file.

2013-12-04  Gurpreet Kaur  <k.gurpreet@samsung.com>

        % unit heights don't work if parent block height is set in vh
        https://bugs.webkit.org/show_bug.cgi?id=118516

        Reviewed by Simon Fraser.

        From Blink r156449 by <srinivasa.ragavan.venkateswaran@intel.com>

        An element having height as percentage needs to have the
        containingblock's height or availableheight to calculate its
        own height. The containing block having a height set in vh
        unit was not being considered for calculating the child's
        height.

        Tests: fast/css/viewport-percentage-compute-box-height.html
               fast/css/viewport-percentage-compute-box-width.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        Correct child's height(in pecentage) was not being calculated
        incase of parent having height set in vh unit. Added condition
        to calculate the containing block height in terms of viewport size.

2013-12-04  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix. Copy headers from rendering/line to build directory.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2013-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        bgColor, setBgColor, alinkColor, setAlinkColor, and etc... on HTMLBodyElement are useless
        https://bugs.webkit.org/show_bug.cgi?id=125208

        Rubber-stamped by Anders Carlsson.

        Address Darin's comment to use fastGetAttribute instead of getAttribute.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::vlinkColor):

2013-12-04  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Darin Adler.

        Various snapshot creation methods had duplicated code and were split
        between Frame, DragImage, and platform-specific implementationss.
        This patch puts WebCore snapshot methods into FrameSnapshotting
        and removes platform implementations where possible.

        DragImage methods reuse snapshot methods where possible. Inspector
        will be able to take snapshots without using drag images.

        No new tests, this is a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Added.
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::snapshotFrameRect): Move most buffer logic to here.
        (WebCore::snapshotSelection): Moved from Frame.
        (WebCore::snapshotNode): Moved from Frame.
        * page/FrameSnapshotting.h: Added.
        * page/mac/FrameMac.mm: Removed.
        * page/mac/FrameSnapshottingMac.h: Removed.
        * page/mac/FrameSnapshottingMac.mm: Removed.
        * page/win/FrameWin.cpp: remove duplicate implementation.
        * page/win/FrameWin.h: Fix an incorrect parameter name.
        * platform/DragImage.cpp:
        (WebCore::ScopedNodeDragState::ScopedNodeDragState):
        (WebCore::ScopedNodeDragState::~ScopedNodeDragState):
        (WebCore::createDragImageFromSnapshot): Boilerplate buffer conversion.
        (WebCore::createDragImageForNode):
        (WebCore::createDragImageForSelection):
        (WebCore::ScopedFrameSelectionState::ScopedFrameSelectionState):
        (WebCore::ScopedFrameSelectionState::~ScopedFrameSelectionState):
        (WebCore::createDragImageForRange): Moved from Frame.
        (WebCore::createDragImageForImage): Moved from FrameSnapshottingMac.
        (WebCore::createDragImageForLink): use nullptr.

2013-12-04  Benjamin Poulain  <bpoulain@apple.com>

        Remove spaces on a blank line to have ResourceHandleCFNet.cpp identical to iOS

        Unreviewed.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):

2013-12-04  Antti Koivisto  <antti@apple.com>

        Move pseudo element construction out from Element
        https://bugs.webkit.org/show_bug.cgi?id=125257

        Reviewed by Anders Carlsson.

        This is logically part of the style resolve/render tree construction. This will make future
        refactoring easier.

        * dom/Element.cpp:
        * dom/Element.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::beforeOrAfterPseudoElement):
        (WebCore::Style::setBeforeOrAfterPseudoElement):
        (WebCore::Style::clearBeforeOrAfterPseudoElement):
        (WebCore::Style::needsPseudeElement):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::resolveTree):

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Move TrailingObjects class into its own h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=124956

        Reviewed by David Hyatt.

        Since I moved space-ignoring inline functions into MidpointState in r160074,
        I can nicely separate TrailingObjects class from BreakingContextInlineHeader.h.
        This change improves the readability, and it's part of the RenderBlockLineLayout
        refactoring campaign, which is tracked under bug #121261.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        * rendering/line/TrailingObjects.cpp: Added.
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        * rendering/line/TrailingObjects.h: Added.
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):

2013-12-04  Oliver Hunt  <oliver@apple.com>

        Refactor static getter function prototype to include thisValue in addition to the base object
        https://bugs.webkit.org/show_bug.cgi?id=124461

        Reviewed by Geoffrey Garen.

        Change bindings codegen to produce static getter functions
        with the correct types.  Also update the many custom implementations
        to the new type.

        No change in behaviour.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Support inset for shape-outside
        <https://webkit.org/b/125112>

        Reviewed by David Hyatt.

        This patch adds inset support for shape-outside. Parsing has previously landed in r159968.
        Specification: http://dev.w3.org/csswg/css-shapes/#supported-basic-shapes

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-left.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-right.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-left.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-right.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset.html

        * platform/LengthSize.h:
        (WebCore::LengthSize::floatSize): Add conversion to FloatSize.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Handle inset case.

2013-12-04  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Support raster shape visualizations
        https://bugs.webkit.org/show_bug.cgi?id=124080

        Reviewed by Joseph Pecoraro.

        Create an inspector visualization for a shape created from an image.
        The visualization takes each line of the image, combining where possible.

        Test added to inspector-protocol/model/highlight-shape-outside.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::buildBoundsPath): Create a path representing the
        RasterShapeIntervals.
        * rendering/shapes/RasterShape.h:

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove explicit numbering from BasicShape::Type and CSSBasicShape::Type enums
        https://bugs.webkit.org/show_bug.cgi?id=125163

        Reviewed by Rob Buis.

        I don't see any reason to have explicit numbering for the Type enum in our [CSS]BasicShape classes.
        I removed numbering, which will decrease for instance the merge conflicts on Type changes.

        No new tests, no behavior change.

        * css/CSSBasicShapes.h:
        * rendering/style/BasicShapes.h:

2013-12-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to use an IOSurface that is larger than necessary
        https://bugs.webkit.org/show_bug.cgi?id=124626

        Reviewed by Simon Fraser.

        Because creating ImageBuffer's backing store can be so expensive, it
        would be beneficial to have a pool of pre-created backing stores
        available. However, this means that ImageBuffer might have to use a
        backing store that is larger than the exact dimensions that it needs.
        This patch adds a field, m_backingStoreSize, to CG's ImageBufferData
        class, and uses this new field when performing ImageBuffer operations
        to allow for larger-than-necessary backing stores. Content is always
        drawn in the top left corner of the backing store.

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

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::baseTransform): The base transform has to put
        content at the top left corner instead of bottom left
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createCroppedImageIfNecessary): Convenience function to figure out
        the dimensions of the backing texture in user space
        (WebCore::ImageBuffer::ImageBuffer): Set up new m_backingStoreSize member
        (WebCore::maybeCropToBounds): Some ImageBuffer API functions require
        outputting an image with logical size. This function performs the cropping
        (WebCore::ImageBuffer::copyImage): Updated for larger-than-necessary
        backing stores
        (WebCore::ImageBuffer::copyNativeImage): Ditto
        (WebCore::ImageBuffer::draw): Ditto
        (WebCore::ImageBuffer::clip): Ditto
        (WebCore::ImageBuffer::putByteArray): Ditto
        (WebCore::ImageBuffer::toDataURL): Ditto
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData): Ditto
        (WebCore::ImageBufferData::putData): Ditto
        * platform/graphics/cg/ImageBufferDataCG.h: New m_backingStoreSize field

2013-12-03  Dean Jackson  <dino@apple.com>

        [WebGL] Support for texImage2D of type HALF_FLOAT_OES
        https://bugs.webkit.org/show_bug.cgi?id=110936

        Reviewed by Brent Fulgham.

        Add support for the HALF_FLOAT_OES texture format from texImage2D
        and texSubImage2D.

        A lot of this patch comes from the original patch on the bug
        by Nayan Kumar, and the Blink commit:
        https://codereview.chromium.org/13842017

        Tests: fast/canvas/webgl/oes-texture-half-float-with-canvas.html
               fast/canvas/webgl/oes-texture-half-float-with-image.html
               fast/canvas/webgl/oes-texture-half-float-with-video.html

        * html/canvas/OESTextureHalfFloat.idl: New HALF_FLOAT_OES constant value.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFunc): Remove the code that
        would bail if half-float values were used.
        * platform/graphics/GraphicsContext3D.cpp:
        - Return appropriate DataFormats for half floating point types.
        - Copy the float -> half-float code from Blink
        - New pack functions for half floats
        * platform/graphics/GraphicsContext3D.h: New format types.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D): Use GL_HALF_FLOAT_ARB if we're passed
        a HALF_FLOAT_OES.

2013-12-04  Daniel Bates  <dabates@apple.com>

        Fix the Apple Windows build after <http://trac.webkit.org/changeset/160113>
        (https://bugs.webkit.org/show_bug.cgi?id=125193)

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Substitute paintInfo for i.

2013-12-04  Daniel Bates  <dabates@apple.com>

        Rename RenderTheme::paintMenuListButton()
        https://bugs.webkit.org/show_bug.cgi?id=125193

        Reviewed by Simon Fraser.

        Towards upstreaming the iOS concept of render theme decorations we should rename
        RenderTheme::paintMenuListButton() to RenderTheme::paintMenuListButtonDecorations()
        to better describe its purpose.

        Also, fix code style issues.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintMenuListButtonDecorations):
        * platform/blackberry/RenderThemeBlackBerry.h:
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMenuListButtonDecorations):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMenuListButtonDecorations):
        * platform/gtk/RenderThemeGtk.h:
        * platform/nix/RenderThemeNix.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintDecorations): Rename argument o, r to renderer and rect, respectively.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMenuListButtonDecorations):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations): Rename argument o, r to renderer and rect,
        respectively; also remove extraneous white space and substitute 1 for 1.0f.
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonDecorations): Ditto.
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Rename argument o, i, r to renderer, paintInfo, and rect,
        respectively.
        (WebCore::RenderThemeWin::paintMenuListButtonDecorations): Ditto.
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintMenuList): Ditto.
        (WebCore::RenderThemeWinCE::paintMenuListButtonDecorations): Ditto. 
        * rendering/RenderThemeWinCE.h:

2013-12-04  Andy Estes  <aestes@apple.com>

        [iOS] Build projects with $(ARCHS_STANDARD_32_64_BIT)
        https://bugs.webkit.org/show_bug.cgi?id=125236

        Reviewed by Sam Weinig.

        $(ARCHS_STANDARD_32_64_BIT) is what we want for both device and simulator builds.

        * Configurations/DebugRelease.xcconfig:

2013-12-04  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix attempt after r160099.

        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2013-12-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push Remote Inspector debugging connection management into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=124613

        Reviewed by Timothy Hatcher.

        Make a WebCore::Page a "Web" Remote Debuggable.

        * bindings/js/JSDOMGlobalObject.cpp:
        Disable JavaScript context inspection on JSGlobalObjects inside WebCore::Page's.

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::remoteInspectionAllowed):
        (WebCore::Page::setRemoteInspectionAllowed):
        (WebCore::Page::remoteInspectorInformationDidChange):
        * page/Page.h:
        * page/PageDebuggable.h:
        * page/PageDebuggable.cpp: Added.
        (WebCore::PageDebuggable::PageDebuggable):
        (WebCore::PageDebuggable::name):
        (WebCore::PageDebuggable::url):
        (WebCore::PageDebuggable::hasLocalDebugger):
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        (WebCore::PageDebuggable::dispatchMessageFromRemoteFrontend):
        (WebCore::PageDebuggable::setIndicating):
        Make a page a "Web" debuggable.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Misc.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::indicate):
        (WebCore::InspectorClient::hideIndicate):
        Forward indicate methods to WebKit clients.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        Push updates when remote debuggable information like the Page's
        URL or title change.

        * ForwardingHeaders/inspector/InspectorFrontendChannel.h:
        * inspector/InspectorForwarding.h:
        Re-export Inspector::InspectorFrontendChannel as WebCore::InspectorFrontendChannel
        to avoid needlessly updating code all over the place.

        * inspector/CodeGeneratorInspectorStrings.py:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * testing/Internals.cpp:
        Update include names.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        Make the "Inspect Element" context menu work correctly when there is a
        remote inspector instead of a local inspector.

2013-12-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add missing folders and files to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=124802

        Reviewed by Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj:

2013-12-04  José Dapena Paz  <jdapena@igalia.com>

        [texmap] Borders on rotating images are hidden/wrongly rendered with edge distance antialiasing
        https://bugs.webkit.org/show_bug.cgi?id=124653

        Reviewed by Noam Rosenthal.

        Texture mapper edge distance antialiasing texture sampling was causing
        borders to be shaded (and made them almost disappear in some cases).
        This was because calculation of sampling happened on vertex shader, so
        the border of the texture would go to the border of the inflation area.

        What algorithm should do is sampling the border pixel for all the
        inflation area (it is the closest pixel to all the samples in
        inflation area), and then use the standard sampling for the other
        parts of the texture.

        No new test because this is already covered by test
        transforms/3d/point-mapping/3d-point-mapping.html

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp: fix edge
        distance antialiasing texture sampling.

2013-12-04  László Langó  <lango@inf.u-szeged.hu>

        Typo fix after r160074 to fix debug builds.

        Reviewed by Csaba Osztrogonác.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::stopIgnoringSpaces):

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Move space-ignoring inline functions into MidpointState
        <https://webkit.org/b/124957>

        Reviewed by David Hyatt.

        Since:
         - The following inline functions were used only with a mandatory LineMidpointState argument:
           startIgnoringSpaces, stopIgnoringSpaces, ensureLineBoxInsideIgnoredSpaces, deprecatedAddMidpoint.
         - TrailingObjects class uses these functions. Since they're inline in BreakingContextInlineHeaders.h,
           it's hard to separate TrailingObjects into it's own file. (blocks bug #124956)
         I made these functions as a member of LineMidpointState, and I also updated the call sites.

        No new tests, no behavior change.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::startIgnoringSpaces):
        (WebCore::MidpointState::stopIgnoringSpaces):
        (WebCore::MidpointState::ensureLineBoxInsideIgnoredSpaces):
        (WebCore::MidpointState::deprecatedAddMidpoint):
        * rendering/RenderBlock.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):

2013-12-03  Zoltan Horvath  <zoltan@webkit.org>

        Remove BreakingContext's friendship from RenderBlockFlow
        <https://webkit.org/b/124958>

        Reviewed by David Hyatt.

        BreakingContext uses only 2 functions from RenderBlockFlow: insertFloatingObject/positionNewFloatOnLine. I added helper
        functions to LineBreaker, what is already a friend of RenderBlockFlow, so BreakingContext doesn't need to be anymore.
 
        No new tests, no behavior change.

        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleFloat):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::insertFloatingObject):
        (WebCore::LineBreaker::positionNewFloatOnLine):

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        bgColor, setBgColor, alinkColor, setAlinkColor, and etc... on HTMLBodyElement are useless
        https://bugs.webkit.org/show_bug.cgi?id=125208

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/49b1eeabbbf573d5271288c66d2b566cf33a09cf

        These member functions of HTMLBodyElement were only used by corresponding functions in HTMLDocument
        since they had the Reflect option specified in HTMLBodyElement.idl.

        Removed the functions and directly called getAttribute and setAttribute in relevant functions in
        HTMLDocument. The optimization to avoid assignment is no longer needed here since we've added that
        optimization to setAttributeInternal a while ago.

        * html/HTMLBodyElement.cpp:
        * html/HTMLBodyElement.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        * html/HTMLDocument.h:

2013-12-03  Andreas Kling  <akling@apple.com>

        Add a CSSProperty::isDirectionAwareProperty() helper.
        <https://webkit.org/b/125202>

        Move the block of case labels for checking whether a CSS property ID
        is a directional property into a separate function. Also removed an
        outdated comment about CSS variables.

        Reviewed by Antti Koivisto.

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the inadvertently committed change.

        * html/HTMLElement.idl:

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Remove nodeIsDetachedFromDocument and visualWordMovementEnabled in FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=125210

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/92409870f0ff8fafe31217830db0838a9e1ffb98

        Removed some unused code.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWasReplaced):
        * editing/FrameSelection.h:
        * page/Settings.in:

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Potential crash in RenderView::selectionBounds and RenderView::repaintSelection
        https://bugs.webkit.org/show_bug.cgi?id=125207

        Reviewed by Simon Fraser.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/f9e6e288a5aa959f05c374806121aaf0fc52d440

        Update style in FrameSelection instead of RenderView's member functions. These are the last two
        member functions of RenderView that updates the style.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::bounds):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::repaintSelection):

2013-12-03  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/125143> Improve the formatting in the generated Objective-C headers.

        Add a space between @property and any parenthesized attributes.
        Prefer strong over retain when specifying memory management semantics.

        Reviewed by Darin Adler.

        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetPropertyAttributes): Generate strong instead of retain. Include a
        space before the parenthesis.
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:

2013-12-03  Alexey Proskuryakov  <ap@apple.com>

        Update WebCrypto JWK mapping to newer proposal
        https://bugs.webkit.org/show_bug.cgi?id=124218

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/jwk-export-use-values.html
               crypto/subtle/jwk-import-use-values.html

        1. "extractable" renamed to "ext" in JWK.
        2. New values for "use" mapping, which can now be combined into comma separated lists,
        and cover all possible WebCrypto usages.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages):
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        (WebCore::processUseValue):
        (WebCore::JSCryptoKeySerializationJWK::addJWKUseToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):

2013-12-03  Simon Fraser  <simon.fraser@apple.com>

        Remove some iOS-related documentScale code
        https://bugs.webkit.org/show_bug.cgi?id=125194

        Reviewed by Enrica Casucci.

        Remove exports of nonexistent documentScale-related functions on Frame.

        * WebCore.exp.in:

2013-12-03  Eric Carlson  <eric.carlson@apple.com>

        Fix regression caused by r158599
        https://bugs.webkit.org/show_bug.cgi?id=125188

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::clearMediaPlayer): Do not clear m_player when PLUGIN_PROXY_FOR_VIDEO
            is enabled.

2013-12-03  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Updating WebCore files
        https://bugs.webkit.org/show_bug.cgi?id=124981

        Reviewed by Benjamin Poulain.

        Just to sync our github repo files and the trunk, as part of the upstream process

        No new tests needed.

        * PlatformNix.cmake:
        * css/mediaControlsNix.css:
        (audio):
        (video::-webkit-media-controls):
        (audio::-webkit-media-controls-enclosure, video::-webkit-media-controls-enclosure):
        (video::-webkit-media-controls-enclosure):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (video:-webkit-full-page-media):
        (audio:-webkit-full-page-media, video:-webkit-full-page-media):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-overlay-play-button, video::-webkit-media-controls-overlay-play-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (input[type="range"]::-webkit-media-slider-container):
        (input[type="range"]::-webkit-media-slider-container > div):
        (input[type="range"]::-webkit-media-slider-thumb):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-fullscreen-volume-slider, video::-webkit-media-controls-fullscreen-volume-slider):
        (audio::-webkit-media-controls-fullscreen-volume-min-button, video::-webkit-media-controls-fullscreen-volume-min-button):
        (audio::-webkit-media-controls-fullscreen-volume-max-button, video::-webkit-media-controls-fullscreen-volume-max-button):
        (video::-webkit-media-text-track-container):
        (video::cue):
        (video::-webkit-media-text-track-region):
        (video::-webkit-media-text-track-region-container):
        (video::-webkit-media-text-track-region-container.scrolling):
        (video::-webkit-media-text-track-display):
        (video::cue(:future)):
        (video::-webkit-media-text-track-container b):
        (video::-webkit-media-text-track-container u):
        (video::-webkit-media-text-track-container i):
        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * html/HTMLCanvasElement.h:
        * platform/Cursor.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/nix/AudioBusNix.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/graphics/GLContext.h:
        * platform/nix/CursorNix.cpp:
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/nix/GamepadsNix.cpp:
        (WebCore::sampleGamepads):
        * platform/nix/RenderThemeNix.cpp:
        (WebCore::toIntSize):
        (WebCore::toNixRect):
        (WebCore::RenderThemeNix::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformActiveTextSearchHighlightColor):
        (WebCore::RenderThemeNix::platformInactiveTextSearchHighlightColor):
        (WebCore::RenderThemeNix::platformFocusRingColor):
        (WebCore::RenderThemeNix::platformTapHighlightColor):
        (WebCore::RenderThemeNix::paintButton):
        (WebCore::RenderThemeNix::paintTextField):
        (WebCore::RenderThemeNix::paintCheckbox):
        (WebCore::RenderThemeNix::setCheckboxSize):
        (WebCore::RenderThemeNix::paintRadio):
        (WebCore::RenderThemeNix::setRadioSize):
        (WebCore::RenderThemeNix::paintMenuList):
        (WebCore::RenderThemeNix::paintProgressBar):
        (WebCore::RenderThemeNix::paintSliderTrack):
        (WebCore::RenderThemeNix::paintSliderThumb):
        (WebCore::RenderThemeNix::paintInnerSpinButton):
        (WebCore::RenderThemeNix::paintMeter):
        (WebCore::RenderThemeNix::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeNix::paintMediaPlayButton):
        (WebCore::RenderThemeNix::paintMediaMuteButton):
        (WebCore::RenderThemeNix::paintMediaSeekBackButton):
        (WebCore::RenderThemeNix::paintMediaSeekForwardButton):
        (WebCore::RenderThemeNix::paintMediaSliderTrack):
        (WebCore::RenderThemeNix::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeNix::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeNix::paintMediaRewindButton):
        * platform/nix/RenderThemeNix.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-12-03  Ralph Thomas  <ralpht@gmail.com>

        Typo: FixedPositionConstaint -> FixedPositionConstraint
        https://bugs.webkit.org/show_bug.cgi?id=125171

        Reviewed by Simon Fraser.

        No new tests, no change in behavior.

        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):

2013-12-03  Samuel White  <samuel_white@apple.com>

        AXPress event coordinates are always sent as (0, 0)
        https://bugs.webkit.org/show_bug.cgi?id=76677

        Reviewed by Simon Fraser.

        Set the coordinates of a simulated press equal to the center of the target
        element when the simulated press does not have a related mouse event.

        Test: accessibility/press-targets-center-point.html

        * dom/Element.cpp:
        (WebCore::Element::clientRect):
        (WebCore::Element::screenRect):
        * dom/Element.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::create):
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/MouseEvent.h:

2013-12-03  Dean Jackson  <dino@apple.com>

        [WebGL] Implement OES texture float linear
        https://bugs.webkit.org/show_bug.cgi?id=124871

        Reviewed by Brent Fulgham.

        Implement the OES_texture_float_linear extension. Generally
        we'd also enable OES_texture_half_float_linear at the same
        time, but that's blocked on webkit.org/b/110936.

        Test: fast/canvas/webgl/oes-texture-float-linear.html

        * CMakeLists.txt: Add new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Generate new file from IDL.
        * GNUmakefile.list.am: Add new files.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: New files for OESTextureFloatLinear.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Map the new name into the appropriate type.

        * html/canvas/OESTextureFloatLinear.cpp: Added. This is a very simple class
        that's mostly empty.
        (WebCore::OESTextureFloatLinear::OESTextureFloatLinear):
        (WebCore::OESTextureFloatLinear::~OESTextureFloatLinear):
        (WebCore::OESTextureFloatLinear::getName):
        (WebCore::OESTextureFloatLinear::create):
        * html/canvas/OESTextureFloatLinear.h: Added.
        * html/canvas/OESTextureFloatLinear.idl: Added.

        * html/canvas/WebGLExtension.h: Declare the new name in the enum of extensions.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawArrays): Call new name.
        (WebCore::WebGLRenderingContext::drawElements): Call new name.
        (WebCore::WebGLRenderingContext::getExtension): Create the new extension if asked.
        (WebCore::WebGLRenderingContext::checkTextureCompleteness): Renamed from handleNPOTTextures. Now
        checks for the type of the texture too.
        * html/canvas/WebGLRenderingContext.h: Member variable for new extension.

        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::needToUseBlackTexture): Takes an extra parameter which indicates
        if it has an extension enabled.
        (WebCore::WebGLTexture::update): Note it is a float type when updating.
        * html/canvas/WebGLTexture.h: New flag to indicate float type.

        * platform/graphics/Extensions3D.h: New flag type.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): Add a comment about the extension.

2013-12-03  Alexey Proskuryakov  <ap@apple.com>

        Support exporting private WebCrypto RSA keys
        https://bugs.webkit.org/show_bug.cgi?id=124483

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/rsa-export-private-key.html

        It might be better to have our own bignum implementation in WTF, but we currently
        don't, and the need for this computation is Common Crypto specific anyway.

        * crypto/CommonCryptoUtilities.h:
        * crypto/CommonCryptoUtilities.cpp:
        (WebCore::CCBigNum::CCBigNum):
        (WebCore::CCBigNum::~CCBigNum):
        (WebCore::CCBigNum::operator=):
        (WebCore::CCBigNum::data):
        (WebCore::CCBigNum::operator-):
        (WebCore::CCBigNum::operator%):
        (WebCore::CCBigNum::inverse):
        Added a minimal wrapper around CommonCrypto BigNum.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPrivateKeyComponents): Compute missing parts using CCBigNum.
        (WebCore::CryptoKeyRSA::exportData): Implemented private key case.

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        XML fragment parsing algorithm doesn't use the context element's default namespace URI
        https://bugs.webkit.org/show_bug.cgi?id=125132

        Reviewed by Darin Adler.

        Always use the context element's namespace as the default namespace URI when one is not specified by xmlns.

        The new behavior matches that of Internet Explorer and the specified behavior in HTML5:
        http://www.w3.org/TR/2013/CR-html5-20130806/the-xhtml-syntax.html#parsing-xhtml-fragments

        "The default namespace is the namespace for which the DOM isDefaultNamespace() method on the element would
        return true."

        Test: fast/parser/fragment-parsing-in-document-without-xmlns.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-12-03  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove some CSS Variables leftovers
        https://bugs.webkit.org/show_bug.cgi?id=125167

        Reviewed by Darin Adler.

        No new tests needed. Only removing leftover code.

        * css/CSSBasicShapes.cpp:
        * css/CSSBasicShapes.h:

2013-12-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Checking second-to-last bit in address is a typo
        https://bugs.webkit.org/show_bug.cgi?id=125162

        Reviewed by Darin Adler.

        After talking with the original author of this line,
        is was a typo to make sure that the second-to-last bit
        in an address is 0. Instead, we want to make sure that
        the address is aligned to a 4-byte boundary

        No behavior change, so no test is necessary

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2013-12-03  Radu Stavila  <stavila@adobe.com>

        The overflow border of a relatively positioned element inside a region is not painted
        https://bugs.webkit.org/show_bug.cgi?id=124919

        Relative positioned elements have self-painting layers that don't propagate the visual overflow
        so the layer's position should be used when determining the clipping rectangle for box decorations.

        Reviewed by Mihnea Ovidenie.

        Test: fast/regions/relative-borders-overflow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):

2013-12-03  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of 'hasFrontend()' in InspectorController and WorkerInspectorController
        https://bugs.webkit.org/show_bug.cgi?id=125135

        Reviewed by Darin Adler.

        Remove 'hasFrontend()' from InspectorController and WorkerInspectorController
        as it's never called.

        No new tests, no behavior changes.

        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.h:

2013-12-03  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: webViewResized() is not used anywhere in WebInspectorUI
        https://bugs.webkit.org/show_bug.cgi?id=125137

        Reviewed by Darin Adler.

        Remove leftover code.

        No new tests, no behavior changes.

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:

2013-12-03  László Langó  <lango@inf.u-szeged.hu>

        ASSERTION FAILED: !value || (value->isPrimitiveValue()) in WebCore::StyleProperties::getLayeredShorthandValue.
        https://bugs.webkit.org/show_bug.cgi?id=125146

        Reviewed by Darin Adler.

        Do not presume that |yValue| is primitive if |value| is implicit in StylePropertySerializer.
        An implicit y-value can become explicit if specified as a separate longhand.
        At the same time, its new value can be non-primitive.

        Backported from Blink:
        http://src.chromium.org/viewvc/blink?view=rev&rev=153678

        Test: fast/css/webkit-mask-crash-implicit.html

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getLayeredShorthandValue):

2013-12-03  Rob Buis  <rob.buis@samsung.com>

        Fix build break after r160007.

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):

2013-12-03  Rob Buis  <rob.buis@samsung.com>

        [css shapes] layout for new ellipse syntax
        https://bugs.webkit.org/show_bug.cgi?id=124621

        Reviewed by Dirk Schulze.

        Implement support for doing layout with the new ellipse shape syntax,
        including basic animation support.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-000.html

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Convert new ellipse to a layout shape.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Ignore ellipses with values that
            cannot be interpolated.
        (WebCore::BasicShapeEllipse::floatValueForRadiusInBox): Helper function to calculate
            either radiusX or radiusY, shared by clip-path and shape code paths.
        (WebCore::BasicShapeEllipse::path):
        * rendering/style/BasicShapes.h:

2013-12-03  Frédéric Wang  <fred.wang@free.fr>

        Add an MathMLSelectElement class to implement <maction> and <semantics>.
        <https://webkit.org/b/120058>

        Reviewed by Chris Fleizach.

        Tests: mathml/presentation/maction-dynamic.html
               mathml/presentation/maction.html
               mathml/presentation/semantics.html

        This adds a new MathMLSelectElement class to prepare the implementation
        of the <maction> and <semantics> elements, for which only one "selected"
        child is visible. We now simply display the first child of the
        <semantics> element instead of hiding the annotations and this allows to
        handle the use case of SVG-in-MathML as generated by Instiki when
        bug 124128 is fixed ; Gecko's selection algorithm will be implemented
        later (bug 100626). We now also rely on the @actiontype and @selection
        attributes to select the visible <maction> child ; It remains to deal
        with the user interaction (bug 85734).

        * CMakeLists.txt: add the new files.
        * GNUmakefile.list.am: ditto
        * Target.pri: ditto
        * WebCore.vcxproj/WebCore.vcxproj: ditto
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * css/mathml.css: remove the CSS rule for annotation/annotation-xml.
        * mathml/MathMLAllInOne.cpp: add the new cpp file.
        * mathml/MathMLSelectElement.cpp: Added.
        (WebCore::MathMLSelectElement::MathMLSelectElement):
        (WebCore::MathMLSelectElement::create):
        (WebCore::MathMLSelectElement::createRenderer):
        (WebCore::MathMLSelectElement::childShouldCreateRenderer):
        (WebCore::MathMLSelectElement::finishParsingChildren):
        (WebCore::MathMLSelectElement::childrenChanged):
        (WebCore::MathMLSelectElement::attributeChanged):
        (WebCore::MathMLSelectElement::updateSelectedChild): basic implementation for maction, semantics, maction@actiontype and maction@selection.
        * mathml/MathMLSelectElement.h: Added.
        * mathml/mathattrs.in: add actiontype and selection attributes.
        * mathml/mathtags.in: set element classes for maction, semantics, annotation and annotation-xml.

2013-12-03  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Adding missing nix new files to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124987

        Reviewed by Benjamin Poulain.

        No new tests needed.

        * PlatformNix.cmake:
        * platform/nix/ErrorsNix.cpp: Added.
        * platform/nix/ErrorsNix.h: Added.
        * platform/nix/FileSystemNix.cpp: Added.
        * platform/nix/MIMETypeRegistryNix.cpp: Added.
        * platform/nix/SharedTimerNix.cpp: Added.
        * platform/nix/TemporaryLinkStubs.cpp: Added.

2013-12-03  Tamas Gergely  <gertom@inf.u-szeged.hu>

        Correct broken build on efl port with --no-netscape-plugin-api
        configuration.
        https://bugs.webkit.org/show_bug.cgi?id=123997

        Reviewed by Zoltan Herczeg.

        Build failed on efl port with --no-netscape-plugin-api configuration
        as ld did not found some methods. The configuration uses a minimal
        empty implementation of the class, which is now extended with empty
        method implementations.

        * plugins/PluginPackageNone.cpp:
        (WebCore::PluginPackage::createPackage):
          Returns NULL pointer.
        (WebCore::PluginPackage::hash):
          Returns 0.
        (WebCore::PluginPackage::equal):
          Returns true (equals).
        (WebCore::PluginPackage::compare):
          Returns 0 (equals).
        (WebCore::PluginPackage::~PluginPackage):
          Do nothing.

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

        Avoid setting style twice for generated image content.
        <https://webkit.org/b/125128>

        Take care of a FIXME I added in r158097 and avoid redundant work in
        ImageContentData::createRenderer().

        I changed the inheritance helper RenderImage::setPseudoStyle() into
        a new createStyleInheritingFromPseudoStyle() function instead so it
        can be used from both PseudoElement and ImageContentData.

        Reviewed by Antti Koivisto.

2013-12-02  Samuel White  <samuel_white@apple.com>

        AX: Add AXUIElementCountForSearchPredicate parameterized attribute.
        https://bugs.webkit.org/show_bug.cgi?id=124561

        Reviewed by Chris Fleizach.

        Added ability to fetch the number of elements that match a specific criteria. This will enable VoiceOver
        to interface with WebKit much more dynamically. We can now get an idea of how many interesting elements
        exist on a page, and then fetch them in chunks as needed.

        Test: platform/mac/accessibility/search-predicate-element-count.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityTextSearchMatch):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySearchCriteria::AccessibilitySearchCriteria):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

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

        [css shapes] Layout support for new circle shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124619

        Reviewed by Dirk Schulze.

        Implement support for doing layout with the new circle shape syntax,
        inclduing basic animation support.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-circle-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-002.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-003.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-004.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-005.html

        * css/BasicShapeFunctions.cpp:
        (WebCore::floatValueForCenterCoordinate): Used by both the CSS Shapes
            layout code and the clip path code.
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Update to use appendLiteral, and remove
            call to reserveCapacity - if we find that it's actually slow when
            doing performance tests, we can hopefully do something smarter and
            less ugly than that.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeRadius): Fix a logic error that caused
            the radius keywords not to work properly.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Convert new circle to a layout shape.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Ignore circles with values that
            cannot be interpolated.
        (WebCore::BasicShapeCircle::floatValueForRadiusInBox): Convert circle
            radius keywords to a float value.
        (WebCore::BasicShapeCircle::path):
        (WebCore::BasicShapeCircle::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::canBlend):
        (WebCore::BasicShapeRadius::canBlend):

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

        WebCrypto HMAC doesn't check key algorithm's hash
        https://bugs.webkit.org/show_bug.cgi?id=125114

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/hmac-check-algorithm.html

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches): Check it.

2013-12-02  Brady Eidson  <beidson@apple.com>

        Possible crash in ProgressTracker::progressHeartbeatTimerFired(Timer<ProgressTracker>*)
        https://bugs.webkit.org/show_bug.cgi?id=125110

        Reviewed by Darin Adler.

        FrameLoader::loadProgressingStatusChanged() might be called while the Frame has a null FrameView.

        It’s unclear how to reproduce, but there’s no harm in a null check.

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

2013-12-02  Brady Eidson  <beidson@apple.com>

        Possible crash in ProgressTracker::progressHeartbeatTimerFired(Timer<ProgressTracker>*)
        https://bugs.webkit.org/show_bug.cgi?id=125110

        Reviewed by Darin Adler.

        It’s possible to have a null m_originatingProgressFrame when the heartbeat timer fires.

        On the surface this seems impossible because the only time m_originatingProgressFrame is cleared
        out the heartbeat timer is also stopped.

        But there’s likely still a race condition in multi-threaded environments.

        There’s no harm in null-checking m_originatingProgressFrame before accessing its loader.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):

2013-12-02  Brady Eidson  <beidson@apple.com>

        Add more CachedPage null checks
        https://bugs.webkit.org/show_bug.cgi?id=125106

        Reviewed by Sam Weinig.

        Only some functions in PageCache.cpp null-check the CachedPages in HistoryItems.

        Every part that manipulates the CachedPage should.

        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForVistedLinkStyleRecalc):
        (WebCore::PageCache::markPagesForFullStyleRecalc):
        (WebCore::PageCache::markPagesForDeviceScaleChanged):
        (WebCore::PageCache::markPagesForCaptionPreferencesChanged):

2013-12-02  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Support inset parsing
        https://bugs.webkit.org/show_bug.cgi?id=124903

        Reviewed by David Hyatt.

        In this patch I added support for inset shape parsing for CSS Shapes. Inset is defined
        by CSS Shapes Level 1 (http://dev.w3.org/csswg/css-shapes-1/#supported-basic-shapes).
        Inset is going to be used by shape-outside (bug #124905), and eventually by shape-inside.

        No new tests, I updated existing tests to cover the changes.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape): Add support for inset.
        (WebCore::basicShapeForValue): Add support for inset.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildInsetString): Create inset css string.
        (WebCore::CSSBasicShapeInset::cssText): Convert inset shape to a CSS string.
        (WebCore::CSSBasicShapeInset::equals): Compare two inset rectangles.
        (WebCore::CSSBasicShapeInset::serializeResolvingVariables): Create an inset string, with CSS variables resolved.
        (WebCore::CSSBasicShapeInset::hasVariableReference): Determine if this inset has any CSS Variable references.
        * css/CSSBasicShapes.h: Add inset class.
        (WebCore::CSSBasicShapeInset::create):
        (WebCore::CSSBasicShapeInset::top):
        (WebCore::CSSBasicShapeInset::right):
        (WebCore::CSSBasicShapeInset::bottom):
        (WebCore::CSSBasicShapeInset::left):
        (WebCore::CSSBasicShapeInset::topLeftRadius):
        (WebCore::CSSBasicShapeInset::topRightRadius):
        (WebCore::CSSBasicShapeInset::bottomRightRadius):
        (WebCore::CSSBasicShapeInset::bottomLeftRadius):
        (WebCore::CSSBasicShapeInset::setTop):
        (WebCore::CSSBasicShapeInset::setRight):
        (WebCore::CSSBasicShapeInset::setBottom):
        (WebCore::CSSBasicShapeInset::setLeft):
        (WebCore::CSSBasicShapeInset::setTopLeftRadius):
        (WebCore::CSSBasicShapeInset::setTopRightRadius):
        (WebCore::CSSBasicShapeInset::setBottomRightRadius):
        (WebCore::CSSBasicShapeInset::setBottomLeftRadius):
        (WebCore::CSSBasicShapeInset::CSSBasicShapeInset):
        * css/CSSParser.cpp:
        (WebCore::completeBorderRadii): Move static function before parseInsetBorderRadius.
        (WebCore::CSSParser::parseInsetRoundedCorners): I added this helper function for parsing the rounded corners
        (WebCore::CSSParser::parseBasicShapeInset): Parse inset.
        (WebCore::CSSParser::parseBasicShape): Add call to parse inset.
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add constructor for LengthSize.
        (WebCore::CSSPrimitiveValue::init): Initialize LengthSize.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create): Add support for creating PrimitiveValue from LengthSize.
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue): Add support for LengthSize.
        * platform/LengthSize.h:
        (WebCore::LengthSize::blend): Add blend for LengthSize.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Keep inset disabled for shape-inside now.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path): Calculate path for an inset.
        (WebCore::BasicShapeInset::blend): Blend two insets.
        * rendering/style/BasicShapes.h: Add higher level inset.
        (WebCore::BasicShapeInset::create):
        (WebCore::BasicShapeInset::top):
        (WebCore::BasicShapeInset::right):
        (WebCore::BasicShapeInset::bottom):
        (WebCore::BasicShapeInset::left):
        (WebCore::BasicShapeInset::topLeftRadius):
        (WebCore::BasicShapeInset::topRightRadius):
        (WebCore::BasicShapeInset::bottomRightRadius):
        (WebCore::BasicShapeInset::bottomLeftRadius):
        (WebCore::BasicShapeInset::setTop):
        (WebCore::BasicShapeInset::setRight):
        (WebCore::BasicShapeInset::setBottom):
        (WebCore::BasicShapeInset::setLeft):
        (WebCore::BasicShapeInset::setTopLeftRadius):
        (WebCore::BasicShapeInset::setTopRightRadius):
        (WebCore::BasicShapeInset::setBottomRightRadius):
        (WebCore::BasicShapeInset::setBottomLeftRadius):
        (WebCore::BasicShapeInset::BasicShapeInset):

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

        Support WebCrypto AES-KW
        https://bugs.webkit.org/show_bug.cgi?id=125105

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/aes-kw-key-manipulation.html
               crypto/subtle/aes-kw-wrap-unwrap-aes.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithmIdentifier.h: (WebCore::CryptoAlgorithmIdentifier): Added AES-KW.
        It's not standardized yet, but there appears to be a consensus that it will be specified.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        Added AES-KW cases everywhere.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        Support importing/exporting AES-KW keys in JWK.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        Added some accidentally forgotten std::moves.

        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmAES_KW.h: Added.
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp: Added.

        * crypto/keys/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::CryptoKeyAES): Allow AES-KW
        as valid algorithm for AES keys.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register AES-KW.

2013-12-02  Beth Dakin  <bdakin@apple.com>

        Add a setting to opt into a mode where the background extends and fixed elements 
        don't move on rubber-band
        https://bugs.webkit.org/show_bug.cgi?id=124745

        Reviewed by Tim Horton.

        New setting backgroundShouldExtendBeyondPage() will cause the tile cache to have a 
        margin, and it will also cause fixed elements and backgrounds to stick to the 
        viewport on scroll instead of sticking to the document. 

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollBehaviorForFixedElements):
        * page/Settings.in:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

2013-12-02  Roger Zanoni  <rogerzanoni@gmail.com>

        [MediaStream] Use iterator-based loops instead of index-based loops
        https://bugs.webkit.org/show_bug.cgi?id=125021

        Reviewed by Eric Carlson.

        Also, changing iterator variable names from iter to it and
        initializing an 'end' variable in each loop instead of evaluating
        'collection.end()' multiple times.

        No new tests, covered by existing ones.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::cloneMediaStreamTrackVector):
        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::trackDidEnd):
        (WebCore::MediaStream::scheduledEventTimerFired):

2013-12-02  Rob Buis  <rob.buis@samsung.com>

        [css shapes] Parse new ellipse shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124620

        Reviewed by Dirk Schulze.

        Implement parsing of the new ellipse shape syntax. This closely follows the patch
        for the new circle syntax (https://bugs.webkit.org/show_bug.cgi?id=124618), with
        some refactoring of functionality shared by both.

        Updated existing parsing tests to cover this.

        * css/BasicShapeFunctions.cpp:
        (WebCore::BasicShapeRadiusToCSSValue):
        (WebCore::valueForBasicShape):
        (WebCore::CSSValueToBasicShapeRadius):
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::buildEllipseString):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::buildDeprecatedEllipseString):
        (WebCore::CSSDeprecatedBasicShapeEllipse::cssText):
        (WebCore::CSSDeprecatedBasicShapeEllipse::equals):
        * css/CSSBasicShapes.h:
        (WebCore::CSSDeprecatedBasicShapeEllipse::create):
        (WebCore::CSSDeprecatedBasicShapeEllipse::centerX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::centerY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::radiusX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::radiusY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setCenterX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setCenterY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setRadiusX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setRadiusY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::CSSDeprecatedBasicShapeEllipse):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeEllipse):
        (WebCore::CSSParser::parseDeprecatedBasicShapeEllipse):
        (WebCore::CSSParser::parseBasicShape):
        * css/CSSParser.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/style/BasicShapes.cpp:
        (WebCore::DeprecatedBasicShapeEllipse::path):
        (WebCore::DeprecatedBasicShapeEllipse::blend):
        (WebCore::BasicShapeEllipse::path):
        (WebCore::BasicShapeEllipse::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeEllipse::centerX):
        (WebCore::BasicShapeEllipse::centerY):
        (WebCore::BasicShapeEllipse::radiusX):
        (WebCore::BasicShapeEllipse::radiusY):
        (WebCore::BasicShapeEllipse::setCenterX):
        (WebCore::BasicShapeEllipse::setCenterY):
        (WebCore::BasicShapeEllipse::setRadiusX):
        (WebCore::BasicShapeEllipse::setRadiusY):
        (WebCore::BasicShapeEllipse::BasicShapeEllipse):
        (WebCore::DeprecatedBasicShapeEllipse::create):
        (WebCore::DeprecatedBasicShapeEllipse::DeprecatedBasicShapeEllipse):

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

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Build fix.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoKeyRSAMac.cpp:

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

        Use GenericEventQueue in TrackListBase and reduce code duplication with scheduleTrackEvent()
        https://bugs.webkit.org/show_bug.cgi?id=124811

        Reviewed by Eric Carlson.

        No new tests because this is just refactoring.

        * html/track/TrackListBase.cpp:
        (TrackListBase::TrackListBase): Replace event code with a GenericEventQueue.
        (TrackListBase::scheduleTrackEvent): Factor out duplicate code in schedule{Add,Remove}TrackEvent functions.
        (TrackListBase::scheduleAddTrackEvent): Same.
        (TrackListBase::scheduleRemoveTrackEvent): Same.
        (TrackListBase::scheduleChangeEvent): Use GenericEventQueue.
        * html/track/TrackListBase.h: Replace event code with GenericEventQueue.

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

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Fix an automatic merge failure by re-adding
        CryptoAlgorithmRsaOaepParams.h.

2013-12-02  Victor Jaquez  <vjaquez@igalia.com>

        [Gstreamer] update webkitvideosink metadata
        https://bugs.webkit.org/show_bug.cgi?id=125082

        Reviewed by Philippe Normand.

        No new tests, no behavior changes.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkit_video_sink_class_init):

2013-12-02  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Simplify MediaPlayerPrivateGStreamerBase::createVideoSink()
        https://bugs.webkit.org/show_bug.cgi?id=125077

        Remove the method's unused parameter.
        Remove the GStreamer 0.10.22 run-time validation, since we are using
        GStreamer 1.0 officially.
        Remove the creation of a spurious Bin for the video sink, since
        either the fpssink or the webkitsink are valid sink elements.
        Change fpsink to a GRefPtr.

        Now, createVideoSink() returns a simple pointer to the created sink
        element.

        Reviewed by Philippe Normand.

        No new tests, no behavior changes.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::decodedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamerBase::droppedFrameCount):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

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

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsa-oaep-key-manipulation.html
               crypto/subtle/rsa-oaep-plaintext-length.html
               crypto/subtle/rsa-oaep-wrap-unwrap-aes.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaOaepParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        Added RSA-OAEP parameters.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        Support RSA-OAEP in JWK. It is more limited than general WebCrypto, as JWK only
        allows SHA-1 as hash.

        * crypto/CommonCryptoUtilities.cpp: Added. (WebCore::getCommonCryptoDigestAlgorithm):
        * crypto/CommonCryptoUtilities.h: Added.
        Extracted some shared code and forward declarations for CommonCrypto.

        * crypto/CryptoAlgorithmParameters.h: (WebCore::CryptoAlgorithmParameters::Class):
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h: Added.
        Added RsaOaepParams.

        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h: Added.
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::getCommonCryptoHMACAlgorithm):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoKeyMac.cpp:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        Use CommonCryptoUtilities.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register RSA-OAEP.

2013-12-02  Andres Gomez  <agomez@igalia.com>

        [GTK] Fails to build with freetype 2.5.1
        https://bugs.webkit.org/show_bug.cgi?id=125074

        Reviewed by Carlos Garcia Campos.

        FreeType specifies a canonical way of including their own
        headers. Now, we are following this recommendation so the
        compilation won't be broken again due to an upgrade in FeeType's
        including paths.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:

2013-12-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::commonTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=125042

        Reviewed by Mario Sanchez Prada.

        When an AX text marker that references a node in a detached document is used to create a text marker range, a crash occurs
        because the method to determine commonTreeScopes does not account for when there are no common tree scopes.

        Test: platform/mac/accessibility/ordered-textmarker-crash.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForUnorderedPositions):
        * dom/TreeScope.cpp:
        (WebCore::commonTreeScope):

2013-12-02  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Fix a crash in the webaudio source provider when the audio track is going away.
        https://bugs.webkit.org/show_bug.cgi?id=124975

        Reviewed by Philippe Normand.

        Merged https://chromium.googlesource.com/chromium/blink/+/b21838b32bf11b1a972dfc449ddde71115490c23

        Before this patch, it was hitting a use-after-free crash  when the audio
        track in the media stream is going away and the webaudio mediastreamsourcenode
        is still running.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource): Passing audio track
        pointer to MediaStreamAudioSourceNode constructor.
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create):
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h: Added
        MediaStreamTrack class variable and change the constructor to receive
        it as parameter.

2013-12-02  Andrzej Badowski  <a.badowski@samsung.com>

        [ATK] Support active state for listbox elements.
        https://bugs.webkit.org/show_bug.cgi?id=125009

        Reviewed by Chris Fleizach.

        Added support for ATK_STATE_ACTIVE for listbox elements.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2013-12-02  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove unused functions from InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=125061

        Reviewed by Antoine Quint.

        Get rid of unused functions, redundant inclusion and forward declaration.

        No new tests, no behavior changes.

        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:

2013-12-02  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Fix build warning in EventHandler.cpp
        https://bugs.webkit.org/show_bug.cgi?id=125010

        Reviewed by Csaba Osztrogonác.

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

2013-12-02  Attila Dusnoki  <adusnoki@inf.u-szeged.hu>

        HTML5 required attribute validation messages implemented.
        https://bugs.webkit.org/show_bug.cgi?id=125003

        Reviewed by Gyuyoung Kim.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageBadInputForNumberText):

2013-12-01  Andreas Kling  <akling@apple.com>

        SVG: Intersection/enclosure checks should use RenderElement.
        <https://webkit.org/b/125058>

        Make RenderSVGModelObject's checkIntersection() and checkEnclosure()
        take RenderElement* instead of RenderObject*. They are only ever
        called with SVGElement's renderers.

        Reviewed by Sam Weinig.

2013-12-01  Andreas Kling  <akling@apple.com>

        Remove unreachable labels for -webkit-margin-*-collapse properties.
        <https://webkit.org/b/125057>

        The following properties are implemented in DeprecatedStyleBuilder
        and should not have case labels in the applyProperty() switch:

            -webkit-margin-before-collapse
            -webkit-margin-top-collapse
            -webkit-margin-after-collapse
            -webkit-margin-bottom-collapse

        This seems counter-intuitive, but they are actually *not* like other
        directional properties. In this case, before/after are only aliases
        for top/bottom, and do not depend on writing-mode or text-direction.
        See also r68561, where the aliases were originally added.

        Reviewed by Anders Carlsson.

2013-12-01  Andreas Kling  <akling@apple.com>

        CSSFunctionValue constructors should return PassRef.
        <https://webkit.org/b/125054>

        Make CSSFunctionValue::create() helpers return PassRef instead of
        PassRefPtr since they will never return null.

        Reviewed by Anders Carlsson.

2013-12-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159764.
        http://trac.webkit.org/changeset/159764
        https://bugs.webkit.org/show_bug.cgi?id=125055

        appears to hurt html5-full-render times (Requested by kling on
        #webkit).

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/parser/HTMLConstructionSite.h:

2013-12-01  Andreas Kling  <akling@apple.com>

        Make more computed style helpers return PassRef.
        <https://webkit.org/b/125043>

        Reduce branchiness in computed style code by making more of the
        file-local helpers return PassRef instead of PassRefPtr.

        Reviewed by Anders Carlsson.

2013-11-30  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Implement scrollbarThickness for opaque scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=125034

        Reviewed by Gyuyoung Kim.

        Implemented scrollbarThickness to support opaque scrollbar.
        Now, edj can decide whether to support opaque scrollbar by adding scrollbar.thickness.
        In addition, added OVERRIDE/FINAL keyword and removed unnecessary destructor
        in ScrollbarThemeEfl.cpp.

        No new tests, no behavior changes with default theme.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::loadTheme):
        Update thickness of scrollbar when theme was loaded.
        * platform/efl/ScrollbarThemeEfl.cpp:
        * platform/efl/ScrollbarThemeEfl.h:
        (WebCore::ScrollbarThemeEfl::setScrollbarThickness):
        (WebCore::ScrollbarThemeEfl::scrollbarThickness):
        (WebCore::ScrollbarThemeEfl::registerScrollbar):
        (WebCore::ScrollbarThemeEfl::unregisterScrollbar):

2013-11-29  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove Symbian specific code.
        https://bugs.webkit.org/show_bug.cgi?id=124939

        Reviewed by Zoltan Herczeg.

        Symbian is not supported, remove leftover code.

        * plugins/npapi.h:

2013-11-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Rename InlineIterator::m_obj and make it private
        https://bugs.webkit.org/show_bug.cgi?id=124837

        Reviewed by Antti Koivisto.

        InlineIterator has been exported m_obj as public though there is a getter function.
        Besides *object* name isn't ambigious. So, changed it with m_renderer and renderer().
        Additionally, setRenderer() is added as well.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::setObject):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::matchedEndLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::skipNonBreakingSpace):
        (WebCore::requiresLineBox):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Rename StylePropertySet to StyleProperties
        https://bugs.webkit.org/show_bug.cgi?id=124990
        
        Reviewed by Andreas Kling.

        "Set" does not add useful information here. Use less clunky plural name.

2013-11-28  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Adding EditorNix to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124984

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * PlatformNix.cmake:
        * editing/nix/EditorNix.cpp: Added.

2013-11-28  Zoltan Horvath  <zoltan@webkit.org>

        [Win] Update vcxproj.filters, since LineInfo.h and LineLayoutState.h have been moved to rendering/line
        https://bugs.webkit.org/show_bug.cgi?id=124959

        Reviewed by Brent Fulgham.

        Update WebCore.vcxproj.filters, since LineInfo.h (r155628) and LineLayoutState.h (158121) have been moved to rendering/line.

        No new tests, no behavior change.

        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-11-28  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        RenderTableSection Blink merge asserting
        https://bugs.webkit.org/show_bug.cgi?id=124857

        Reviewed by Csaba Osztrogonác.

        Use border spacing at the end of all sections.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Remove feature: CSS variables
        https://bugs.webkit.org/show_bug.cgi?id=114119

        Reviewed by Andreas Kling.
        
        The feature is unmaintained and it is getting in the way of refactoring. Code quality is not up to
        WebKit standards either.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSBasicShapes.cpp:
        * css/CSSBasicShapes.h:
        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        (WebCore::hasDoubleValue):
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (WebCore::CSSCalcPrimitiveValue::computeLengthPx):
        (WebCore::determineCategory):
        (WebCore::CSSCalcBinaryOperation::primitiveType):
        * css/CSSCalculationValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::filterProperties):
        (WebCore::CSSParser::createStylePropertySet):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::validCalculationUnit):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseReflect):
        (WebCore::CSSParser::detectDashToken):
        (WebCore::CSSParser::realLex):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::primitiveType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):
        * css/CSSReflectValue.cpp:
        * css/CSSReflectValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::setCssText):
        * css/CSSValueList.cpp:
        * css/CSSValueList.h:
        * css/CSSVariableValue.h: Removed.
        * css/Pair.h:
        * css/Rect.h:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):
        (WebCore::StylePropertySet::PropertyReference::cssName):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        * css/WebKitCSSTransformValue.cpp:
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::equals):
        * css/makeprop.pl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleVariableData.h: Removed.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2013-11-28  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Updating RTCPeerConnectionHandlerMock after r159769
        https://bugs.webkit.org/show_bug.cgi?id=124947

        Reviewed by Philippe Normand.

        Adding its create function back, in order to run RTCPeerConnection LayoutTests.

        No new tests needed.

        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::create):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Support custom types for drag and drop data
        https://bugs.webkit.org/show_bug.cgi?id=124659

        Reviewed by Martin Robinson.

        Covered by fast/events/drag-customData.html.

        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::unknownTypes): returns a hash map with all custom types set.
        (WebCore::DataObjectGtk::clearAllExceptFilenames): clear custom types.
        * platform/gtk/DataObjectGtk.h:
        (WebCore::DataObjectGtk::hasUnknownTypeData): returns whether custom types are set.
        (WebCore::DataObjectGtk::unknownTypeData): returns the data for a custom type.
        (WebCore::DataObjectGtk::setUnknownTypeData): sets the data for a custom type.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeString): handle unknown types as custom.
        (WebCore::Pasteboard::writePasteboard): ditto.
        (WebCore::Pasteboard::hasData): also check for custom types.
        (WebCore::Pasteboard::types): also obtain the list of custom types.
        (WebCore::Pasteboard::readString): handle unknown types as custom.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::initGdkAtoms): new unknown atom.
        (WebCore::PasteboardHelper::PasteboardHelper): add custom type to the list of targets.
        (WebCore::PasteboardHelper::fillSelectionData): turns any custom types' data into a GVariant, which
        is in turn serialized to a single string for GtkSelectionData to hold.
        (WebCore::PasteboardHelper::targetListForDataObject): add custom data to the target list if any is
        set.
        (WebCore::PasteboardHelper::fillDataObjectFromDropData): retrieve the custom types and their data
        from the serialized GVariant string held by GtkSelectionData.
        (WebCore::PasteboardHelper::dropAtomsForContext): handle custom types.

2013-11-27  Eric Carlson  <eric.carlson@apple.com>

        Allow the QuickTime plug-in to be replaced by script in an isolated word
        https://bugs.webkit.org/show_bug.cgi?id=124900

        Reviewed by Dean Jackson.

        Test: plugins/quicktime-plugin-replacement.html

        * CMakeLists.txt: Add new Modules path.
        * DerivedSources.make: Add new files.
        * GNUmakefile.am: Add new Modules path.
        * GNUmakefile.list.am: Add new header.
        * WebCore.vcxproj/WebCore.vcxproj: Add new header.
        * WebCore.vcxproj/WebCoreCommon.props: Add new Modules path.
        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * Modules/plugins: Added.
        * Modules/plugins/PluginReplacement.h: Added. Defines the interface for a plug-in replacement.

        Create a replacement for the QuickTime plug-in.
        * Modules/plugins/QuickTimePluginReplacement.cpp: Added.
        * Modules/plugins/QuickTimePluginReplacement.css: Added.
        * Modules/plugins/QuickTimePluginReplacement.h: Added.
        * Modules/plugins/QuickTimePluginReplacement.idl: Added.
        * Modules/plugins/QuickTimePluginReplacement.js: Added.

        Allow plug-in replacement to be enabled at runtime.
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPluginReplacementEnabled):
        (WebCore::RuntimeEnabledFeatures::pluginReplacementEnabled):

        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS): Add toJS(... const String& ...).

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObject): Give a plug-in replacement a first shot at defining the
            script interface.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget): Call base class requestObject.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fileSize): New, passthrough to media engine.
        * html/HTMLMediaElement.h:

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget): Call base class requestObject.

        Moved some logic that was previously used only for creating a plug-in snapshot to the base
        class so it can be shared by a plug-in replacement.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): Initialize timer used to swap renderers.
        (WebCore::HTMLPlugInElement::createRenderer): Allow plug-in replacement to create the renderer.
        (WebCore::HTMLPlugInElement::swapRendererTimerFired): Create a shadow root.
        (WebCore::HTMLPlugInElement::setDisplayState): Set the new state, prime the swap renderer 
            timer if necessary.
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot): Tell the plug-in replacement to
            install itself in the new shadow DOM.
        (WebCore::registeredPluginReplacements): Return vector of all registered plug-in replacements.
        (WebCore::registerPluginReplacement): Add a plug-in replacement.
        (WebCore::pluginReplacementForType): Find a plug-in replacement for a MIME type.
        (WebCore::HTMLPlugInElement::requestObject): If there is a plug-in replacement for the MIME type,
            create it and set the display state.
        (WebCore::HTMLPlugInElement::scriptObjectForPluginReplacement): Return the script object for 
            the current plug-in replacement, if any.
        * html/HTMLPlugInElement.h:

        Move some plug-in snapshot code into the base class.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): No need to initialize timer.
        (WebCore::HTMLPlugInImageElement::setDisplayState): Call base class.
        (WebCore::HTMLPlugInImageElement::createRenderer): Ditto.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Ditto.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Remove unnecessary class name.
        (WebCore::HTMLPlugInImageElement::requestObject): New.
        * html/HTMLPlugInImageElement.h:

        * html/HTMLVideoElement.h: Make createRenderer public so the QuickTime plug-in replacement can
            call it.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::fileSize): New.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extraMemoryCost): totalBytes returns an unsigned long long.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::fileSize):

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::totalBytes): Return an unsigned long long.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes): Ditto.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Backup the plug-in replacement runtime setting.
        (WebCore::InternalSettings::Backup::restoreTo): Restore it.
        (WebCore::InternalSettings::setPluginReplacementEnabled): Set it.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2013-11-27  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding MediaConstraintsMock class
        https://bugs.webkit.org/show_bug.cgi?id=124902

        Reviewed by Eric Carlson.

        Validate constraints used in RTCPeerConnection LayoutTests

        Existing test was updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * platform/mock/MediaConstraintsMock.cpp: Added.
        * platform/mock/MediaConstraintsMock.h: Added.
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::validateRequestConstraints): Now using MediaConstraintsMock
        (WebCore::MockMediaStreamCenter::createMediaStream): Ditto.
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::initialize): Ditto.

2013-11-27  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Shape-Inside Should Default to 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=124851

        Reviewed by Alexandru Chiculita.

        The current shape-inside specification has the property default to the 'auto'
        value, not 'outside-shape'.

        Updated tests are under fast/shapes.

        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2013-11-27  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-inside rectangle layout can fail
        https://bugs.webkit.org/show_bug.cgi?id=124784

        Reviewed by Andreas Kling.

        Apply LayoutUnit::fromFloatCeil() consistently in RectangleShape::firstIncludedIntervalLogicalTop().

        Test: fast/shapes/shape-inside/shape-inside-subpixel-rectangle-top.html

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):

2013-11-27  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove Qt-specific .qrc files
        https://bugs.webkit.org/show_bug.cgi?id=124944

        Reviewed by Andreas Kling.

        No new tests needed.

        * WebCore.qrc: Removed.

2013-11-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Invalid command line error when visiting www.chessbase.com
        https://bugs.webkit.org/show_bug.cgi?id=124715

        Reviewed by Philippe Normand.

        We were not handling the HTTP errors in the WebKit GStreamer
        source and therefore the 404 error page was being 'decoded'. As no
        decoder could be found (for obvious reasons), playback failed, but
        it should be failing for the source not being found instead of the
        decoding problem.

        Test: http/tests/media/video-error-does-not-exist.html

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Handle HTTP errors in
        the source and raise a GStreamer error to the pipeline.

2013-11-14  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix positioning of grid items with margins
        https://bugs.webkit.org/show_bug.cgi?id=124345

        Reviewed by David Hyatt.

        From Blink r157925 and r158041 by <jchaffraix@chromium.org>

        Test: fast/css-grid-layout/grid-item-margin-resolution.html

        Adds margin start/before to the positions of grid items (removing
        several FIXME's in the current code). This means calling
        findChildLogicalPosition() after the layout in order to have the
        right values for the margins.

        In order to match flexbox and author's intents we're also
        including the margins of grid items in the intrinsic size of the
        grid. That's why flexbox's marginLogicalPositionForChild() is
        moved up to RenderBlock in order to share it with RenderGrid.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::marginIntrinsicLogicalWidthForChild): Moved
        from RenderFlexibleBox::marginLogicalWidthForChild().
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredTrackWidth):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::findChildLogicalPosition):

2013-11-26  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Support grid-definition-{rows|columns} repeat() syntax
        https://bugs.webkit.org/show_bug.cgi?id=103312

        Reviewed by Andreas Kling.

        Added support for the repeat() syntax inside
        grid-definition-{rows|columns} by just adding the repeated values
        to our list of column|row definitions.

        The parsing of <track-name> was refactored in a new function as
        it's used now in three different places. The <track-size> parsing
        was also refactored to share it with the repeat() parsing.

        Test: fast/css-grid-layout/grid-element-repeat-get-set.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridTrackNames):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        (WebCore::CSSParser::parseGridTrackSize):
        * css/CSSParser.h:

2013-11-26  Marcelo Lira  <marcelo.lira@openbossa.org>

        Nix upstreaming - Adding build files and supporting scripts
        https://bugs.webkit.org/show_bug.cgi?id=118367

        Reviewed by Ryosuke Niwa.

        No new tests needed.

        * CMakeLists.txt:
        * PlatformNix.cmake: Added.

2013-11-26  Tim Horton  <timothy_horton@apple.com>

        Don't parent the TileController root layer in two places
        https://bugs.webkit.org/show_bug.cgi?id=124873

        Reviewed by Brent Fulgham.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        The TileController's layer is already parented by callers of
        TileController::create, and in a special way. TileController
        shouldn't parent itself, anyway...

2013-11-26  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [MediaStream API] HTMLMediaElement should be able to use MediaStream as source
        https://bugs.webkit.org/show_bug.cgi?id=121943

        Reviewed by Eric Carlson.

        Implement MediaStream direct assignment to Media Elements using the new 'srcObject'
        attribute: http://www.w3.org/TR/mediacapture-streams/#direct-assignment-to-media-elements

        Test: fast/mediastream/MediaStream-MediaElement-srcObject.html

        * CMakeLists.txt: Added new HTMLMediaElementMediaStream.h and .cpp to cmake build.
        * DerivedSources.make: Added HTMLMediaElementMediaStream.idl.
        * GNUmakefile.list.am: Added new HTMLMediaElementMediaStream* to autotools build.
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * Modules/mediastream/HTMLMediaElementMediaStream.cpp: Added.
        (WebCore::HTMLMediaElementMediaStream::srcObject): implements srcObject getter.
        (WebCore::HTMLMediaElementMediaStream::setSrcObject): implements srcObject setter.
        * Modules/mediastream/HTMLMediaElementMediaStream.h: Added.
        * Modules/mediastream/HTMLMediaElementMediaStream.idl: Added.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSrcObject): This is an initial implementation, and
        is still incomplete, that will be addressed in a separate bug: https://webkit.org/b/124896
        * html/HTMLMediaElement.h: Added m_mediaStreamSrcObject class variable
        and its corresponding getter.

2013-11-26  Andreas Kling  <akling@apple.com>

        Use child iterator to find operators in RenderMathMLRow::layout().
        <https://webkit.org/b/124108>

        Replace manual children walk with childrenOfType<RenderMathMLBlock>.
        Minor update to fix build.

        Reviewed by Martin Robinson.

2013-11-26  Andreas Kling  <akling@apple.com>

        RenderObject: Inline isBody() and isHR().
        <https://webkit.org/b/124901>

        Together these account for ~0.3% of samples on HTML5-8266.
        Almost all of it is call overhead.

        Reviewed by Anders Carlsson.

2013-11-26  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Layout using [<box> || <shape>] value
        https://bugs.webkit.org/show_bug.cgi?id=124428

        Reviewed by David Hyatt.

        When a box value is supplied, use it to size and position the shape. Otherwise,
        use a default value (content-box for shape-inside, margin-box for shape-outside).
        This patch extends the sizing and positioning code used for the box patch (Bug 124227)
        to also apply to shapes. With this patch, we also no longer use the box-sizing
        property to size and position shapes.

        Tests: fast/shapes/shape-outside-floats/shape-outside-shape-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-shape-boxes-002.html
               fast/shapes/shape-outside-floats/shape-outside-shape-boxes-003.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Adjust for ShapeValues storing
        BasicShape::ReferenceBox as their box value, rather than a CSSValueID.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Ditto.
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize): Adjust for BasicShapes with reference boxes
        as well as plain box values. Also, remove old box-sizing code.
        (WebCore::ShapeInfo::logicalTopOffset): Ditto.
        (WebCore::ShapeInfo::logicalLeftOffset): Ditto.
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createBoxValue): Adjust for boxes being stored as
        BasicShape::ReferenceBoxes.
        (WebCore::ShapeValue::box): Ditto.
        (WebCore::ShapeValue::ShapeValue): Ditto.

2013-11-26  Brian J. Burg  <burg@cs.washington.edu>

        ImageBuffer::create should return a std::unique_ptr instead of OwnPtr.
        https://bugs.webkit.org/show_bug.cgi?id=124822

        Reviewed by Andreas Kling.

        Replace all uses of OwnPtr<ImageBuffer> and PassOwnPtr<ImageBuffer> with
        std::unique_ptr<ImageBuffer>. Replace calls to OwnPtr::clear() and
        OwnPtr::release() with reset() and std::move(). Remove unnecessary includes.

        No new tests. This is a mechanical refactoring.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setSurfaceSize):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createCompositingBuffer):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedFill):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache):
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::imageBuffer):
        * html/canvas/WebGLRenderingContext.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createCompatibleBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        * platform/graphics/ShadowBlur.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::setSourceImage):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::clearResult):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::invalidateBufferedForeground):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp: Remove method parameter wrapping/indentation.
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp: Remove method parameter wrapping/indentation.
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGResourcePattern.h: Remove method parameter wrapping/indentation.
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::createImageBufferForPattern):
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        * rendering/svg/SVGRenderingContext.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::drawPatternForContainer):

2013-11-26  Eric Carlson  <eric.carlson@apple.com>

        video.currentSrc should return empty when no resource is loaded
        https://bugs.webkit.org/show_bug.cgi?id=124898

        Reviewed by Dan Bernstein.

        Test: media/video-currentsrc-cleared.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Set m_currentSrc to empty in 
            preparation for attempting to load a new url.

2013-11-26  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Support for shape-margin in BoxShape
        https://bugs.webkit.org/show_bug.cgi?id=124788

        Reviewed by Andreas Kling.

        Corrected BoxShape's internal shape-margin/padding bounds FloatRoundedRect
        initialization. Tests for the padding bounds will be added when the rest of
        shape-padding for box shapes implementation is ready.

        Tests: fast/shapes/shape-outside-floats/shape-outside-margin-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-margin-boxes-002.html

        * rendering/shapes/BoxShape.cpp: Use constructor shape-margin,shape-padding parameters.
        (WebCore::BoxShape::BoxShape):
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape): Pass the shape-margin and shape-padding values along to the BoxShape constructor.
        (WebCore::Shape::createShape): Ditto.

2013-11-26  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove unnecessary webaudio include from MediaStreamSource header
        https://bugs.webkit.org/show_bug.cgi?id=124897

        Reviewed by Eric Carlson.

        AudioDestinationConsumer.h is included but not used anywhere in
        MediaStreamSource implementation.

        * platform/mediastream/MediaStreamSource.h:

2013-11-26  Andreas Kling  <akling@apple.com>

        Avoid unnecessary copy-on-write in FillLayer style application.
        <https://webkit.org/b/124878>

        We ended up with a lot of cloned StyleBackgroundData objects on
        HTML5-8266. This happened because we always forced a copy-on-write
        when applying background-image:inherit / background-image:initial.

        This patch adds early returns to both functions. In the "inherit"
        case, we bail early if the target style already has the same fill
        layer data as its parent style.

        In the "initial" case, we optimize for the single-FillLayer case
        and add an early return if the relevant value is either unset or
        equal to the templatized initial value.

        2.46 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Allow showing a context menu on all mouse events.
        https://bugs.webkit.org/show_bug.cgi?id=124747

        Reviewed by Joseph Pecoraro.

        Add a new InspectorFrontendHost::dispatchEventAsContextMenuEvent(Event*) method
        to let the inspector front-end dispatch a native contextmenu event that will allow
        for a context menu to be shown from within a non-contextmenu event handler.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):
        Check that we're dealing with a mouse event, get the frame for the event target
        and the event's location to call ContextMenuController::showContextMenuAt()
        which will handle the new contextmenu event dispatch to the original event target.

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2013-11-25  Sam Weinig  <sam@webkit.org>

        Convert some Shape code to use references
        https://bugs.webkit.org/show_bug.cgi?id=124876

        Reviewed by Andreas Kling.

        * inspector/InspectorOverlay.cpp:
        * rendering/FloatingObjects.cpp:
        * rendering/LayoutState.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        * rendering/line/LineWidth.cpp:
        * rendering/shapes/ShapeInfo.cpp:
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        * rendering/shapes/ShapeOutsideInfo.h:
        Replace yet more pointers with references.

2013-11-25  Simon Pena  <simon.pena@samsung.com>

        [EFL] X11Helper::createPixmap doesn't initialise out value handleId
        https://bugs.webkit.org/show_bug.cgi?id=124722

        Reviewed by Gyuyoung Kim.

        The overloaded functions X11Helper::createPixmap don't initialise out
        value handleId, and they do early returns on error situations. Since
        the functions are void and they don't communicate their failure in any
        way, returning an out value without initialising it could make the
        error go farther unnoticed. With the variable being initialised, it can
        be reliably checked for errors when the function returns.

        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::createPixmap): Initialise handleId to 0.

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Mark URLRegistry's lookup() as const and its child classes as final
        https://bugs.webkit.org/show_bug.cgi?id=124865

        Reviewed by Eric Carlson.

        No new tests needed. No behavior changes.

        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::lookup): marked as const.
        * Modules/mediasource/MediaSourceRegistry.h: MediaSourceRegistry
        marked as final.
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::lookup): marked as const.
        * Modules/mediastream/MediaStreamRegistry.h: MediaStreamRegistry
        marked as final.
        * fileapi/Blob.cpp:
        * html/URLRegistry.h: lookup() marked as const.
        (WebCore::URLRegistry::lookup): marked as const.

2013-11-25  Sergio Correia  <sergio.correia@openbossa.org>

        [MediaStream] Use std::unique_ptr instead of OwnPtr/PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=124858

        Reviewed by Eric Carlson.

        Another step of the OwnPtr/PassOwnPtr => std::unique_ptr conversion,
        now targeting mediastream-related code.

        No new tests, covered by existing ones.

        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mediastream/MediaStreamSource.cpp:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mock/RTCNotifiersMock.cpp:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        MediaStreamRegistry should store MediaStreams instead of MediaStreamPrivates
        https://bugs.webkit.org/show_bug.cgi?id=124860

        Reviewed by Eric Carlson.

        MediaStreamRegistry::lookup() should return a MediaStream instead of MediaStreamPrivate.

        No new tests needed. No behavior changes.

        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registerURL): m_privateStreams -> m_mediaStreams
        (WebCore::MediaStreamRegistry::unregisterURL): Ditto.
        (WebCore::MediaStreamRegistry::lookup): Override URLRegistry::lookup() instead of add a
        new method MediaStream::lookupMediaStreamPrivate().
        * Modules/mediastream/MediaStreamRegistry.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::loadResource): call lookup() instead of lookupMediaStreamPrivate()

2013-11-25  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fails when GSTREAMER is not used.
        https://bugs.webkit.org/show_bug.cgi?id=124853

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp: Don't include GStreamerUtilities.h when GSTREAMER is not used.

2013-11-25  Andreas Kling  <akling@apple.com>

        Deduplicate shortish Text node strings during tree construction.
        <https://webkit.org/b/124855>

        Let HTMLConstructionSite keep a hash set of already seen strings over
        its lifetime. Use this to deduplicate the strings inside Text nodes
        for any string up to 64 characters of length.

        This optimization already sort-of existed for whitespace-only Texts,
        but those are laundered in the AtomicString table which we definitely
        don't want to pollute with every single Text. It might be a good idea
        to stop using the AtomicString table for all-whitespace Text too.

        3.82 MB progression on HTML5-8266 locally.

        Reviewed by Anders Carlsson.

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove unnecessary MediaStreamTrackDescriptor forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=124854

        Reviewed by Eric Carlson.

        No new tests needed. No behavior changed.

        * Modules/mediastream/VideoStreamTrack.h:

2013-11-25  Robert Hogan  <robert@webkit.org>

        Remove code now unnecessary after r159575
        https://bugs.webkit.org/show_bug.cgi?id=124809

        Reviewed by Antti Koivisto.

        Covered by existing tests fast/block/margin-collapse/self-collapsing-block-with-float*

        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):

2013-11-25  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Vertical border spacing is doubled between table row groups
        https://bugs.webkit.org/show_bug.cgi?id=20040

        Reviewed by Csaba Osztrogonác.

        Based on Chromium fix https://chromium.googlesource.com/chromium/blink/+/eb615069267f895c59bc576f9d65b3fa5add41e9

        Rebaseline needed for table related tests (100+).

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-11-25  Andres Gomez  <agomez@igalia.com>

        [GStreamer] Seeking fails on media content provided by servers not supporting Range requests
        https://bugs.webkit.org/show_bug.cgi?id=85994

        Reviewed by Philippe Normand.

        Based on the patch written by Andre Moreira Magalhaes.

        When the GStreamer web source was doing a "Range" request we were
        expecting to receive a 206 status reply with the "Content-Range"
        header and just the requested data. Supporting "Range" requests is
        not mandatory so, for the servers not supporting it they will be
        replying with a 200 status and the whole content of the media
        element. Now, we are properly handling these replies too.

        Test: http/tests/media/media-seeking-no-ranges-server.html

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Do not fail when
        receiving 200 as response for HTTP range requests.
        (StreamingClient::handleDataReceived): Manually seek on stream
        when receiving the full data after a seek.

2013-11-25  Radu Stavila  <stavila@adobe.com>

        Removed obsolete FIXME after the landing of visual overflow patch (https://bugs.webkit.org/show_bug.cgi?id=118665).
        https://bugs.webkit.org/show_bug.cgi?id=124833

        Reviewed by Mihnea Ovidenie.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::layoutBlock):

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Cache several vectors to avoid malloc/free churn
        https://bugs.webkit.org/show_bug.cgi?id=123995

        Reviewed by Dean Jackson.

        From Blink r158228 by <jchaffraix@chromium.org>

        Laying-out the grid items means a lot of calls to
        distributeSpaceToTracks() and
        resolveContentBasedTrackSizingFunctionsForItems() as they're
        called in a loop. This means that there is a lot of malloc/free
        going on there. By moving the vectors used by these methods to a
        new class which is kept during the whole layout process we save a
        lot of those calls.

        This obviously mean that the price we pay for a significant
        perfomance improvement is that we keep the maximum allocation till
        the end of each layout, but it's an amount of memory that we have
        to allocate anyway. The improvement in the
        auto-grid-lots-of-data.html perf test is ~24% (165 runs/s vs 207
        runs/s).

        No new tests required as we're just refactoring code to a new
        helper class. Nevertheless the performance improvement is backed
        by the perf test mentioned above.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridSizingData::GridSizingData):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::findChildLogicalPosition):
        * rendering/RenderGrid.h:

2013-11-24  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Add "UniqueIDBDatabase" that multiple WebProcesses can connect to
        https://bugs.webkit.org/show_bug.cgi?id=124819

        Reviewed by Dan Bernstein.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::~IDBDatabaseBackend): Unregister from the IDBFactory.

2013-11-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLMarquee|OListElement() to cleanup static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124707

        Reviewed by Darin Adler.

        As a step to use toFoo(), we need to generate toHTMLMarquee|OListElement().
        Besides this patch cleans up remaining static_cast<> usage.

        No new tests, no behavior changes.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initElement):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::findSiblingForStyleSharing):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        * html/HTMLMarqueeElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLTagNames.in:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):

2013-11-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r156291): TileController tiles don't always repaint when they resize
        https://bugs.webkit.org/show_bug.cgi?id=124796

        Reviewed by Simon Fraser.

        In removing platformCALayerDidCreateTiles, r156291 also removed
        the call to setNeedsDisplay when tiles are resized, without
        putting it somewhere else.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setNeedsDisplay):
        Use hasStaleContent when invalidating a whole tile, just
        like we do for partial tile repaints.

        (WebCore::TileController::setTileNeedsDisplayInRect):
        Mark hasStaleContent for any unparented layers, so they'll be painted
        when they are reparented.

        (WebCore::TileController::ensureTilesForRect):
        Invalidate the whole tile when it changes size.

2013-11-23  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Remove 0.10 codepath
        https://bugs.webkit.org/show_bug.cgi?id=124534

        Reviewed by Philippe Normand.

        All GStreamer ports are using 1.0 now so we remove the 0.10
        codepath.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters: Removed
        GStreamerVersioning.
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (onGStreamerWavparsePadAddedCallback): Removed.
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        Replaced webkitGstPipelineGetBus and removed 0.10 codepath.
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        Replaced webkitGstPipelineGetBus.
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::copyGstreamerBuffersToAudioChannel):
        (WebCore::onAppsinkPullRequiredCallback): Removed 0.10 codepath.
        (WebCore::AudioFileReader::~AudioFileReader): Replaced
        webkitGstPipelineGetBus and removed 0.10 codepath.
        (WebCore::AudioFileReader::handleSample): Left as only codepath.
        (WebCore::AudioFileReader::handleBuffer): Removed.
        (WebCore::AudioFileReader::handleNewDeinterleavePad): Removed 0.10
        codepath.
        (WebCore::AudioFileReader::plugDeinterleave): Replaced
        getGstAudioCaps.
        (WebCore::AudioFileReader::decodeAudioForBusCreation): Replaced
        webkitGstPipelineGetBus.
        (WebCore::AudioFileReader::createBus): Removed 0.10 codepath.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (getGStreamerMonoAudioCaps):
        (webKitWebAudioGStreamerChannelPosition): Removed 0.10 codepath.
        (webkit_web_audio_src_class_init): Replaced
        setGstElementClassMetadata.
        (webkit_web_audio_src_init):
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcFinalize):
        (webKitWebAudioSrcLoop): Removed 0.10 codepath.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::GstElement):
        (WTF::GstPad):
        (WTF::GstPadTemplate):
        (WTF::GstTask):
        (WTF::GstBus):
        (WTF::GstElementFactory):
        (WTF::adoptGRef): Replaced gstObjectIsFloating.
        (WTF::refGRef): Replaced webkitGstObjectRefSink.
        (WTF::GstTagList):
        (WTF::GstSample): Removed checks for 1.0 as it is the only
        codepath now.
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Removed checks
        for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::webkitGstGhostPadFromStaticTemplate):
        (WebCore::getVideoSizeAndFormatFromCaps):
        (WebCore::createGstBuffer):
        (WebCore::createGstBufferForData):
        (WebCore::getGstBufferDataPointer):
        (WebCore::mapGstBuffer):
        (WebCore::unmapGstBuffer): Moved here from GstVersioning and added
        to WebCore namespace.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        (WebCore::webkitGstCheckVersion): Moved here from GstVersioning
        and added to WebCore namespace.
        * platform/graphics/gstreamer/GStreamerVersioning.cpp: Removed.
        * platform/graphics/gstreamer/GStreamerVersioning.h: Removed.
        * platform/graphics/gstreamer/ImageGStreamer.h: Removed checks for
        1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer): Removed 0.10 codepath.
        (ImageGStreamer::~ImageGStreamer): Removed checks for 1.0 as it is
        the only codepath now.
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::setAudioStreamPropertiesCallback): Removed 0.10 codepath.
        (WebCore::mediaPlayerPrivateTextChangedCallback): Removed checks
        for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::isAvailable): Replaced
        gPlaybinName.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Removed checks for 1.0 and replaced webkitGstPipelineGetBus.
        (WebCore::MediaPlayerPrivateGStreamer::duration): Removed 0.10
        codepath.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        Removed checks for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::buffered): Replaced
        gPercentMax.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Removed
        0.10 codepath.
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents):
        Removed checks for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes): Removed 0.10
        codepath.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Replaced
        gPlaybinName and webkitGstPipelineGetBus and removed checks for
        1.0.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint): Removed 0.10
        codepath.
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        * platform/graphics/gstreamer/TextCombinerGStreamer.h:
        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        * platform/graphics/gstreamer/TextSinkGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Removed
        checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender): Removed 0.10 codepath and added WebCore
        as createGstBuffer namespace.
        (webkitVideoSinkSetCaps): Removed 0.10 codepath.
        (webkitVideoSinkProposeAllocation): Removed checks for 1.0 as it
        is the only codepath now.
        (webkitVideoSinkMarshalVoidAndMiniObject): Removed as it was 0.10.
        (webkit_video_sink_class_init): Removed 0.10 codepath and replaced
        setGstElementClassMetadata.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webkit_media_src_class_init): Replaced
        setGstElementClassMetadata.
        (webKitMediaSrcAddSrc): Added WebCore namespace to
        webkitGstGhostPadFromStaticTemplate.
        (MediaSourceClientGstreamer::didReceiveData): Added WebCore
        namespace to createGstBufferForData.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        Removed 0.10 codepath.
        (webKitWebSrcQuery): Removed as it was 0.10 only.
        (void webkit_web_src_class_init): Replaced setGstElementClassMetadata.
        (webkit_web_src_init): Removed haveAppSrc27 private attribute and
        0.10 codepath.
        (webKitWebSrcStop): Removed checks for 1.0 as it is the only
        codepath now.
        (webKitWebSrcSetProperty):
        (webKitWebSrcUriGetType):
        (webKitWebSrcGetProtocols):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri): Removed 0.10 codepath.
        (StreamingClient::createReadBuffer): Removed checks for 1.0 and
        replaced getGstBufferSize.
        (StreamingClient::handleResponseReceived): Removed 0.10 codepath
        and replaced notifyGstTagsOnPad.
        (StreamingClient::handleDataReceived): Removed 0.10 codepath and
        replaced setGstBufferSize and gst_buffer_get_size.

2013-11-22  Jer Noble  <jer.noble@apple.com>

        [Mac] Can't drag full-screen video to another monitor
        https://bugs.webkit.org/show_bug.cgi?id=124798

        Reviewed by Geoffrey Garen.

        Make full screen windows movable by default. Previously, we wanted non-movable full screen
        windows since they were in the same space and were just placed atop non-full screen windows.
        Now that all our supported Mac platforms have explicit full screen support, we can remove this
        non-movable restriction.

        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow initWithContentRect:styleMask:backing:defer:]):

2013-11-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Clean up ColorSpace handling in Windows code
        https://bugs.webkit.org/show_bug.cgi?id=124795

        Reviewed by Tim Horton.

        Functionality covered by existing fast/css/color test suite.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::safeRGBColorSpaceRef): Handle case of Windows CG implementation not
        handling sRGB correctly.
        (WebCore::sRGBColorSpaceRef): Use new helper function.
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Pass correct color space to fill functions.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::platformInit): Initialize color space to value passed
        via the style to the constructor.

2013-11-22  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto algorithms should check that key algorithm matches
        https://bugs.webkit.org/show_bug.cgi?id=123628

        Reviewed by Anders Carlsson.

        No change in behavior yet, because we have one algorithm per key class.
        Will be tested once more algorithms are added.

        * WebCore.xcodeproj/project.pbxproj: Updated for file renames.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaKeyParamsWithHash):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::createRSAKeyParametersWithHash):
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * crypto/CryptoAlgorithmParameters.h:
        (WebCore::CryptoAlgorithmParameters::ENUM_CLASS):
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h: Copied from Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Removed.
        Renamed RsaSsaKeyParams to RsaKeyParamsWithHash, because other algorithms (like RSA-OAEP)
        are in the same boat. Depending on where the spec goes, we might need to introduce
        algorithm specific RSA parameter classes later, but let's reduce copy/pasted code at
        least for now.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Moved to the correct directory.
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Copied from Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign): Factored out Mac specific
        code, leaving type casting to cross-platform files.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify): Ditto.

        * crypto/CryptoAlgorithmRegistry.h:
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Reduce copy/pasting in registration code.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::keyAlgorithmMatches): Check key type and algorithm.
        (WebCore::CryptoAlgorithmAES_CBC::encrypt): Cross platform type casting code.
        Maybe we'll find a way to autogenerate or eliminate it one day.
        (WebCore::CryptoAlgorithmAES_CBC::decrypt): Ditto.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        Same changes for all algorithms that have keys.

2013-11-22  Brendan Long  <b.long@cablelabs.com>

        Fire "change" event on TextTrackList when a TextTrack's mode changes
        https://bugs.webkit.org/show_bug.cgi?id=124789

        Reviewed by Eric Carlson.

        Since AudioTrackList and VideoTrackList already have this event, the
        interesting bits are in TrackListBase::scheduleChangeEvent(), and we
        just need to call it for TextTrackList changes.

        Test: media/track/track-change-event.html

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::textTrackModeChanged): Call TrackListBase::scheduleChangeEvent().
        * html/track/TextTrackList.idl: Add onchange event listener.

2013-11-22  Brendan Long  <b.long@cablelabs.com>

        Add TextTrackList::getTrackById().
        https://bugs.webkit.org/show_bug.cgi?id=124785

        Reviewed by Eric Carlson.

        Test: media/track/track-id.html

        * html/track/TextTrackList.cpp: Add getTrackById()
        (TextTrackList::getTrackById):
        * html/track/TextTrackList.h: Same.
        * html/track/TextTrackList.idl: Same.

2013-11-22  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] When the <box> value is set, derive radii from border-radius
        https://bugs.webkit.org/show_bug.cgi?id=124228

        Reviewed by Dean Jackson.

        Add support for BoxShape elliptical corners.

        Tests: fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-002.html

        * platform/graphics/FloatRoundedRect.h:
        (WebCore::FloatRoundedRect::bottomLeftCorner): Corrected a copy-and-pasteO.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedIntervals): Returned interval now depends on the top and bottom of the line.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Rounded rect parameters are now specified with a RoundedRect parameter.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Pass style's rounded border to createShape().

2013-11-22  Andres Gomez  <agomez@igalia.com>

        Several missing/incorrect guards for LOG_DISABLED=0 against Release build (Mac)
        https://bugs.webkit.org/show_bug.cgi?id=78735

        Reviewed by Mario Sanchez Prada.

        In a "Debug" build the CString.h header comes from another
        indirect dependency. Now, we explicitly add this missing include.

        * page/CaptionUserPreferencesMediaAF.cpp: Explicitly adding
        missing include.

2013-11-22  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Fix of SSL certificate chain storage
        https://bugs.webkit.org/show_bug.cgi?id=124768

        Reviewed by Brent Fulgham.

        Change the certificates storage type into ListHashSet
        from HashSet to keep the chain order in each case.
        This ensures that there is no difference between the stored
        and the recieved certificate chain.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):

2013-11-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Avoid deadlock when interacting with some AVFoundationCF content
        <rdar://problem/15482977> and https://bugs.webkit.org/show_bug.cgi?id=124752

        Prevent deadlock caused by conflict over the "mapLock" mutex. Notification handling in the file,
        which modify assets and make other changes, are required to happen on the main thread. This
        patch enforces this requirement.

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::NotificationCallbackData::NotificationCallbackData): Added
        (WebCore::AVFWrapper::processNotification): Moved logic from 'notificationCallback', which was
        sometimes happening on a background thread.
        (WebCore::AVFWrapper::notificationCallback): Dispatch calls to main thread.

2013-11-22  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error when ACCELERATED_COMPOSITING is not used.
        https://bugs.webkit.org/show_bug.cgi?id=124773

        Reviewed by Brent Fulgham.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations): Added USE(ACCELERATED_COMPOSITING) guard.

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Improve content-sized track layout
        https://bugs.webkit.org/show_bug.cgi?id=124408

        Reviewed by Dean Jackson.

        Test: fast/css-grid-layout/grid-item-with-percent-min-max-height-dynamic.html

        From Blink r156122 & r157633 by <jchaffraix@chromium.org>

        Added a couple of optimizations to speed up the layout of content
        based tracks. The idea is to narrow down the conditions for
        relayouting when the height of a grid area changes. We basically
        just need to layout tracks with percentage heights as they're the
        only ones that change.

        A new performance test is attached to demonstrate the effect of
        these optimizations. We get a ~1000% improvement on a i7 M620
        going from 14.5 runs/s to 165 runs/s.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::layoutGridItems):

2013-11-08  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Run the content-sized tracks sizing algorithm only when required
        https://bugs.webkit.org/show_bug.cgi?id=124039

        Reviewed by Dean Jackson.

        The current code runs the content sized track sizing algorithm all
        the time, which forces a layout even when the track is not
        content-sized. This change improves the situation by applying two
        optimizations. In the first one, we bail out the algorithm if we
        detect that we don't need to run it. And by the second one we
        reduce the amount of recomputations by only iterating over the
        content sized tracks instead of all of them. Both changes follow
        the ideas introduced in Blink r156028 and r156168 by
        <jchaffraix@chromium.org>.

        As we changed the way we iterate over children (we use the
        GridIterator now) the way they're stored in the RenderGrid changes
        too. If a item spans through several "cells" inside the grid, we
        will have a reference to it on each of them.

        These two changes account for a ~3200% improvement on a i7 M620 in
        the test that accompanies this change (15.5 vs 520 run/s).

        New perf test: PerformanceTests/Layout/fixed-grid-lots-of-data.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): Keep track
        of content sized tracks and only iterate over them.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Early return if there are no tracks to pass to the algorithm.
        * rendering/RenderGrid.h:
        * rendering/style/GridLength.h:
        (WebCore::GridLength::isContentSized):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::isContentSized):

2013-11-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Move code after early break in RenderRegion::repaintFlowThreadContentRectangle
        https://bugs.webkit.org/show_bug.cgi?id=124743

        Reviewed by Mihnea Ovidenie.

        No new tests, covered by existing tests.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle): Variable
        flippedFlowThreadPortionRect is not used before the early break, so we
        can move it after and save some unneeded operations.

2013-11-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Use hasOverflowClip() in RenderRegion
        https://bugs.webkit.org/show_bug.cgi?id=124746

        Reviewed by Mihnea Ovidenie.

        Implement the suggested FIXME in RenderRegion using hasOverflowClip().

        No new tests, covered by existing tests.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion): Use
        hasOverflowClip().
        (WebCore::RenderRegion::rectFlowPortionForBox): Ditto.

2013-11-21  Frédéric Wang  <fred.wang@free.fr>

        Map the dir attribute to the CSS direction property.
        https://bugs.webkit.org/show_bug.cgi?id=124572.

        Reviewed by Darin Adler.

        Test: mathml/presentation/mstyle-css-attributes.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute): reorder attributes
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): reorder tags that accept dir
        (WebCore::MathMLElement::isMathMLToken): add an inline function to test that a tag corresponds to a MathML Token Element.
        * mathml/MathMLElement.h:

        Follow-up work to address Darin's comments.

2013-11-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove ENABLE_WORKERS
        https://bugs.webkit.org/show_bug.cgi?id=105784

        Reviewed by Darin Adler.

2013-11-21  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r159632.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::certVerifyCallback):
        Fixed template syntax.

2013-11-21  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Refactor highlighting code to decrease Shapes API surface
        https://bugs.webkit.org/show_bug.cgi?id=124737

        Reviewed by Timothy Hatcher.

        Add a virtual method to Shapes, buildPath, that can be used to build the
        path (in the Shape coordinate system) for display in the Inspector. This allows us
        to remove methods such as type(), polygon(), and logicalRx/Ry() which exposed the
        inner workings of the Shapes classes. Also covers the addition of the BoxShape type.

        Refactoring, existing test is inspector-protocol/model/highlight-shape-outside.html.

        * inspector/InspectorOverlay.cpp:
        (WebCore::appendPathCommandAndPoints): Points need to be translated from shape space
        to renderer space using ShapeInfo.
        (WebCore::buildObjectForShapeOutside): Add the ShapeOutsideInfo to the path info struct.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::buildPath): Build the path for a BoxShape.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::buildPath): Build the path for a PolygonShape.
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::buildPath): Build the path for a RectangleShape.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124702> Stop overriding VALID_ARCHS.

        All modern versions of Xcode set it appropriately for our needs.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Gwang Yoon Hwang  <ryumiel@company100.net>

        [GTK] Unreviewed buildfix after r159614 and r159656.

        * bindings/gobject/WebKitDOMCustom.cpp: Add missing header

2013-11-21  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Fix WinCairo unreachable code warnings in SimpleLineLayout.cpp
        https://bugs.webkit.org/show_bug.cgi?id=124704

        Reviewed by Antti Koivisto.

        Fix unreachable code warnings using conditional directives.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124701> Fix an error in a few Xcode configuration setting files.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124700> Fix some deprecation warnings.

        Reviewed by Anders Carlsson.

        * platform/mac/HTMLConverter.mm:
        (fileWrapperForURL): Move off a deprecated NSFileWrapper method.

2013-11-21  Daniel Bates  <dabates@apple.com>

        [iOS] Build fix; export symbol for WebCore::provideDeviceOrientationTo()

        Add the symbol __ZN7WebCore26provideDeviceOrientationToEPNS_4PageEPNS_23DeviceOrientationClientE.

        * WebCore.exp.in:

2013-11-21  Daniel Bates  <dabates@apple.com>

        Add !USE(NETWORK_CFDATA_ARRAY_CALLBACK)-guard
        https://bugs.webkit.org/show_bug.cgi?id=124741

        Reviewed by Alexey Proskuryakov.

        Add !USE(NETWORK_CFDATA_ARRAY_CALLBACK)-guard around code that is unused
        when building with feature NETWORK_CFDATA_ARRAY_CALLBACK.

        Additionally, add a declaration for allocateSegment() with attribute WARN_UNUSED_RETURN
        to have the compiler warn when the return value of this function is unused. Together with
        warnings treated as errors this change will prevent a memory leak.

        * platform/SharedBuffer.cpp:

2013-11-21  Daniel Bates  <dabates@apple.com>

        Remove unused functions from WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=124739

        Reviewed by Alexey Proskuryakov.

        * editing/markup.cpp: Remove unused functions isHTMLBlockElement and
        ancestorToRetainStructureAndAppearanceWithNoRenderer.
        * rendering/InlineElementBox.cpp: Append newline to the end of the file.

2013-11-21  Daniel Bates  <dabates@apple.com>

        Only generate isObservable() when IDL specifies GenerateIsReachable
        https://bugs.webkit.org/show_bug.cgi?id=124729

        Reviewed by Geoffrey Garen.

        We should only generate the static inline function isObservable() when the IDL
        specifies GenerateIsReachable. Otherwise, this function is unused.

        Added a new test IDL TestGenerateIsReachable.idl and expected results to test that
        we generate isObservable() when an IDL specifies GenerateIsReachable. Additionally,
        rebased existing test results.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachablePrivate.h: Added.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Removed unused function isObservable().
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestException.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Removed unused function isObservable().
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
        * bindings/scripts/test/JS/JSattribute.cpp: Ditto.
        * bindings/scripts/test/JS/JSreadonly.cpp: Ditto.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h: Added.
        * bindings/scripts/test/TestGenerateIsReachable.idl: Added.

2013-11-21  Beth Dakin  <bdakin@apple.com>

        Add a new mode to extend the tile cache beyond the page
        https://bugs.webkit.org/show_bug.cgi?id=124216

        Reviewed by Simon Fraser.

        This patch makes it possible to give the tile cache a margin of tiles. If there is 
        a margin of tiles, this patch paints those tiles with the background color. Note 
        that this patch does not actually give the tile cache a margin at this time.

        You opt into a margined tiled cache by called setTileMargins() with number of 
        pixels that the margin on that side should be. 
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):

        TileController::bounds() now computes the bounds INCLUDING the margin.
        (WebCore::TileController::bounds):

        adjustRectAtTileIndexForMargin() is a new function that is required to get the 
        rect size for tiles in the margin right. rectForTileIndex() assumes all tiles 
        strive to be the size of m_tileSize, but now margin tiles will be whatever the 
        margin sizes were set to.
        (WebCore::TileController::adjustRectAtTileIndexForMargin):
        (WebCore::TileController::rectForTileIndex):

        This is another instance where m_tileSize is not always the right size to use.
        (WebCore::TileController::getTileIndexRangeForRect):

        The tile coverage rect now might include the margin tiles. Only include them in 
        slow-scrolling mode if the current position is within one tile of the edge.
        (WebCore::TileController::computeTileCoverageRect):

        tileSizeForCoverageRect() does not make sense in a world where the coverage rect 
        will include margin. Instead, this patch implements the current strategy more 
        explicitly by returning the visibleRect in the slow scrolling case, and in the 
        process this patch also re-names tileSizeForCoverageRect() to computeTileSize() 
        since it no longer takes a coverageRect.
        (WebCore::TileController::computeTileSize):
        (WebCore::TileController::revalidateTiles):

        New setters and getters for the tile margins on each side.
        (WebCore::TileController::setTileMargins):
        (WebCore::TileController::hasMargins):
        (WebCore::TileController::topMarginHeight):
        (WebCore::TileController::bottomMarginHeight):
        (WebCore::TileController::leftMarginWidth):
        (WebCore::TileController::rightMarginWidth):

        New function to add margin onto the composited bounds if there is one.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::tiledBackingHasMargin):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::compositedBoundsIncludingMargin):
        * rendering/RenderLayerBacking.h:

        Do not set masks to bounds if there is a margin on the root layer.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::mainFrameBackingIsTiledWithMargin):
        * rendering/RenderLayerCompositor.h:

        Allow background color to paint into the margin tiles.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2013-11-21  Alexey Proskuryakov  <ap@apple.com>

        Implement WebCrypto wrapKey
        https://bugs.webkit.org/show_bug.cgi?id=124738

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-wrap-rsa-non-extractable.html
               crypto/subtle/aes-cbc-wrap-rsa.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::exportKey): Factored out the actual operation that can be chained with
        encryption for wrapKey.
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey): Fixed a memory leak in failure code path.

        * crypto/SubtleCrypto.idl: Added wrapKey.

2013-11-21  Alexey Proskuryakov  <ap@apple.com>

        Implement WebCrypto unwrapKey
        https://bugs.webkit.org/show_bug.cgi?id=124725

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-unwrap-failure.html
               crypto/subtle/aes-cbc-unwrap-rsa.html

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        * bindings/js/JSCryptoAlgorithmDictionary.h:
        Removed calls for wrap/unwrap parameter parsing, these are just the same as encrypt/decrypt.

        * bindings/js/JSCryptoOperationData.cpp:
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSCryptoOperationData.h:
        * crypto/CryptoKeySerialization.h:
        More Vector<char> elimination.

        * bindings/js/JSDOMPromise.cpp:
        * bindings/js/JSDOMPromise.h:
        Removed unneccessary copy constructor and assignment operator, they are no diffdrent
        than compiler generated ones.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::cryptoKeyUsagesFromJSValue): Minor style fixes.
        (WebCore::JSSubtleCrypto::encrypt): Ditto.
        (WebCore::JSSubtleCrypto::decrypt): Ditto.
        (WebCore::JSSubtleCrypto::sign): Ditto.
        (WebCore::JSSubtleCrypto::verify): Ditto.
        (WebCore::JSSubtleCrypto::generateKey): Ditto.
        (WebCore::importKey): Separated actual import operation and the parts that read
        arguments from ExecState, and call the promise. Logically, this should be outside
        of bindings code even, but JWK makes that quite challenging.
        (WebCore::JSSubtleCrypto::importKey): This only does the more mundane arguments
        and return parts now.
        (WebCore::JSSubtleCrypto::exportKey): Minor style fixes.
        (WebCore::JSSubtleCrypto::unwrapKey): Chain decrypt and import.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encryptForWrapKey):
        (WebCore::CryptoAlgorithm::decryptForUnwrapKey):
        * crypto/CryptoAlgorithm.h:
        There are algorithms that expose wrap/unwrap, but not encrypt/decrypt. These will
        override these new functions, and leave encrypt/decrypt to raise NOT_SUPPORTED_ERR.

        * crypto/SubtleCrypto.idl: Added unwrapKey.

2013-11-21  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl]Improve ssl certificate storage and check
        https://bugs.webkit.org/show_bug.cgi?id=124569

        Reviewed by Brent Fulgham.

        Storage and check the whole certificate chain, not just the root certificate.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):

2013-11-21  Mihai Maerean  <mmaerean@adobe.com>

        Fix hover area for divs with css transforms
        https://bugs.webkit.org/show_bug.cgi?id=124647

        Reviewed by Allan Sandfeld Jensen.

        Non transformed layers are now being hit last, not through or in-between transformed layers.
        The paint order says that the divs creating stacking contexts (including transforms) are painted after the
        other siblings so they should be hit tested in the reverse order. Also, a rotated div in a non-rotated parent
        should be hit in its entire area, not hit its parent's background, even if the z-coordinate is negative where
        the mouse is located.

        Test: transforms/3d/hit-testing/hover-rotated-negative-z.html

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

2013-11-21  Andres Gomez  <agomez@igalia.com>

        [GTK] Release compilation fails when defining "LOG_DISABLED=0"
        https://bugs.webkit.org/show_bug.cgi?id=124661

        Reviewed by Mario Sanchez Prada.

        In a "Debug" build the CString.h header comes from another
        indirect dependency. Now, we explicitly add this missing include.

        * html/HTMLTrackElement.cpp: Explicitly adding missing include.

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        Fix Range.insertNode when the inserted node is in the same container as the Range
        https://bugs.webkit.org/show_bug.cgi?id=123957

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/fb6ca1f488703e8d4f20ce6449cc8ea210be6edb

        When a node from the same container is inserted, we can't simply adjust m_end with the offset.
        Compute m_start and m_end from the inserted nodes instead.

        Also, don't adjust m_start and m_end to nodes outside of the document if the inserted nodes had been
        removed by mutation events.

        Test: fast/dom/Range/range-insertNode-same-container.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode):

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        nextBoundary and previousBoundary are very slow when there is a password field
        https://bugs.webkit.org/show_bug.cgi?id=123973

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/57366eec5e3edea54062d4e74c0e047f8681dbad

        When iterating through DOM nodes nextBoundary and previousBoundary convert the contents of nodes using
        text security to a sequence of 'x' characters. The SimplifiedBackwardsTextIterator and TextIterator
        may iterate past node boundaries. Before this patch, the transformation was done looking at the starting
        node rather than the current node. In some situations, this replaced all boundaries with 'x' and caused
        the text iterator to continue iterating and transforming until the extent of the document.

        Test: editing/deleting/password-delete-performance.html

        * editing/TextIterator.h:
        (WebCore::SimplifiedBackwardsTextIterator::node):
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        HTML parser should not associate elements inside templates with forms
        https://bugs.webkit.org/show_bug.cgi?id=117779

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/45aadf7ee7ee010327eb692066cf013315ef3ed7

        When parsing <form><template><input>, the previous behavior was to associate the <input> with the <form>,
        even though they're not in the same tree (or even the same document).

        This patch changes that by checking, prior to creating a form control element, whether the element to be
        created lives in a document with a browsing context.

        We don't update m_form as needed to faithfully match the HTML5 specification's form element pointer
        http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#form-element-pointer
        and its algorithm for creating and inserting nodes:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#creating-and-inserting-nodes

        While this leaves isindex's reference to form element pointer stale:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#isindex
        The HTML5 specification matches the behaviors of Chrome and Firefox so we leave it as is.

        Test: fast/dom/HTMLTemplateElement/no-form-association.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElement):

2013-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cannot scroll in option menu when it larger than the screen
        https://bugs.webkit.org/show_bug.cgi?id=124671

        Reviewed by Martin Robinson.

        The problem is that the popup menu is not resized to fit in the
        screen, so it doesn't scroll and some of the items are offscreen
        so they can't be selected either. GTK+ automatically resizes the
        popup menus to fit in the work area, but only when the menu is
        already positioned.

        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::popUp): Schedule a resize of the popup
        menu right after showing it once it has a position.

2013-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mark all deprecated symbols in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=124406

        Reviewed by Gustavo Noronha Silva.

        Move deprecated API from WebKitDOMCustom to a new file
        WebKitDOMDeprecated leaving in WebKitDOMCustom only the
        non-deprecated API that is not autogenerated. Also added the
        deprecation decorations and tags in the documentation.

        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitDOMCustom.cpp:
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:
        * bindings/gobject/WebKitDOMDeprecated.cpp: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.cpp.
        (webkit_dom_blob_webkit_slice):
        (webkit_dom_html_element_get_id):
        (webkit_dom_html_element_set_id):
        (webkit_dom_html_element_get_class_name):
        (webkit_dom_html_element_set_class_name):
        (webkit_dom_html_element_get_class_list):
        (webkit_dom_html_form_element_dispatch_form_change):
        (webkit_dom_html_form_element_dispatch_form_input):
        (webkit_dom_webkit_named_flow_get_overflow):
        (webkit_dom_element_get_webkit_region_overflow):
        (webkit_dom_webkit_named_flow_get_content_nodes):
        (webkit_dom_webkit_named_flow_get_regions_by_content_node):
        (webkit_dom_bar_info_get_property):
        (webkit_dom_bar_info_class_init):
        (webkit_dom_bar_info_init):
        (webkit_dom_bar_info_get_visible):
        (webkit_dom_console_get_memory):
        (webkit_dom_css_style_declaration_get_property_css_value):
        (webkit_dom_document_get_webkit_hidden):
        (webkit_dom_document_get_webkit_visibility_state):
        (webkit_dom_html_document_open):
        (webkit_dom_html_element_set_item_id):
        (webkit_dom_html_element_get_item_id):
        (webkit_dom_html_element_get_item_ref):
        (webkit_dom_html_element_get_item_prop):
        (webkit_dom_html_element_set_item_scope):
        (webkit_dom_html_element_get_item_scope):
        (webkit_dom_html_element_get_item_type):
        (webkit_dom_html_style_element_set_scoped):
        (webkit_dom_html_style_element_get_scoped):
        (webkit_dom_html_properties_collection_get_property):
        (webkit_dom_html_properties_collection_class_init):
        (webkit_dom_html_properties_collection_init):
        (webkit_dom_html_properties_collection_item):
        (webkit_dom_html_properties_collection_named_item):
        (webkit_dom_html_properties_collection_get_length):
        (webkit_dom_html_properties_collection_get_names):
        (webkit_dom_node_get_attributes):
        (webkit_dom_node_has_attributes):
        (webkit_dom_memory_info_get_property):
        (webkit_dom_memory_info_class_init):
        (webkit_dom_memory_info_init):
        (webkit_dom_memory_info_get_total_js_heap_size):
        (webkit_dom_memory_info_get_used_js_heap_size):
        (webkit_dom_memory_info_get_js_heap_size_limit):
        (webkit_dom_micro_data_item_value_class_init):
        (webkit_dom_micro_data_item_value_init):
        (webkit_dom_performance_get_memory):
        (webkit_dom_property_node_list_get_property):
        (webkit_dom_property_node_list_class_init):
        (webkit_dom_property_node_list_init):
        (webkit_dom_property_node_list_item):
        (webkit_dom_property_node_list_get_length):
        (webkit_dom_html_media_element_get_start_time):
        (webkit_dom_html_media_element_get_initial_time):
        (webkit_dom_html_head_element_get_profile):
        (webkit_dom_html_head_element_set_profile):
        (webkit_dom_processing_instruction_get_data):
        (webkit_dom_processing_instruction_set_data):
        * bindings/gobject/WebKitDOMDeprecated.h: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.h.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Do not include deprecation guards in the cpp file.
        * bindings/scripts/gobject-generate-headers.pl: Do not create
        fordward declarations for non-existent classes like Custom and
        Deprecated.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event):

2013-11-20  Jae Hyun Park  <jae.park@company100.net>

        [CoordinatedGraphics] Use std::unique_ptrs rather than OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=124692

        Reviewed by Noam Rosenthal.

        No new tests, covered by existing ones.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        * platform/graphics/TiledBackingStore.h:
        * platform/graphics/TiledBackingStoreBackend.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createBackingStore):
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:

2013-11-20  Brady Eidson  <beidson@apple.com>

        Add more infrastructure for ServerConnection communication between Web and Database processes
        https://bugs.webkit.org/show_bug.cgi?id=124693

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Hoist <template> to head when found between </head> and <body> for consistency with <script>
        https://bugs.webkit.org/show_bug.cgi?id=123949

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/835fb468fd211054a920fb7612a6dc5043662495

        Move template elements between head and body elements into the head to be consistent with script elements.
        The HTML5 specification was changed in http://html5.org/tools/web-apps-tracker?from=8217&to=8218.

        Inline comments below are cited from https://www.w3.org/Bugs/Public/show_bug.cgi?id=23002
        and https://codereview.chromium.org/25900003 for clarity.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag): Add the template element to the list of elements to be hoisted into
        the head element.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):

        Replace the assertion that isParsingFragment is true when item->node() == m_tree.openElements()->rootNode() since,
        with this change, we can now invoke resetInsertionMode when parsing a normal document (not fragment) and there is
        only the html element on the stack of open elements.

        For the second change, consider: <head></head><template>

        This example breaks in the old HTML parser because the template element is handled by "after head" state which
        pushes the head element back on, processes the template element for "in head", then pops the head element off.
        EOF is reached, which processes a fake close tag for the template element, which pops the template element off
        and resets the insertion mode appropriately

        The problem here is that "reset the insertion mode" is going to inspect the bottom-most element on the stack which
        is now the html element and it will set the mode to "before head". Nothing good happens after this.

        We fix this problem by having the reset algorithm check if the head element pointer is set, and if so, go to after
        head instead of before head.

2013-11-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Implement visual overflow for first & last regions
        https://bugs.webkit.org/show_bug.cgi?id=118665

        In order to properly propagate the visual overflow of elements flowed inside regions, 
        the responsiblity of painting and hit-testing content inside flow threads has been
        moved to the flow thread layer's level.
        Each region keeps the associated overflow with each box in the RenderBoxRegionInfo
        structure, including one for the flow thread itself. This data is used during
        painting and hit-testing.

        Reviewed by David Hyatt.

        Tests: fast/regions/overflow-first-and-last-regions-in-container-hidden.html
               fast/regions/overflow-first-and-last-regions.html
               fast/regions/overflow-nested-regions.html
               fast/regions/overflow-region-float.html
               fast/regions/overflow-region-inline.html
               fast/regions/overflow-region-transform.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideRegionRange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
        (WebCore::RenderFlowThread::flipForWritingModeLocalCoordinates):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsVisualOverflow):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::updateDescendantsLayerListsIfNeeded):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        (WebCore::RenderLayer::paintNamedFlowThreadInsideRegion):
        (WebCore::RenderLayer::paintFlowThreadIfRegion):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::inflateX):
        (WebCore::ClipRect::inflateY):
        (WebCore::ClipRect::inflate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::flowThreadPortionLocation):
        (WebCore::RenderRegion::regionContainerLayer):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        [HTML parser] reset insertion mode appropriate must check for "in select in table" mode
        https://bugs.webkit.org/show_bug.cgi?id=123850

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/2cb7523df57dfb48111f6aa16b7138cd54024ba7

        The HTML specification has been updated to detect encountering a template element inside of a select element,
        which in turn is inside of a table element. In this case, the select element will cause the parser to be in
        "InSelectInTable" mode. Thus when the template element closes, it should return to that mode.

        The fix here is that resetInsertionModeAppropriately must continue looking up the stack if the first node is
        select element to see whether the select element is inside of a table element.

        See also: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reset-the-insertion-mode-appropriately

        Test: html5lib/resources/template.dat

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

2013-11-20  Mark Lam  <mark.lam@apple.com>

        Build fix for last commit.
        https://bugs.webkit.org/show_bug.cgi?id=124634.

        Not reviewed.

        No new tests.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:

2013-11-20  Mark Lam  <mark.lam@apple.com>

        Introducing VMEntryScope to update the VM stack limit.
        https://bugs.webkit.org/show_bug.cgi?id=124634.

        Reviewed by Geoffrey Garen.

        No new tests.

        Renamed dynamicGlobalObject() to vmEntryGlobalObject().
        Replaced uses of DynamicGlobalObjectScope with VMEntryScope.

        * ForwardingHeaders/runtime/VMEntryScope.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::firstDOMWindow):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::vmEntryGlobalObject):
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::evaluateBreakpointAction):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::convertValueToObjcObject):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):

2013-11-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLFooElement() to clean up static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124571

        Reviewed by Ryosuke Niwa.

        Though there are a lot of clean up commits before, there are still
        use of static_cast<HTMLFooElement*>. To clean up them, we need to generate
        toHTMLDetails|Meta|Summary|TableCaptionElement().

        Additionally, other static_cast<> are removed as well.

        No new tests, no behavior changes.

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Clear TemplateContentDocumentFragment::m_host when HTMLTemplateElement is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=122806

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/858ed5f6341de9d900768c1f4668fcfce870c52e

        The document fragment of a template element outlives the element itself.
        Clear the host property on the document fragment when that happens.

        Test: fast/dom/HTMLTemplateElement/content-outlives-template-crash.html

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

2013-11-20  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement CSS -webkit-alt property (text alternative for generated content pseudo-elements ::before and ::after)
        https://bugs.webkit.org/show_bug.cgi?id=120188

        Reviewed by Dean Jackson.

        Add a -webkit-alt CSS property that can be used to label Image content or Text content for accessibility clients.

        To accomplish this, it sets the string in the RenderStyle. Then when the ContentData creates an anonymous renderer,
        it sets that string on the TextFragment or RenderImage, which can be queried by accessibility code.

        Test: platform/mac/accessibility/webkit-alt-for-css-content.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::objectInclusionFromAltText):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::altTextToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAlt):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::altText):
        (WebCore::RenderImage::setAltText):
        * rendering/RenderTextFragment.h:
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        (WebCore::TextContentData::createRenderer):
        * rendering/style/ContentData.h:
        (WebCore::ContentData::setAltText):
        (WebCore::ContentData::altText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        (WebCore::RenderStyle::setContentAltText):
        (WebCore::RenderStyle::contentAltText):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.h:

2013-11-20  Roger Fong  <roger_fong@apple.com>

        Use compile flag SH_UNFOLD_SHORT_CIRCUIT when compiling shaders.
        https://bugs.webkit.org/show_bug.cgi?id=124684.

        Reviewed by Brent Fulgham.

        Existing test webgl/1.0.2/conformance/glsl/misc/shader-with-short-circuiting-operators.html

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

2013-11-20  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Improve detecting and handling of SSL related errors
        https://bugs.webkit.org/show_bug.cgi?id=119436

        Reviewed by Brent Fulgham.

        Set the exact SSL verification error on CURL
        and store the enabled domain with certificate.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::sslErrors):
        (WebCore::ResourceError::setSSLErrors):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/SSLHandle.cpp: Added.
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::sslCertificateFlag):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):
        (WebCore::sslctxfun):
        (WebCore::setSSLVerifyOptions):
        * platform/network/curl/SSLHandle.h: Added.

2013-11-20  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Parse new circle shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124618

        Reviewed by Antti Koivisto.

        Implement parsing of the new cicle shape syntax. The implementation of
        the old syntax has been move aside as deprecated, and will be removed
        once the new syntax is stable.

        Updated existing parsing tests to cover this.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate): Create a CSSPrimitiveValue from a
            BasicShapeCenterCoordinate.
        (WebCore::valueForBasicShape): Convert new basic shape and rename old
            one.
        (WebCore::convertToCenterCoordinate): Create a
            BasicShapeCenterCoordinate from a CSSPrimitiveValue.
        (WebCore::basicShapeForValue): Convert new shape value and rename old
            one.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Build a new circle string.
        (WebCore::CSSBasicShapeCircle::cssText): Serialize the new circle
            shape.
        (WebCore::CSSBasicShapeCircle::equals): Compare new circle shapes.
        (WebCore::CSSBasicShapeCircle::serializeResolvingVariables):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShapeCircle::CSSBasicShapeCircle): Add class for new
            circle shape.
        (WebCore::CSSDeprecatedBasicShapeCircle::create): Renamed to move out
            of the way of the new circle implementation.
        (WebCore::CSSDeprecatedBasicShapeCircle::centerX): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::centerY): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::radius): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setCenterX): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setCenterY): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setRadius): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::CSSDeprecatedBasicShapeCircle): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeRadius): Parse the radius for the new
            circle syntax. Will also be used by the new ellipse syntax.
        (WebCore::CSSParser::parseBasicShapeCircle): Parse the new circle
            syntax.
        (WebCore::CSSParser::parseDeprecatedBasicShapeCircle): Rename to make
            way for the new implementation.
        (WebCore::isDeprecatedBasicShape): Check if we have a new circle or an
            old circle.
        (WebCore::CSSParser::parseBasicShape): Update to parse the new circle
            syntax.
        * css/CSSParser.h:
        * css/CSSValueKeywords.in: Add support for the new circle keywords.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): 
        * rendering/style/BasicShapes.cpp: Deprecate old circle and add stub
            for layout code.
        (WebCore::DeprecatedBasicShapeCircle::path): Rename to make way for
            the new implementation.
        (WebCore::DeprecatedBasicShapeCircle::blend): Rename to make way for
            the new implementation.
        (WebCore::BasicShapeCircle::path): Create path for new circle shape.
        (WebCore::BasicShapeCircle::blend): Interpolate the new circle shape.
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::BasicShapeCenterCoordinate):
            Represent an x or y coordinate for the center of a new circle,
            since it can be either a keyword along with an offset that cannot
            be resolved until layout time or an ordinary Length. This will
            also be used by the new ellipse implementation.
        (WebCore::BasicShapeCenterCoordinate::keyword):
        (WebCore::BasicShapeCenterCoordinate::length):
        (WebCore::BasicShapeCenterCoordinate::blend): Interpolate.
        (WebCore::BasicShapeRadius::BasicShapeRadius): Represent the radius of
            a new circle shape since it can either be a straightforward Length or
            a keyword that cannot be resolved until layout time.
        (WebCore::BasicShapeRadius::value):
        (WebCore::BasicShapeRadius::type):
        (WebCore::BasicShapeRadius::blend): Interpolate.
        (WebCore::BasicShapeCircle::centerX):
        (WebCore::BasicShapeCircle::centerY):
        (WebCore::BasicShapeCircle::radius):
        (WebCore::BasicShapeCircle::setCenterX):
        (WebCore::BasicShapeCircle::setCenterY):
        (WebCore::BasicShapeCircle::setRadius):
        (WebCore::BasicShapeCircle::BasicShapeCircle): New circle class.
        (WebCore::DeprecatedBasicShapeCircle::create): Rename to make room for
            new circle implementation.
        (WebCore::DeprecatedBasicShapeCircle::DeprecatedBasicShapeCircle): Ditto.

2013-11-20  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Add BoxShape and FloatRoundingRect classes
        https://bugs.webkit.org/show_bug.cgi?id=124368

        Reviewed by Dean Jackson.

        Added the BoxShape class. It's now used to represent shape-outside box
        values: [margin/border/padding/content]-box. BoxShape depends on a new
        FloatRoundedRect class, which is a float analog of the existing (int)
        RoundedRect class. The FloatRoundedRect class contains the same basic
        methods and accessors as BorderRect and adds a set of four methods,
        for example topLeftCorner(), that return a FloatRect that represents the
        bounds of one elliptical corner. I also added a method, xInterceptsAtY()
        that returns two X coordinates of the intersection between a horizontal
        line and the rounded rectangle.

        No new tests, this is just an internal refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatRoundedRect.cpp: Added.
        (WebCore::FloatRoundedRect::FloatRoundedRect):
        (WebCore::FloatRoundedRect::Radii::isZero):
        (WebCore::FloatRoundedRect::Radii::scale):
        (WebCore::FloatRoundedRect::Radii::expand):
        (WebCore::cornerRectIntercept):
        (WebCore::FloatRoundedRect::xInterceptsAtY):
        * platform/graphics/FloatRoundedRect.h: Added.
        (WebCore::FloatRoundedRect::Radii::Radii):
        (WebCore::FloatRoundedRect::Radii::setTopLeft):
        (WebCore::FloatRoundedRect::Radii::setTopRight):
        (WebCore::FloatRoundedRect::Radii::setBottomLeft):
        (WebCore::FloatRoundedRect::Radii::setBottomRight):
        (WebCore::FloatRoundedRect::Radii::topLeft):
        (WebCore::FloatRoundedRect::Radii::topRight):
        (WebCore::FloatRoundedRect::Radii::bottomLeft):
        (WebCore::FloatRoundedRect::Radii::bottomRight):
        (WebCore::FloatRoundedRect::Radii::expand):
        (WebCore::FloatRoundedRect::Radii::shrink):
        (WebCore::FloatRoundedRect::rect):
        (WebCore::FloatRoundedRect::radii):
        (WebCore::FloatRoundedRect::isRounded):
        (WebCore::FloatRoundedRect::isEmpty):
        (WebCore::FloatRoundedRect::setRect):
        (WebCore::FloatRoundedRect::setRadii):
        (WebCore::FloatRoundedRect::move):
        (WebCore::FloatRoundedRect::inflate):
        (WebCore::FloatRoundedRect::expandRadii):
        (WebCore::FloatRoundedRect::shrinkRadii):
        (WebCore::FloatRoundedRect::topLeftCorner):
        (WebCore::FloatRoundedRect::topRightCorner):
        (WebCore::FloatRoundedRect::bottomLeftCorner):
        (WebCore::FloatRoundedRect::bottomRightCorner):
        (WebCore::operator==):
        * rendering/shapes/BoxShape.cpp: Added.
        (WebCore::BoxShape::BoxShape):
        (WebCore::BoxShape::getExcludedIntervals):
        (WebCore::BoxShape::getIncludedIntervals):
        (WebCore::BoxShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/BoxShape.h: Added.
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape):
        (WebCore::Shape::createShape):

2013-11-20  Antti Koivisto  <antti@apple.com>

        Simple line layout should support floats
        https://bugs.webkit.org/show_bug.cgi?id=124666

        Reviewed by Dave Hyatt.

        Tests: fast/text/simple-lines-float-compare.html
               fast/text/simple-lines-float.html

        * rendering/line/LineWidth.h:
        (WebCore::LineWidth::logicalLeftOffset):
        
            Expose the left offset so we don't need to recompute it.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::computeLineLeft):
        
            Include the left offset from floats.

        (WebCore::SimpleLineLayout::createTextRuns):
        
            Keep the flow height updated during the loop as LineWidth reads the current position from there.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        
            We now bake the border and the padding to the line left offset. No need to add it during resolve.

2013-11-20  Alexey Proskuryakov  <ap@apple.com>

        Use std::function callbacks in CryptoAlgorithm instead of JS promises
        https://bugs.webkit.org/show_bug.cgi?id=124673

        Reviewed by Anders Carlsson.

        To implement key wrapping/unwrapping, we'll need to chain existing operations.
        It's much easier to do with C++ callbacks than with functions fulfilling JS
        promises directly.

        Also, this will decouple CryptoAlgorithm from JS, which is nice.

        SubtleCrypto IDL says that all functions return Promise<any>, but in reality,
        there is very little polymorphism, the only function whose return type depends
        on algorithm is generateKey (it can create a Key or a KeyPair).

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::PromiseWrapper::PromiseWrapper):
        (WebCore::PromiseWrapper::operator=):
        * bindings/js/JSDOMPromise.h:
        Made it copyable, as each crypto function wraps the promise in success and failure
        functional objects now.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::generateKey):
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::digest):
        (WebCore::CryptoAlgorithm::generateKey):
        (WebCore::CryptoAlgorithm::deriveKey):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):

2013-11-20  Robert Hogan  <robert@webkit.org>

        REGRESSION(r127163): Respect clearance set on ancestors when placing floats
        https://bugs.webkit.org/show_bug.cgi?id=119979

        Reviewed by David Hyatt.

        Refactor the way self-collapsing blocks with clearance are positioned so that they
        get the correct logical-top position during margin-collapsing.

        Test: fast/block/margin-collapse/self-collapsing-block-with-float-descendants.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::marginOffsetForSelfCollapsingBlock):
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        * rendering/RenderBlockFlow.h:

2013-11-20  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK] Remove Chromium as user agent and claim to be Safari in OS X
        https://bugs.webkit.org/show_bug.cgi?id=124229

        Reviewed by Martin Robinson.

        http://www.duolingo.com/ doesn't get render correctly because it uses
        Chrome/Chromium specific variables, added after it was forked. Because
        of this, it is necessary to remove the Chrome/Chromium identification
        in the user agent. Also, from now on, by default, The GTK+ port will
        claim to be Safari in OS X to avoid loading wrong resources.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent):

2013-11-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159551.
        http://trac.webkit.org/changeset/159551
        https://bugs.webkit.org/show_bug.cgi?id=124669

        made many tests asserts (Requested by anttik on #webkit).

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-20  Zoltan Horvath  <zoltan@webkit.org>

        Move LineWidth.{h,cpp} into rendering/line
        <https://webkit.org/b/124448>

        Reviewed by David Hyatt.

        In r159354 I introduced line directory. Now it's time to move the helper classes of RenderBlockLineLayout into 'line' subdirectory.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/line/LineWidth.cpp: Renamed from Source/WebCore/rendering/LineWidth.cpp.
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::fitsOnLine):
        (WebCore::LineWidth::fitsOnLineIncludingExtraWidth):
        (WebCore::LineWidth::fitsOnLineExcludingTrailingWhitespace):
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        (WebCore::LineWidth::commit):
        (WebCore::LineWidth::applyOverhang):
        (WebCore::LineWidth::fitBelowFloats):
        (WebCore::LineWidth::setTrailingWhitespaceWidth):
        (WebCore::LineWidth::updateCurrentShapeSegment):
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight):
        (WebCore::LineWidth::fitsOnLineExcludingTrailingCollapsedWhitespace):
        * rendering/line/LineWidth.h: Renamed from Source/WebCore/rendering/LineWidth.h.
        (WebCore::LineWidth::currentWidth):
        (WebCore::LineWidth::uncommittedWidth):
        (WebCore::LineWidth::committedWidth):
        (WebCore::LineWidth::availableWidth):
        (WebCore::LineWidth::addUncommittedWidth):
        (WebCore::LineWidth::shouldIndentText):

2013-11-20  Brady Eidson  <beidson@apple.com>

        Alphabetization followup to r159567

        Reviewed by style-bot  :(

        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2013-11-20  Brady Eidson  <beidson@apple.com>

        Rename IDBMetadata.h to IDBDatabaseMetadata.h
        https://bugs.webkit.org/show_bug.cgi?id=124668

        Reviewed by Dean Jackson.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackend.h:

        * Modules/indexeddb/IDBDatabaseMetadata.h: Renamed from Source/WebCore/Modules/indexeddb/IDBMetadata.h.
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):
        (WebCore::IDBDatabaseMetadata::IDBDatabaseMetadata):

        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Remove bogus assertions in updateNameForTreeScope and updateNameForDocument
        https://bugs.webkit.org/show_bug.cgi?id=124639

        Reviewed by Darin Adler.

        Removed assertions. We can't assert that the element in a tree scope or a document
        since these two functions are called from removedFrom.

        * dom/Element.cpp:
        (WebCore::Element::updateNameForTreeScope):
        (WebCore::Element::updateNameForDocument):

2013-11-20  Brady Eidson  <beidson@apple.com>

        Cleanup getOrEstablishIDBDatabaseMetadata and stub it out in WK2
        https://bugs.webkit.org/show_bug.cgi?id=124635

        Reviewed by Tim Horton.

        getOrEstablishIDBDatabaseMetadata() should not have to take a database name parameter because the 
        server connection should already know what database name it represents.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::openInternalAsync):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::getOrEstablishIDBDatabaseMetadata):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):

2013-11-20  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] <video> and <audio> should be accessible.
        https://bugs.webkit.org/show_bug.cgi?id=124494

        Reviewed by Gyuyoung Kim.

        Adding descriptions of media-element controls.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::localizedMediaControlElementString):

2013-11-20  Antti Koivisto  <antti@apple.com>

        Don't paint simple text runs outside the paint rect
        https://bugs.webkit.org/show_bug.cgi?id=124651

        Reviewed by Anders Carlsson.
        
        This speeds up partial paints for long text paragraphs. 
        Also add the same optimization for hit testing.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        
            Iterate over the run range that needs painting.

        (WebCore::SimpleLineLayout::hitTestFlow):
        
            Iterate over the line range that needs painting.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::Range::Range):
        (WebCore::SimpleLineLayout::Range::begin):
        (WebCore::SimpleLineLayout::Range::end):
        
            Add Range type.

        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advance):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advanceLines):
        
            Optimize case where runCount==lineCount. In this case we can just directly jump
            to the right run/line.

        (WebCore::SimpleLineLayout::RunResolver::begin):
        (WebCore::SimpleLineLayout::RunResolver::end):
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRect):
        
            Get the range corresponding to a rect. This currently cares about y coordinates only.

        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::LineResolver::rangeForRect):

2013-11-20  Antoine Quint  <graouts@apple.com>

        Cannot animate "points" attribute for <svg:polygon>
        https://bugs.webkit.org/show_bug.cgi?id=21371

        Reviewed by Antti Koivisto.

        Ensure we use animated list of points for SVG <polygon> and <polyline> elements
        when we build the path used to draw them, otherwise the animated changes won't
        be rendered and the base value will be used.

        Tests: svg/animations/polygon-set.svg
               svg/animations/polyline-set.svg

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):

2013-11-20  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] Move region styling code into RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=122957

        Reviewed by Mihnea Ovidenie.

        The patch moves all the region styling functionality outside of RenderRegion
        to RenderNamedFlowFragment and outside of RenderFlowThread to RenderNamedFlowThread.
        This generates a couple of undesired casts that will be removed in later patches
        when everything CSS Regions specific will be located inside RenderNamedFlowThread
        and RenderNamedFlowFragment (e.g. the move of the isValid flag, the auto-height
        code etc.).

        The painting function was also moved from RenderRegion to RenderNamedFlowFragment. It
        was only used by the CSS Regions code. The new multi-column implementation has its own
        painting mechanism.

        Tests: No changed functionality, just refactorings.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        * rendering/RenderFlowThread.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
        (WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setObjectStyleInRegion):
        (WebCore::RenderNamedFlowFragment::clearObjectStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        (WebCore::shouldPaintRegionContentsInPhase):
        (WebCore::RenderNamedFlowFragment::paintObject):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderNamedFlowThread::removeFlowChildInfo):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::attachRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2013-11-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLFooElement() to clean up static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124571

        Reviewed by Darin Adler.

        Though there are a lot of clean up commits before, there are still
        use of static_cast<HTMLFooElement*>. To clean up them, we need to generate
        toHTMLDetails|Meta|Summary|TableSection|TableCaptionElement().

        Additionally, other static_cast<> are removed as well.

        No new tests, no behavior changes.

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Enable HTMLTemplateElement on Mac port
        https://bugs.webkit.org/show_bug.cgi?id=124637

        Reviewed by Tim Horton.

        Enabled the feature.

        * Configurations/FeatureDefines.xcconfig:

2013-11-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove unused member function declaration in DocumentOrderedMap.h
        https://bugs.webkit.org/show_bug.cgi?id=124629

        Reviewed by Ryosuke Niwa.

        checkConsistency() is not used anywhere.

        * dom/DocumentOrderedMap.h:

2013-11-19  Seokju Kwon  <seokju@webkit.org>

        Removal of redundant function call in Editor::insertTextWithoutSendingTextEvent
        https://bugs.webkit.org/show_bug.cgi?id=124563

        Reviewed by Brent Fulgham.

        No new tests needed, no behavior change.

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):

2013-11-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break after r159533.

        * CMakeLists.txt: Update ANGLE files.

2013-11-19  Zhuang Zhigang  <zhuangzg@cn.fujitsu.com>

        Implement spin control on WinCE port.
        https://bugs.webkit.org/show_bug.cgi?id=123254

        Reviewed by Brent Fulgham.

        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeWinCE::paintInnerSpinButton):
        * rendering/RenderThemeWinCE.h:

2013-11-19  Roger Fong  <roger_fong@apple.com>

        Update ANGLE sources.
        https://bugs.webkit.org/show_bug.cgi?id=124615.

        Reviewed by Dean Jackson.

        Tests covered by Khronos WebGL conformance tests.

        * platform/graphics/ANGLEWebKitBridge.cpp: Resolve a build error that resulted from updating ANGLE.
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):

2013-11-19  Filip Pizlo  <fpizlo@apple.com>

        Rename WatchpointSet::notifyWrite() should be renamed to WatchpointSet::fireAll()
        https://bugs.webkit.org/show_bug.cgi?id=124609

        Rubber stamped by Mark Lam.

        No new tests because no new behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::create):

2013-11-19  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Parse [<box> || <shape>] values
        https://bugs.webkit.org/show_bug.cgi?id=124426

        Reviewed by Dirk Schulze.

        Shape values can now have an optional box specifying the coordinate sytem to use
        for sizing and positioning the shape. This patch adds the functionality to support
        parsing these new values.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBox): Added function to convert between BasicShape::ReferenceBox
        and CSSPrimitiveValue (which wraps a CSSValueID).
        (WebCore::boxForValue): Ditto.
        (WebCore::valueForBasicShape): Translations between CSSBasicShape and BasicShape
        must now include the reference box.
        (WebCore::basicShapeForValue): Ditto.
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::buildRectangleString): Include the box in the built CSS string.
        (WebCore::CSSBasicShapeRectangle::cssText): Ditto.
        (WebCore::CSSBasicShapeRectangle::equals): Include the box in comparisions.
        (WebCore::buildCircleString):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::buildEllipseString):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::buildPolygonString):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::buildInsetRectangleString):
        (WebCore::CSSBasicShapeInsetRectangle::cssText):
        (WebCore::CSSBasicShapeInsetRectangle::equals):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::box): BasicShapes now have an reference box.
        (WebCore::CSSBasicShape::setBox): Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Shape-inside can also
        parse the box values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): The shape properties use parseShapeProperty,
        while minor adjustments were made to parseBasicShape's return type.
        (WebCore::isBoxValue): Is the CSSValueID one of  the box values.
        (WebCore::CSSParser::parseShapeProperty): Parse one of the shape properties
        and return an appropriate CSSValue.
        (WebCore::CSSParser::parseBasicShape): Return a CSSBasicShape rather than
        adding a ShapeValue to the style.
        * css/CSSParser.h:
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::box): Add a box to BasicShape and getters/setters.
        (WebCore::BasicShape::setBox): Ditto.
        (WebCore::BasicShape::BasicShape): Ditto.

2013-11-19  Jer Noble  <jer.noble@apple.com>

        [Mac] 9 WebGL conformance failures after r159518.
        https://bugs.webkit.org/show_bug.cgi?id=124608

        Reviewed by Dean Jackson.

        Once we removed the CIImage drawing path, there was no longer any reason to flip the
        CGImageRef before drawing to the provided GraphicsContext.

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

2013-11-19  Chris Fleizach  <cfleizach@apple.com>

        Web Speech API crashes onboundary event handling with reload
        https://bugs.webkit.org/show_bug.cgi?id=124607

        Reviewed by Tim Horton.

        If the page goes away, we need to cleanup the Mac platform synthesizer object, because
        NSSpeechSynthesizer is retained elsewhere to handle the callbacks (so it doesn't automatically
        get torn down).

        The layout tests for speech rely on a Mock synthesizer, so there is no good way to test this
        Mac platform specific behavior.       

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper invalidate]):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):

2013-11-19  Mark Lam  <mark.lam@apple.com>

        Add tracking of endColumn for Executables.
        https://bugs.webkit.org/show_bug.cgi?id=124245.

        Reviewed by Geoffrey Garen.

        Test: js/dom/script-start-end-locations.html

        * ForwardingHeaders/bytecode: Added.
        * ForwardingHeaders/bytecode/CodeBlock.h: Added.
        * WebCore.exp.in:
        * testing/Internals.cpp:
        (WebCore::GetCallerCodeBlockFunctor::GetCallerCodeBlockFunctor):
        (WebCore::GetCallerCodeBlockFunctor::operator()):
        (WebCore::GetCallerCodeBlockFunctor::codeBlock):
        (WebCore::Internals::parserMetaData):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [MSE] Support fastSeek() in MediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=124422

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-fastseek.html

        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/MediaSource.h:

        Add support for "seek to the next fastest time" in MediaSource by
        returning the time of the nearest Sync sample.

        Move the data structure logic out of SourceBuffer and into it's own
        class:
        * Modules/mediasource/SampleMap.cpp: Added.
        (WebCore::SampleIsLessThanMediaTimeComparator::operator()):
        (WebCore::SampleIsGreaterThanMediaTimeComparator::operator()):
        (WebCore::SampleIsRandomAccess::operator()):
        (WebCore::SamplePresentationTimeIsWithinRangeComparator::operator()):
        (WebCore::SampleMap::addSample):
        (WebCore::SampleMap::removeSample):
        (WebCore::SampleMap::findSampleContainingPresentationTime):
        (WebCore::SampleMap::findSampleAfterPresentationTime):
        (WebCore::SampleMap::findSampleWithDecodeTime):
        (WebCore::SampleMap::reverseFindSampleContainingPresentationTime):
        (WebCore::SampleMap::reverseFindSampleBeforePresentationTime):
        (WebCore::SampleMap::reverseFindSampleWithDecodeTime):
        (WebCore::SampleMap::findSyncSamplePriorToPresentationTime):
        (WebCore::SampleMap::findSyncSamplePriorToDecodeIterator):
        (WebCore::SampleMap::findSyncSampleAfterPresentationTime):
        (WebCore::SampleMap::findSyncSampleAfterDecodeIterator):
        (WebCore::SampleMap::findSamplesBetweenPresentationTimes):
        (WebCore::SampleMap::findDependentSamples):
        * Modules/mediasource/SampleMap.h: Added.
        (WebCore::SampleMap::presentationBegin):
        (WebCore::SampleMap::presentationEnd):
        (WebCore::SampleMap::decodeBegin):
        (WebCore::SampleMap::decodeEnd):
        (WebCore::SampleMap::reversePresentationBegin):
        (WebCore::SampleMap::reversePresentationEnd):
        (WebCore::SampleMap::reverseDecodeBegin):
        (WebCore::SampleMap::reverseDecodeEnd):

        Add logic to find and return the time of the next & previous sync
        sample, within the threshold provided:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer):
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::sourceBufferPrivateFastSeekTimeForMediaTime):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::setActive):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        (WebCore::SourceBuffer::provideMediaData):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::setActive):
        * platform/graphics/SourceBufferPrivateClient.h:
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateFastSeekTimeForMediaTime):
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateSeekToTime):

        Add new files to the project:
        * WebCore.xcodeproj/project.pbxproj:

        Drive-by fixes in HTMLMediaElement:
        * html/HTMLMediaSource.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::finishSeek): Cause the MediaSource to check the ready state of all its buffers.
        (HTMLMediaElement::selectNextSourceChild): Pass in whether the source element has a MediaSource URL.

        Implement the seekWithTolerance behavior in MockMediaPlayerMediaSource:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::maxTimeSeekableDouble):
        (WebCore::MockMediaPlayerMediaSource::currentTimeDouble):
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance):
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::seekToTime):
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::flags):
        (WebCore::MockSourceBufferPrivate::setActive):
        (WebCore::MockSourceBufferPrivate::fastSeekTimeForMediaTime):
        (WebCore::MockSourceBufferPrivate::seekToTime):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2013-11-19  Jer Noble  <jer.noble@apple.com>

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

        Reviewed by Dean Jackson.

        Improve performance by creating a CGImageRef which directly references the CVPixelBuffer provided
        by AVPlayerItemVideoOutput:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::CVPixelBufferGetBytePointerCallback):
        (WebCore::CVPixelBufferReleaseBytePointerCallback):
        (WebCore::CVPixelBufferReleaseInfoCallback):
        (WebCore::createImageFromPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):

        Additionally, when asked to paint with an AVPlayerItemVideoOutput, block until the output notifies
        its delegate that a pixel buffer is available:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::globalPullDelegateQueue):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (-[WebCoreAVFPullDelegate initWithCallback:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFPullDelegate outputSequenceWasFlushed:]):
        
        To further optimize video -> canvas drawing, add a method which can return a PassNativeImage to be
        drawn directly onto the canvas, rather than rendering into an intermediary context:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::nativeImageForCurrentTime):
        * html/HTMLVideoElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::nativeImageForCurrentTime):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::nativeImageForCurrentTime):

2013-11-19  Brady Eidson  <beidson@apple.com>

        Consolidate IDBBackingStore*Interface and IDBBackingStore*LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=124597

        Reviewed by Alexey Proskuryakov.

        The Interface abstraction doesn’t make sense anymore, as LevelDB will be the only implementor.

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h: Removed.
        * Modules/indexeddb/IDBBackingStoreInterface.h: Removed.
        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h: Removed.

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h:
        (WebCore::IDBBackingStoreCursorLevelDB::key):
        (WebCore::IDBBackingStoreCursorLevelDB::primaryKey):
        (WebCore::IDBBackingStoreCursorLevelDB::recordIdentifier):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::getOrEstablishIDBDatabaseMetadata):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        (WebCore::IDBBackingStoreLevelDB::deleteDatabase):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:
        (WebCore::IDBBackingStoreTransactionLevelDB::levelDBTransactionFrom):

        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.cpp:
        (WebCore::IDBIndexWriterLevelDB::writeIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::verifyIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):

        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        Get rid of bare new in SVGAnimatedColorAnimator::constructFromString()
        https://bugs.webkit.org/show_bug.cgi?id=124595

        Reviewed by Darin Adler.

        Use std::unique_ptr instead, to manage the arguments passed to the create
        methods of SVGAnimatedType.

        No new tests, covered by existing tests.

        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString): Replace bare
        pointer with std::unique_ptr.
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createAngleAndEnumeration): Use
        std::unique_ptr instead of bare pointer as parameter.
        (WebCore::SVGAnimatedType::createBoolean): Ditto.
        (WebCore::SVGAnimatedType::createColor): Ditto.
        (WebCore::SVGAnimatedType::createEnumeration): Ditto.
        (WebCore::SVGAnimatedType::createInteger): Ditto.
        (WebCore::SVGAnimatedType::createIntegerOptionalInteger): Ditto.
        (WebCore::SVGAnimatedType::createLength): Ditto.
        (WebCore::SVGAnimatedType::createLengthList): Ditto.
        (WebCore::SVGAnimatedType::createNumber): Ditto.
        (WebCore::SVGAnimatedType::createNumberList): Ditto.
        (WebCore::SVGAnimatedType::createNumberOptionalNumber): Ditto.
        (WebCore::SVGAnimatedType::createPointList): Ditto.
        (WebCore::SVGAnimatedType::createPreserveAspectRatio): Ditto.
        (WebCore::SVGAnimatedType::createRect): Ditto.
        (WebCore::SVGAnimatedType::createString): Ditto.
        (WebCore::SVGAnimatedType::createTransformList): Ditto.
        * svg/SVGAnimatedType.h: Use std::unique_ptr as parameter in the
        create methods.
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue): Make
        helper return std::unique_ptr instead of bare pointer.
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues): Ditto.

2013-11-19  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Refactor RectangleShape
        https://bugs.webkit.org/show_bug.cgi?id=124416

        Privatize and rename the FloatRoundedRect class defined in RectangleShape.h.
        The new class is called RectangleShape::ShapeBounds. This change enables
        creating a proper FloatRoundedRect analog of the existing RoundedRect class;
        part of adding support for box shapes, per the latest CSS spec.

        Reviewed by Dean Jackson.

        No new tests, just refactoring.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::ShapeBounds::paddingBounds):
        (WebCore::RectangleShape::ShapeBounds::marginBounds):
        (WebCore::RectangleShape::ShapeBounds::cornerInterceptForWidth):
        (WebCore::RectangleShape::shapePaddingBounds):
        (WebCore::RectangleShape::shapeMarginBounds):
        (WebCore::RectangleShape::getExcludedIntervals):
        (WebCore::RectangleShape::getIncludedIntervals):
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::ShapeBounds::ShapeBounds):
        (WebCore::RectangleShape::ShapeBounds::rx):
        (WebCore::RectangleShape::ShapeBounds::ry):

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        Mark classes deriving from SVGAnimatedTypeAnimator as FINAL
        https://bugs.webkit.org/show_bug.cgi?id=124456

        Reviewed by Darin Adler.

        Also add OVERRIDE to their virtual methods appropriately and remove
        existing empty virtual destructors.

        No new tests, covered by existing ones.

        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:

2013-11-19  Brady Eidson  <beidson@apple.com>

        Add WebIDBServerConnection and DatabaseProcessIDBConnection stubs
        https://bugs.webkit.org/show_bug.cgi?id=124562

        Reviewed by Alexey Proskuryakov.

        Export some more symbols and headers for WK2 to use.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Frédéric Wang  <fred.wang@free.fr>

        Map the dir attribute to the CSS direction property.
        https://bugs.webkit.org/show_bug.cgi?id=124572.

        Reviewed by Darin Adler.

        Tests: mathml/presentation/direction-overall.html
               mathml/presentation/direction-token.html
               mathml/presentation/direction.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute): add dir
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): map dir
        * mathml/mathattrs.in: add the dir attribute
        * mathml/mathtags.in: add the mstyle tag (needed to use mstyleTag)

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        [SVG] Convert OwnPtr/PassOwnPtr to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124382

        Reviewed by Darin Adler.

        The files modified are mostly under WebCore/svg/; in a few cases, some
        "external" files needed changes as well.

        No new tests, covered by existing ones.

        * css/CSSFontFaceSource.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedImage.h:
        * platform/graphics/SimpleFontData.cpp:
        * platform/graphics/SimpleFontData.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimatedAngle.cpp:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.cpp:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.cpp:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.cpp:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.cpp:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.cpp:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.cpp:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.cpp:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.cpp:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.cpp:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.cpp:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.cpp:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimatedType.cpp:
        * svg/SVGAnimatedType.h:
        * svg/SVGAnimatedTypeAnimator.cpp:
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGAnimatorFactory.h:
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGFontData.h:
        * svg/SVGFontElement.cpp:
        * svg/SVGFontElement.h:
        * svg/SVGGraphicsElement.cpp:
        * svg/SVGGraphicsElement.h:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathParser.h:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathUtilities.cpp:
        * svg/SVGPathUtilities.h:
        * svg/animation/SMILTimeContainer.cpp:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.h:
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        * svg/properties/SVGAttributeToPropertyMap.h:

2013-11-19  Zoltan Horvath  <zoltan@webkit.org>

        Add LineInlineHeaders.h to WebCore.xcodeproj
        <https://webkit.org/b/124460>

        Reviewed by Csaba Osztrogonác.

        LineInlineHeaders.h (r159354) hasn't been added to WebCore.xcodeproj. This patch adds to it.

        No new tests, no behavior change.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Krzysztof Czech  <k.czech@samsung.com>

        [AX] Use std::unique_ptr to manage AXComputedObjectAttributeCache
        https://bugs.webkit.org/show_bug.cgi?id=124404

        Reviewed by Mario Sanchez Prada.

        Convert OwnPtr/PassOwnPtr to std::unique_ptr.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates):
        (WebCore::AXObjectCache::stopCachingComputedObjectAttributes):
        * accessibility/AXObjectCache.h:
        (WebCore::AXComputedObjectAttributeCache::AXComputedObjectAttributeCache):

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Add more assertions with security implications in DocumentOrderedMap
        https://bugs.webkit.org/show_bug.cgi?id=124559

        Reviewed by Antti Koivisto.

        Assert that newly added elements and existing elements in the document ordered map are in the same tree scope
        as the document ordered map. Also exit early if we're about to add an element in a wrong document to the map.
        We don't exit early in get() because the damage has already been done at that point (the element may have been
        deleted already).

        * dom/Document.cpp:
        (WebCore::Document::addImageElementByLowercasedUsemap):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add): Assert that the newly added element is in the current tree scope.
        Also exit early if either the element is not in the tree scope or not in the right document.
        While this doesn't make the function completely fault safe, it'll catch when we try to add a detached node.
        (WebCore::DocumentOrderedMap::remove): Convert existing assertions to ones with security implication.
        (WebCore::DocumentOrderedMap::get): Assert with security implication that the element we're about to return
        is in the current tree scope. The element may have already been deleted if we ever hit these assertions.
        (WebCore::DocumentOrderedMap::getAllElementsById):  Convert an existing assertion to an assertion with security
        implication.
        * dom/DocumentOrderedMap.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::addElementById):
        (WebCore::TreeScope::addElementByName):
        (WebCore::TreeScope::addImageMap):
        (WebCore::TreeScope::addLabel):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::addDocumentNamedItem):
        (WebCore::HTMLDocument::addWindowNamedItem):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto): Set InTreeScope flag before calling addImageElementByLowercasedUsemap.
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::insertedInto): Ditto for addImageMap.

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159455.
        http://trac.webkit.org/changeset/159455
        https://bugs.webkit.org/show_bug.cgi?id=124568

        broke two api tests (see bug 124564) (Requested by thorton on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Removed.
        * page/FrameSnapshotting.h: Removed.
        * page/mac/FrameMac.mm: Copied from Source/WebCore/page/win/FrameWin.h.
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/mac/FrameSnapshottingMac.h: Copied from Source/WebCore/page/win/FrameWin.h.
        * page/mac/FrameSnapshottingMac.mm: Added.
        (WebCore::imageFromRect):
        (WebCore::selectionImage):
        (WebCore::rangeImage):
        (WebCore::snapshotDragImage):
        * page/win/FrameWin.cpp:
        (WebCore::Frame::dragImageForSelection):
        (WebCore::Frame::nodeImage):
        * page/win/FrameWin.h:
        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize):
        (WebCore::createDragImageForLink):
        * platform/DragImage.h:

2013-11-18  Mark Rowe  <mrowe@apple.com>

        Use hw.activecpu for determining how many processes to spawn.

        It's documented as the preferred way to determine the number of threads
        or processes to create in a SMP aware application.

        Rubber-stamped by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-18  Samuel White  <samuel_white@apple.com>

        AX: aria-labelledby should be used in preference to aria-labeledby
        https://bugs.webkit.org/show_bug.cgi?id=62351

        Reviewed by Chris Fleizach.

        Making sure aria-labelled by overrides the incorrectly spelled aria-labeledby attribute.

        Test: accessibility/aria-labelledby-overrides-aria-labeledby.html

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

2013-11-18  Zalan Bujtas  <zalan@apple.com>

        use after free in WebCore::DocumentOrderedMap::remove / WebCore::TreeScope::removeElementById
        https://bugs.webkit.org/show_bug.cgi?id=121324

        Reviewed by Ryosuke Niwa.

        Update the document ordered map for an image element before dispatching load or error events
        when it's inserted into a document.

        Test: fast/dom/modify-node-and-while-in-the-callback-too-crash.html

        * dom/DocumentOrderedMap.cpp: defensive fix to avoid use after free issues.
        (WebCore::DocumentOrderedMap::remove):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): setting m_failedLoadURL makes
        repeated updateFromElement calls return early.

2013-11-18  Benjamin Poulain  <bpoulain@apple.com>

        Upstream iOS's ResourceHandle implementation
        https://bugs.webkit.org/show_bug.cgi?id=124554

        Reviewed by Sam Weinig.

        * platform/network/ResourceHandle.h:
        (WebCore::ResourceHandle::quickLookHandle):
        (WebCore::ResourceHandle::setQuickLookHandle):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::connectionProperties):
        (WebCore::ResourceHandleClient::shouldCacheResponse):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::synthesizeRedirectResponseIfNecessary):
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveDataArray):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::canRespondToProtectionSpace):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::currentRequest):
        (WebCore::ResourceHandle::connectionClientCallbacks):

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159430.
        http://trac.webkit.org/changeset/159430
        https://bugs.webkit.org/show_bug.cgi?id=124548

        WebCore can know nothing about nor use files from WebKit/
        (Requested by thorton on #webkit).

        * DerivedSources.make:

2013-11-18  Brady Eidson  <beidson@apple.com>

        Remove IDBServerConnection's deprecatedBackingStore()
        https://bugs.webkit.org/show_bug.cgi?id=124547

        Reviewed by Tim Horton.

        It is no longer needed, as the front end no longer knows about the backing store.

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-18  Samuel White  <samuel_white@apple.com>

        AX: Add ability to fetch only visible table rows.
        https://bugs.webkit.org/show_bug.cgi?id=124430

        Reviewed by Chris Fleizach.

        Adding AccessibilityTable::visibleRows method to support AXVisibleRows attribute mac platform.

        Test: platform/mac/accessibility/table-visible-rows.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::visibleRows):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableRow.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-18  Simon Fraser  <simon.fraser@apple.com>

        At some scales, opaque compositing layers have garbage pixels around the edges
        https://bugs.webkit.org/show_bug.cgi?id=124541

        Reviewed by Dean Jackson.
        
        Layers get marked as having opaque contents when their background is
        known to paint the entire layer. However, this failed to take into
        account two reasons why every pixel may not get painted.
        
        First, subpixel layout can result in non-integral RenderLayer
        bounds, which will get rounded up to an integral GraphicsLayer
        size. When this happens we may not paint edge pixels.
        
        Second, at non-integral scale factors, graphics context scaling
        may cause us to not paint edge pixels.
        
        Fix by only marking PlatformCALayers as having opaque contents
        when the contentsScale of the layer is integral.

        Not testable, because we can't guarantee to get garbage pixels
        in a ref test, and layer dumps show GraphicsLayer's notion of
        content opaqueness, not the one we set on the PlatformCALayer.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::isIntegral):
        (WebCore::clampedContentsScaleForScale):
        (WebCore::GraphicsLayerCA::updateRootRelativeScale):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::getTransformFromAnimationsWithMaxScaleImpact):
        Drive-by typo fix.
        (WebCore::GraphicsLayerCA::noteChangesForScaleSensitiveProperties):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-11-18  David Hyatt  <hyatt@apple.com>

        Add a quirk to not respect center text-align when positioning

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

        Reviewed by Simon Fraser.

        Added fast/block/legacy-text-align-position-quirk.html

        * page/Settings.in:
        Add the quirk setting.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::startAlignedOffsetForLine):
        Don't pay attention to center text-align when the quirk is set.

2013-11-18  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Timothy Hatcher.

        Various snapshot creation methods had duplicated code and were split
        between Frame, DragImage, and platform-specific implementationss.
        This patch puts WebCore snapshot methods into FrameSnapshotting
        and removes platform implementations where possible.

        DragImage methods reuse snapshot methods where possible. Inspector
        will be able to take snapshots without using drag images.

        No new tests, this is a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Added.
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::snapshotFrameRect): Move most buffer logic to here.
        (WebCore::snapshotSelection): Moved from Frame.
        (WebCore::snapshotNode): Moved from Frame.
        * page/FrameSnapshotting.h: Added.
        * page/mac/FrameMac.mm: Removed.
        * page/mac/FrameSnapshottingMac.h: Removed.
        * page/mac/FrameSnapshottingMac.mm: Removed.
        * page/win/FrameWin.cpp: remove duplicate implementation.
        * page/win/FrameWin.h: Fix an incorrect parameter name.
        * platform/DragImage.cpp:
        (WebCore::ScopedNodeDragState::ScopedNodeDragState):
        (WebCore::ScopedNodeDragState::~ScopedNodeDragState):
        (WebCore::createDragImageFromSnapshot): Boilerplate buffer conversion.
        (WebCore::createDragImageForNode):
        (WebCore::createDragImageForSelection):
        (WebCore::ScopedFrameSelectionState::ScopedFrameSelectionState):
        (WebCore::ScopedFrameSelectionState::~ScopedFrameSelectionState):
        (WebCore::createDragImageForRange): Moved from Frame.
        (WebCore::createDragImageForImage): Moved from FrameSnapshottingMac.
        (WebCore::createDragImageForLink): use nullptr.

2013-11-18  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Crash when using media source
        https://bugs.webkit.org/show_bug.cgi?id=124525

        Reviewed by Philippe Normand.

        No new tests because this is already covered by tests in media/media-source (which aren't enabled because the feature isn't done).

        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer): Add missing adoptRef()

2013-11-18  Brady Eidson  <beidson@apple.com>

        Remove unneeded BackingStore-related #include from IDBFactoryBackendInterface

        Rubberstamped by Beth Dakin.

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

2013-11-18  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Change mediasource and mediastream modules to use nullptr
        https://bugs.webkit.org/show_bug.cgi?id=124530

        Reviewed by Tim Horton.

        No new tests needed, no behavior change.

        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediastream/MediaStream.cpp:
        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCSessionDescription.cpp:
        * Modules/mediastream/RTCStatsResponse.cpp:
        * Modules/mediastream/UserMediaRequest.cpp:

2013-11-18  Brady Eidson  <beidson@apple.com>

        Move execution of IDBCursorBackendOperations to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124463

        Reviewed by Tim Horton.

        This almost entirely removes knowledge of the backing store from the front end.

        The primary change here is to give cursors a unique ID.

        This way the IDBCursorBackend can reference itself by ID, while the 
        IDBServerConnection can handle mapping that ID to a backing store.

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h:

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::IDBCursorBackend):
        (WebCore::IDBCursorBackend::deleteFunction):
        (WebCore::IDBCursorBackend::prefetchReset):
        (WebCore::IDBCursorBackend::close):
        (WebCore::IDBCursorBackend::updateCursorData):
        (WebCore::IDBCursorBackend::clearCursorData):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::create):
        (WebCore::IDBCursorBackend::key):
        (WebCore::IDBCursorBackend::primaryKey):
        (WebCore::IDBCursorBackend::value):
        (WebCore::IDBCursorBackend::id):
        (WebCore::IDBCursorBackend::transaction):
        (WebCore::IDBCursorBackend::setSavedCursorID):

        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        (WebCore::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        (WebCore::CursorIterationOperation::key):
        (WebCore::CursorIterationOperation::callbacks):
        (WebCore::CursorAdvanceOperation::count):
        (WebCore::CursorAdvanceOperation::callbacks):
        (WebCore::CursorPrefetchIterationOperation::numberToFetch):
        (WebCore::CursorPrefetchIterationOperation::callbacks):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h:
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreCursorImpl::create):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        (WebCore::IDBServerConnectionLevelDB::createObjectStore):
        (WebCore::IDBServerConnectionLevelDB::createIndex):
        (WebCore::IDBServerConnectionLevelDB::deleteIndex):
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::put):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):
        (WebCore::IDBServerConnectionLevelDB::deleteObjectStore):
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion):
        (WebCore::IDBServerConnectionLevelDB::cursorAdvance):
        (WebCore::IDBServerConnectionLevelDB::cursorIterate):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchIteration):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchReset):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-17  Jer Noble  <jer.noble@apple.com>

        [WTF] Media time should not have a constructor which accepts a single int or float.
        https://bugs.webkit.org/show_bug.cgi?id=124470

        Reviewed by Eric Carlson.

        Fix the compile error exposed by removing the default parameter in the MediaTime constructor.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::setTimestampOffset):

2013-11-18  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Change webaudio to use nullptr for null pointers
        https://bugs.webkit.org/show_bug.cgi?id=124526

        Reviewed by Anders Carlsson.

        No new tests needed, no behavior change.

        * Modules/webaudio/AudioBuffer.cpp:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioNode.cpp:
        * Modules/webaudio/ChannelMergerNode.cpp:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/OfflineAudioContext.cpp:
        * Modules/webaudio/PeriodicWave.cpp:
        * Modules/webaudio/ScriptProcessorNode.cpp:

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Basic authentication is not reused.
        https://bugs.webkit.org/show_bug.cgi?id=124452

        Reviewed by Brent Fulgham.

        After a successful basic authentication, the credentials are not reused for later requests.
        In the CFNetwork port, this is solved by trying basic authentication first, if credentials exists.
        Also, when a 401 response is received, the first thing the CFNetwork port does, is to use
        m_user/m_pass as credentials in the following request if they are set.
        This can be done the same way for the Curl version.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Try using m_user/m_pass as credentials first, if they are set.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::applyAuthenticationToRequest): Try basic authentication first, if credentials exists.

2013-11-18  Mátyás Mustoha  <mmatyas@inf.u-szeged.hu>

        [curl] Add file cache
        https://bugs.webkit.org/show_bug.cgi?id=123333

        Reviewed by Brent Fulgham.

        Implementation of on disc file cache
        for the curl network backend.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/curl/CurlCacheEntry.cpp: Added.
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::~CurlCacheEntry):
        (WebCore::CurlCacheEntry::isCached):
        (WebCore::CurlCacheEntry::requestHeaders):
        (WebCore::CurlCacheEntry::saveCachedData):
        (WebCore::CurlCacheEntry::loadCachedData):
        (WebCore::CurlCacheEntry::saveResponseHeaders):
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders):
        (WebCore::CurlCacheEntry::didFail):
        (WebCore::CurlCacheEntry::didFinishLoading):
        (WebCore::CurlCacheEntry::generateBaseFilename):
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        (WebCore::CurlCacheEntry::invalidate):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/network/curl/CurlCacheEntry.h: Added.
        (WebCore::CurlCacheEntry::isInMemory):
        * platform/network/curl/CurlCacheManager.cpp: Added.
        (WebCore::CurlCacheManager::getInstance):
        (WebCore::CurlCacheManager::CurlCacheManager):
        (WebCore::CurlCacheManager::~CurlCacheManager):
        (WebCore::CurlCacheManager::setCacheDirectory):
        (WebCore::CurlCacheManager::loadIndex):
        (WebCore::CurlCacheManager::saveIndex):
        (WebCore::CurlCacheManager::didReceiveResponse):
        (WebCore::CurlCacheManager::didFinishLoading):
        (WebCore::CurlCacheManager::isCached):
        (WebCore::CurlCacheManager::requestHeaders):
        (WebCore::CurlCacheManager::didReceiveData):
        (WebCore::CurlCacheManager::saveResponseHeaders):
        (WebCore::CurlCacheManager::invalidateCacheEntry):
        (WebCore::CurlCacheManager::didFail):
        (WebCore::CurlCacheManager::loadCachedData):
        * platform/network/curl/CurlCacheManager.h: Added.
        (WebCore::CurlCacheManager::getCacheDirectory):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Win] WebKit version in user agent string is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=124454

        Reviewed by Brent Fulgham.

        * DerivedSources.make: Generate WebKitVersion.h

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add inspector json files to EXTRA_DIST and
        remove maketokenizer from EXTRA_DIST.
        * GNUmakefile.list.am: Add missing header files.

2013-11-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLDataList|Html|EmbedElement
        https://bugs.webkit.org/show_bug.cgi?id=124482

        Reviewed by Tim Horton.

        To clean up static_cast<HTMLFoo*>, toHTMLEmbedElement, toHTMLHtmlElement, toHTMLDataListElement
        are generated.

        No new tests, no behavior changes.

        * html/HTMLDataListElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerDataListElement):
        * html/HTMLTagNames.in:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2013-11-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up static_cast<HTMLFoo*> usage
        https://bugs.webkit.org/show_bug.cgi?id=124480

        Reviewed by Tim Horton.

        Though there are toHTMLFoo(), some places are still using static_cast<>.
        Additionally, toHTMLBodyElement() is supported from now.

        No new tests, no behavior changes.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isRequired):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance):
        * dom/Document.cpp:
        (WebCore::Document::openSearchDescriptionURL):
        (WebCore::Document::iconURLs):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * html/HTMLBodyElement.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateAncestorDisabledState):
        (WebCore::HTMLFormControlElement::enclosingFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::submitElementFromEvent):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::virtualForm):
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r158760.

        * bindings/gobject/webkitdom.symbols: Add
        webkit_dom_text_track_get_id prototype.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r158821): [GTK] API break due to removed properties in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=124489

        Reviewed by Philippe Normand.

        In r158821, several properties were changed from readonly to
        CustomSetter. The GObject DOM bindings currently skips any
        attribute having a custom getter or setter, and those properties
        are not generated anymore. We should add support for generating
        attributes having a custom getter or setter in GObject DOM
        bindings generator, but to fix the ABI break now we bring the old
        implementatiom back as custom implementation. This fixes the ABI
        compatibility, but not the API since the GObject properties are
        not generated.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_audio_track_get_kind):
        (webkit_dom_audio_track_get_language):
        (webkit_dom_text_track_get_kind):
        (webkit_dom_text_track_get_language):
        (webkit_dom_video_track_get_kind):
        (webkit_dom_video_track_get_language):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r158662.

        * bindings/gobject/webkitdom.symbols: Add missing prototypes.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r159208 and r159363.

        * bindings/gobject/webkitdom.symbols: Add
        webkit_dom_html_media_element_fast_seek prototype.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r159363): [GTK] API break in webkit_dom_html_media_element_set_current_time
        https://bugs.webkit.org/show_bug.cgi?id=124485

        Reviewed by Philippe Normand.

        In r159363 currentTime attribute was changed to not raise
        exceptions. This breaks the API of GObject DOM bindings because we
        use a GError parameter for exceptions that has been removed.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_set_current_time): Custom
        implementation that receives a GError for backwards
        compatibility.
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Add
        webkit_dom_html_media_element_set_current_time prototype.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip
        webkit_dom_html_media_element_set_current_time since we are adding
        a custom implementation.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        Support exporting public RSASSA-PKCS1-v1_5 keys
        https://bugs.webkit.org/show_bug.cgi?id=124475

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsa-export-key.html

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::buildJSONForRSAComponents):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):
        Added said support (this part works with private keys too).

        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::getPublicKeyComponents): Moved the logic for getting a
        public key from private one here for reuse in keySizeInBits().
        (WebCore::CryptoKeyRSA::isRestrictedToHash):
        (WebCore::CryptoKeyRSA::keySizeInBits):
        (WebCore::CryptoKeyRSA::exportData):
        Exposed information necessary for JWK serialization.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        RSASSA-PKCS1-v1_5 JWK import doesn't check key size
        https://bugs.webkit.org/show_bug.cgi?id=124472

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-small-key.html

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid): Added the checks.
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Check key size when
        importing.
        (WebCore::JSCryptoKeySerializationJWK::serialize): Updated a comment.

        * crypto/keys/CryptoKeySerializationRaw.cpp: (WebCore::CryptoKeySerializationRaw::serialize):
        Updated a comment.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        JWK crypto key export result is a DOM string instead of an array buffer
        https://bugs.webkit.org/show_bug.cgi?id=124473

        Reviewed by Sam Weinig.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::exportKey):
        Fix it.

2013-11-17  Sam Weinig  <sam@webkit.org>

        LayoutStateMaintainer should use references where possible
        https://bugs.webkit.org/show_bug.cgi?id=124471

        Reviewed by Dan Bernstein.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::pushFlowThreadLayoutState):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::pushLayoutStateForCurrentFlowThread):
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        Use uint8_t vectors for WebCrypto data
        https://bugs.webkit.org/show_bug.cgi?id=124466

        Reviewed by Sam Weinig.

        Using Vector<char> for crypto key data is somewhat non-idiomatic, and it gets simply
        dangerous for bignums, because signed arithmetic is not appropriate for bignum digits.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::generateSecWebSocketKey):
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        No longer need to cast data to char* here.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * crypto/CryptoDigest.h:
        * crypto/CryptoKey.h:
        * crypto/keys/CryptoKeyAES.cpp:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        * crypto/keys/CryptoKeyDataRSAComponents.cpp:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.cpp:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        * crypto/mac/CryptoDigestMac.cpp:
        * crypto/mac/CryptoKeyMac.cpp:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        Switched to Vector<uint8_t>.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPublicKeyComponents): Extracted from buildAlgorithmDescription() and simplified.
        (WebCore::CryptoKeyRSA::create): Switched to Vector<uint8_t>.
        (WebCore::CryptoKeyRSA::buildAlgorithmDescription): No longer need to copy data just
        to change type from Vector<char> to Vector<unsigned char>.
        (WebCore::bigIntegerToUInt32): Ditto. No longer need to cast types when dealing with the bignum.
        (WebCore::CryptoKeyRSA::generatePair): Improved an error message a little.

        * fileapi/FileReaderLoader.cpp: (WebCore::FileReaderLoader::convertToDataURL):
        * inspector/DOMPatchSupport.cpp: (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::archive):
        * platform/graphics/cg/ImageBufferCG.cpp: (WebCore::CGImageToDataURL):
        No longer need to cast data to char* here.

2013-11-17  Antti Koivisto  <antti@apple.com>

        REGRESSION (r158774): Iteration over element children is broken
        https://bugs.webkit.org/show_bug.cgi?id=124145

        Reviewed by Anders Carlsson.
        
        Mutation during traversal invalidates the position cache. After the mid-point we start
        traversing backwards as it the shortest path. However backward traversal of children-only
        HTMLCollection was wrong and would end up going to descendants.
        
        Reduction by yannick.poirier@inverto.tv.

        Test: fast/dom/htmlcollection-children-mutation.html

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::collectionTraverseBackward):
        
            Traverse direct children only when m_shouldOnlyIncludeDirectChildren bit is set.

2013-11-17  Zoltan Horvath  <zoltan@webkit.org>

        Move LineLayoutState.h into rendering/line
        <https://webkit.org/b/124458>

        Reviewed by Mihnea Ovidenie.

        LineLayoutState is a helper class of RenderBlockLineLayout, so I'm moving it into line subdirectory.

        No new tests, no behavior change.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/line/LineLayoutState.h: Renamed from Source/WebCore/rendering/LineLayoutState.h.
        (WebCore::FloatWithRect::FloatWithRect):
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::lineInfo):
        (WebCore::LineLayoutState::endLineLogicalTop):
        (WebCore::LineLayoutState::setEndLineLogicalTop):
        (WebCore::LineLayoutState::endLine):
        (WebCore::LineLayoutState::setEndLine):
        (WebCore::LineLayoutState::lastFloat):
        (WebCore::LineLayoutState::setLastFloat):
        (WebCore::LineLayoutState::floats):
        (WebCore::LineLayoutState::floatIndex):
        (WebCore::LineLayoutState::setFloatIndex):
        (WebCore::LineLayoutState::adjustedLogicalLineTop):
        (WebCore::LineLayoutState::setAdjustedLogicalLineTop):
        (WebCore::LineLayoutState::flowThread):
        (WebCore::LineLayoutState::setFlowThread):
        (WebCore::LineLayoutState::endLineMatched):
        (WebCore::LineLayoutState::setEndLineMatched):
        (WebCore::LineLayoutState::checkForFloatsFromLastLine):
        (WebCore::LineLayoutState::setCheckForFloatsFromLastLine):
        (WebCore::LineLayoutState::markForFullLayout):
        (WebCore::LineLayoutState::isFullLayout):
        (WebCore::LineLayoutState::usesRepaintBounds):
        (WebCore::LineLayoutState::setRepaintRange):
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):

2013-11-17  Antti Koivisto  <antti@apple.com>

        Simple line path does not respect visibility:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124467

        Reviewed by Anders Carlsson.

        Test: fast/text/text-visibility.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto no longer uses sequences of ArrayBuffers
        https://bugs.webkit.org/show_bug.cgi?id=124451

        Build fix.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::calculateSignature):
        Now that the function became shorter, clang realized that a variable was used
        uninitialized in an impossible code path.

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto no longer uses sequences of ArrayBuffers
        https://bugs.webkit.org/show_bug.cgi?id=124451

        Reviewed by Sam Weinig.

        Covered by existing tests.

        Changed all operations to take single CryptoOperationData objects.

        * bindings/js/JSCryptoOperationData.cpp:
        * bindings/js/JSCryptoOperationData.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::digest):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:

2013-11-16  Zoltan Horvath  <zoltan@webkit.org>

        Remove the include of LineWidth.h from SimpleLineLayoutFunctions.cpp
        <https://webkit.org/b/124449>

        Reviewed by Antti Koivisto.

        I removed the include of LineWidth, since SimpleLineLayoutFunctions.cpp doesn't use it.

        No new tests, no behavior change.

        * rendering/SimpleLineLayoutFunctions.cpp:

2013-11-15  Alexey Proskuryakov  <ap@apple.com>

        Support exporting symmetric keys as JWK
        https://bugs.webkit.org/show_bug.cgi?id=124442

        Reviewed by Sam Weinig.

        Error handling is not consistent yet - some errors cause exceptions, and others
        result in rejected promises. This part of spec is incomplete, so I basically did
        what was most straightforward in each case.

        * bindings/js/JSCryptoKeySerializationJWK.h: 
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Updated a comment with a better link.
        (WebCore::JSCryptoKeySerializationJWK::buildJSONForOctetSequence): A helper to building JWK.
        (WebCore::JSCryptoKeySerializationJWK::addToJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::addBoolToJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON): Ditto. The code for
        mapping is my best guess, this all needs to be specified.
        (WebCore::JSCryptoKeySerializationJWK::addJWKUseToJSON): A helper to building JWK.
        (WebCore::JSCryptoKeySerializationJWK::serialize): Build a JSON string for the key.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::importKey): Updated a comment.
        (WebCore::JSSubtleCrypto::exportKey): Use CryptoKeySerialization (also for raw keys,
        for consistency).

        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::algorithmIdentifier):
        (WebCore::CryptoKey::usagesBitmap):
        Exposed data needed for building JWK (it used to be only exposed in a form suitable
        for DOM accessors).

        * crypto/keys/CryptoKeyHMAC.h: Ditto, added an accessor for JWK.

        * crypto/keys/CryptoKeySerializationRaw.cpp: (WebCore::CryptoKeySerializationRaw::serialize):
        * crypto/keys/CryptoKeySerializationRaw.h:
        Moved from JSSubtleCryptoCustom.cpp for consistency.

2013-11-15  Brady Eidson  <beidson@apple.com>

        Move IDBCursorBackend operations into their own files
        https://bugs.webkit.org/show_bug.cgi?id=124444

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::cursorType):
        (WebCore::IDBCursorBackend::deprecatedBackingStoreCursor):
        (WebCore::IDBCursorBackend::deprecatedSetBackingStoreCursor):
        (WebCore::IDBCursorBackend::deprecatedSetSavedBackingStoreCursor):

        * Modules/indexeddb/IDBCursorBackendOperations.cpp: Added.
        (WebCore::CallOnDestruct::CallOnDestruct):
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        (WebCore::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h: Added.
        (WebCore::CursorIterationOperation::create):
        (WebCore::CursorIterationOperation::CursorIterationOperation):
        (WebCore::CursorAdvanceOperation::create):
        (WebCore::CursorAdvanceOperation::CursorAdvanceOperation):
        (WebCore::CursorPrefetchIterationOperation::create):
        (WebCore::CursorPrefetchIterationOperation::CursorPrefetchIterationOperation):

2013-11-14  David Farler  <dfarler@apple.com>

        Copy ASAN flag settings to WebCore and JavaScriptCore intermediate build tools
        https://bugs.webkit.org/show_bug.cgi?id=124362

        Reviewed by David Kilzer.

        No new tests needed.

        * WebCore.xcodeproj/project.pbxproj:
        Use ASAN_C*FLAGS for WebCoreExportFileGenerator.

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [Mac][AVF] Allow video and audio tracks to be initialized with an AVAssetTrack.
        https://bugs.webkit.org/show_bug.cgi?id=124421

        Reviewed by Eric Carlson.

        Currently, VideoTrackPrivateAVFObjC and AudioTrackPrivateAVFObjC are initialized with an
        AVPlayerItemTrack, but most of its methods use the AVAssetTrack wrapped by the
        AVPlayerItemTrack. Allow these objects to be alternatively initialized with an AVAssetTrack.

        Add factory methods taking an AVAssetTrack:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
        (WebCore::AudioTrackPrivateAVFObjC::create):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
        (WebCore::AudioTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::AudioTrackPrivateAVFObjC::assetTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
        (WebCore::VideoTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::VideoTrackPrivateAVFObjC::assetTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:

        Use m_assetTrack instead of [m_playerItemTrack assetTrack]:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        (WebCore::AVTrackPrivateAVFObjCImpl::assetTrack):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
        (WebCore::AVTrackPrivateAVFObjCImpl::enabled):
        (WebCore::AVTrackPrivateAVFObjCImpl::setEnabled):
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind):
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind):
        (WebCore::AVTrackPrivateAVFObjCImpl::id):
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        (WebCore::AVTrackPrivateAVFObjCImpl::language):
        (WebCore::AVTrackPrivateAVFObjCImpl::trackID):


2013-11-15  Brady Eidson  <beidson@apple.com>

        Let IDBDatabaseBackend create IDBTransactionBackend's directly
        https://bugs.webkit.org/show_bug.cgi?id=124438

        Reviewed by Beth Dakin.

        Create IDBTransactionBackends directly:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::createTransaction):
        * Modules/indexeddb/IDBDatabaseBackend.h:

        Remove maybeCreateTransactionBackend():
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-15  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement should not throw an exception from setCurrentTime or fastSeek.
        https://bugs.webkit.org/show_bug.cgi?id=124294

        Reviewed by Eric Carlson.

        Update the seek logic to match the current specification. This means removing exception
        throwing from both the .idl and the implementation. 

        Remove the ExceptionCode parameter from setCurrentTime and fastSeek:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fastSeek):
        (HTMLMediaElement::seek):
        (HTMLMediaElement::seekWithTolerance):
        (HTMLMediaElement::setCurrentTime):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaController.cpp:
        (MediaController::setCurrentTime):
        * html/MediaController.h:
        * html/MediaController.idl:
        * html/MediaControllerInterface.h:

        Do not pass in an ExceptionCode placeholder when calling seek:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::rewind):
        (HTMLMediaElement::returnToRealtime):
        (HTMLMediaElement::finishSeek):
        (HTMLMediaElement::playInternal):
        (HTMLMediaElement::mediaPlayerTimeChanged):
        (HTMLMediaElement::mediaPlayerDurationChanged):
        (HTMLMediaElement::applyMediaFragmentURI):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaController.cpp:
        (MediaController::bringElementUpToSpeed):
        * html/MediaController.h:
        * html/MediaController.idl:
        * html/MediaControllerInterface.h:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setCurrentTime:]):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Remove last vestiges of IDBBackingStore* from IDBTransactionBackend.
        https://bugs.webkit.org/show_bug.cgi?id=124436

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBFactoryBackendInterface.h: Removed createCursorBackend.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp: Removed createCursorBackend.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h: Removed createCursorBackend.

        * Modules/indexeddb/IDBCursorBackend.h:

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Make IDBIndexWriter a LevelDB specific concept
        https://bugs.webkit.org/show_bug.cgi?id=124434

        Reviewed by Tim Horton.

        This includes renaming the class and moving it into the leveldb subdirectory.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBIndexWriter.cpp.
        (WebCore::IDBIndexWriterLevelDB::IDBIndexWriterLevelDB):
        (WebCore::IDBIndexWriterLevelDB::writeIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::verifyIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h: Renamed from Source/WebCore/Modules/indexeddb/IDBIndexWriter.h.
        (WebCore::IDBIndexWriterLevelDB::create):

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        (WebCore::IDBServerConnectionLevelDB::put):

2013-11-15  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: DOM.performSearch should accept a list of context nodes
        https://bugs.webkit.org/show_bug.cgi?id=124390

        Reviewed by Timothy Hatcher.

        Extracted the code in InspectorDOMAgent::performSearch into its own helper class
        called InspectorNodeFinder. Also added a new array parameter called "nodeIds"
        that can be used to limit the search results to just partial subtrees.

        Tests: inspector-protocol/dom/dom-search-crash.html
               inspector-protocol/dom/dom-search-with-context.html
               inspector-protocol/dom/dom-search.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/protocol/DOM.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorNodeFinder.cpp: Added.
        (WebCore::stripCharacters):
        (WebCore::InspectorNodeFinder::InspectorNodeFinder):
        (WebCore::InspectorNodeFinder::performSearch):
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        (WebCore::InspectorNodeFinder::matchesAttribute):
        (WebCore::InspectorNodeFinder::matchesElement):
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        (WebCore::InspectorNodeFinder::searchUsingCSSSelectors):
        * inspector/InspectorNodeFinder.h: Added.
        (WebCore::InspectorNodeFinder::results):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Remove IDBBackingStoreInterface.h includes that are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=124433

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackend.h:

2013-11-15  Zoltan Horvath  <zoltan@webkit.org>

        Move BreakingContext and LineBreaker into their own files
        <https://webkit.org/b/124336>

        Reviewed by David Hyatt.

        In this change I introduced 'line' subdirectory inside 'rendering', this directory will contain all the classes
        which have been refactored from RenderBlockLineLayout.cpp. This change contains the separation of BreakingContext,
        and the separation of LineBreaker classes. Since I wanted to keep the helper functions organized, I also added a
        new file called LineInlineHeaders.h, which contains the functions which used in LineBreaker.h and BreakingContext.h.
        I moved LineInfo class into line directory. It was necessary this time, since I added a cpp for it. I'll move the
        rest of the line layout related helper classes later. (I wanted to minimize merge conflicts.)

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createRun):
        * rendering/line/BreakingContextInlineHeaders.h: Added.
        (WebCore::WordMeasurement::WordMeasurement):
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):
        (WebCore::deprecatedAddMidpoint):
        (WebCore::startIgnoringSpaces):
        (WebCore::stopIgnoringSpaces):
        (WebCore::ensureLineBoxInsideIgnoredSpaces):
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::lineBreakRef):
        (WebCore::BreakingContext::lineWidth):
        (WebCore::BreakingContext::atEnd):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::increment):
        (WebCore::BreakingContext::handleBR):
        (WebCore::borderPaddingMarginStart):
        (WebCore::borderPaddingMarginEnd):
        (WebCore::shouldAddBorderPaddingMargin):
        (WebCore::previousInFlowSibling):
        (WebCore::inlineLogicalWidth):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::firstPositiveWidth):
        (WebCore::updateSegmentsForShapes):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::nextCharacter):
        (WebCore::updateCounterIfNeeded):
        (WebCore::measureHyphenWidth):
        (WebCore::textWidth):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::tryHyphenating):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp: Added.
        (WebCore::LineBreaker::reset):
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineBreaker.h: Added.
        (WebCore::LineBreaker::LineBreaker):
        (WebCore::LineBreaker::lineWasHyphenated):
        (WebCore::LineBreaker::positionedObjects):
        (WebCore::LineBreaker::clear):
        * rendering/line/LineInfo.cpp: Added.
        (WebCore::LineInfo::setEmpty):
        * rendering/line/LineInfo.h: Renamed from Source/WebCore/rendering/LineInfo.h.
        (WebCore::LineInfo::LineInfo):
        (WebCore::LineInfo::isFirstLine):
        (WebCore::LineInfo::isLastLine):
        (WebCore::LineInfo::isEmpty):
        (WebCore::LineInfo::previousLineBrokeCleanly):
        (WebCore::LineInfo::floatPaginationStrut):
        (WebCore::LineInfo::runsFromLeadingWhitespace):
        (WebCore::LineInfo::resetRunsFromLeadingWhitespace):
        (WebCore::LineInfo::incrementRunsFromLeadingWhitespace):
        (WebCore::LineInfo::setFirstLine):
        (WebCore::LineInfo::setLastLine):
        (WebCore::LineInfo::setPreviousLineBrokeCleanly):
        (WebCore::LineInfo::setFloatPaginationStrut):
        * rendering/line/LineInlineHeaders.h: Added.
        (WebCore::hasInlineDirectionBordersPaddingOrMargin):
        (WebCore::lineStyle):
        (WebCore::requiresLineBoxForContent):
        (WebCore::shouldCollapseWhiteSpace):
        (WebCore::skipNonBreakingSpace):
        (WebCore::alwaysRequiresLineBox):
        (WebCore::requiresLineBox):
        (WebCore::setStaticPositions):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Move execution of IDBTransactionBackendOperations to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124385

        Reviewed by Tim Horton.

        Each IDBOperation has it’s ::perform() moved to a method on IDBServerConnection.
        This almost removes all knowledge of the backing stores from the front end.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackend.h:

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::clear):

        Add methods to reflect each transaction backend operation:
        * Modules/indexeddb/IDBServerConnection.h:

        Schedule certain operations with callbacks:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::scheduleVersionChangeOperation):
        (WebCore::IDBTransactionBackend::schedulePutOperation):
        (WebCore::IDBTransactionBackend::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackend::scheduleCountOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackend::scheduleClearObjectStoreOperation):
        * Modules/indexeddb/IDBTransactionBackend.h:

        Make each operation’s perform() method defer to the IDBServerConnection (with a callback):
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearObjectStoreOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):

        Add accessors to each operation’s data members so the IDBServerConnection has everything it needs:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::objectStoreMetadata):
        (WebCore::DeleteObjectStoreOperation::objectStoreMetadata):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::version):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::callbacks):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::databaseCallbacks):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::CreateIndexOperation::objectStoreID):
        (WebCore::CreateIndexOperation::idbIndexMetadata):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::objectStoreID):
        (WebCore::DeleteIndexOperation::idbIndexMetadata):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::objectStoreID):
        (WebCore::GetOperation::indexID):
        (WebCore::GetOperation::cursorType):
        (WebCore::GetOperation::keyRange):
        (WebCore::GetOperation::callbacks):
        (WebCore::GetOperation::autoIncrement):
        (WebCore::GetOperation::keyPath):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::putMode):
        (WebCore::PutOperation::objectStore):
        (WebCore::PutOperation::key):
        (WebCore::PutOperation::indexIDs):
        (WebCore::PutOperation::indexKeys):
        (WebCore::PutOperation::callbacks):
        (WebCore::PutOperation::value):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::objectStoreID):
        (WebCore::OpenCursorOperation::indexID):
        (WebCore::OpenCursorOperation::direction):
        (WebCore::OpenCursorOperation::cursorType):
        (WebCore::OpenCursorOperation::taskType):
        (WebCore::OpenCursorOperation::keyRange):
        (WebCore::OpenCursorOperation::cursorDirection):
        (WebCore::OpenCursorOperation::callbacks):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::objectStoreID):
        (WebCore::CountOperation::indexID):
        (WebCore::CountOperation::keyRange):
        (WebCore::CountOperation::callbacks):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::objectStoreID):
        (WebCore::DeleteRangeOperation::callbacks):
        (WebCore::DeleteRangeOperation::keyRange):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearObjectStoreOperation::create):
        (WebCore::ClearObjectStoreOperation::objectStoreID):
        (WebCore::ClearObjectStoreOperation::callbacks):
        (WebCore::ClearObjectStoreOperation::ClearObjectStoreOperation):

        Implement each operation in terms of the appropriate backing store, then perform the callback:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::createObjectStore):
        (WebCore::IDBServerConnectionLevelDB::createIndex):
        (WebCore::IDBServerConnectionLevelDB::deleteIndex):
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::put):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):
        (WebCore::IDBServerConnectionLevelDB::deleteObjectStore):
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * WebCore.xcodeproj/project.pbxproj:

2013-11-15  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Modifying RTCIceCandidate object construction to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=124369

        Reviewed by Eric Carlson.

        According to the spec the RTCIceCandidateInit parameter in RTCSessionDescription constructor is optional,
        which must not be nullable, and, if passed, must be a valid Dictionary. If the keys are not present, the string
        object that stores them in the RTCIceCandidate class, must be null in those cases. Also, if a key is present
        and its value is not valid an exception must be raised.

        Existing test was updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        * Modules/mediastream/RTCIceCandidate.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCIceCandidateCustom.cpp: Added.
        (WebCore::JSRTCIceCandidateConstructor::constructJSRTCIceCandidate):

2013-11-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159337.
        http://trac.webkit.org/changeset/159337
        https://bugs.webkit.org/show_bug.cgi?id=124423

        broke a bunch of fast/regions tests on EFL/GTK (Requested by
        philn on #webkit).

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintFlowThreadPortionInRegion):
        (WebCore::RenderFlowThread::hitTestFlowThreadPortionInRegion):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::shouldPaintRegionContentsInPhase):
        (WebCore::RenderRegion::paintObject):
        (WebCore::RenderRegion::hitTestContents):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-15  Antti Koivisto  <antti@apple.com>

        Hovering over text using simple line path should not cause switch to line boxes
        https://bugs.webkit.org/show_bug.cgi?id=124418

        Reviewed by Anders Carlsson.

        Test: fast/text/simple-lines-hover.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        
            Collect quads and rects directly from simple lines without requiring the line box switch.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::collectTextAbsoluteRects):
        (WebCore::SimpleLineLayout::collectTextAbsoluteQuads):
        
            Add these.

        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::start):
        (WebCore::SimpleLineLayout::RunResolver::Run::end):
        
            For future use.

2013-11-15  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Implement visual overflow for first & last regions
        https://bugs.webkit.org/show_bug.cgi?id=118665

        In order to properly propagate the visual overflow of elements flowed inside regions, 
        the responsiblity of painting and hit-testing content inside flow threads has been
        moved to the flow thread layer's level.
        Each region keeps the associated overflow with each box in the RenderBoxRegionInfo
        structure, including one for the flow thread itself. This data is used during
        painting and hit-testing.

        Reviewed by David Hyatt.

        Tests: fast/regions/overflow-first-and-last-regions-in-container-hidden.html
               fast/regions/overflow-first-and-last-regions.html
               fast/regions/overflow-nested-regions.html
               fast/regions/overflow-region-float.html
               fast/regions/overflow-region-inline.html
               fast/regions/overflow-region-transform.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideRegionRange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
        (WebCore::RenderFlowThread::flipForWritingModeLocalCoordinates):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsVisualOverflow):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::updateDescendantsLayerListsIfNeeded):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        (WebCore::RenderLayer::paintNamedFlowThreadInsideRegion):
        (WebCore::RenderLayer::paintFlowThreadIfRegion):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::inflateX):
        (WebCore::ClipRect::inflateY):
        (WebCore::ClipRect::inflate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::flowThreadPortionLocation):
        (WebCore::RenderRegion::regionContainerLayer):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-15  Stephane Jadaud  <sjadaud@sii.fr>

        [GStreamer] Add support for Media Source API
        https://bugs.webkit.org/show_bug.cgi?id=99065

        The patch integrate a Media Source player for the GStreamer backend. The implementented architecture is:
        - MediaPlayerPrivateGStreamer engine is modified to support Media Source URIs (change blob:// to mediasourceblob://), in addition to the existing support for web (http/https/blob) URIs
        - Similar to the existing WebKitWebSrc gstreamer element that handles web URIs, a new gstreamer element named WebKitMediaSrc is implemented to handle Media Source URIs
        - WebKitMediaSrc registers its URI protocol handler, allowing uridecodebin to dynamically create the appropriate source element.
        - The WebKitMediaSrc element creates a bin with 2 appsrc: One for Audio and One for Video. Pads are dynamically linked at the reception of first video and audio buffers.

        Reviewed by Philippe Normand.

        Tests: Activate http/tests/media/media-source and media/media-source tests

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp: Added.
        (WebCore::MediaSourceGStreamer::open):
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::~MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::addSourceBuffer):
        (WebCore::MediaSourceGStreamer::setDuration):
        (WebCore::MediaSourceGStreamer::markEndOfStream):
        (WebCore::MediaSourceGStreamer::unmarkEndOfStream):
        * platform/graphics/gstreamer/MediaSourceGStreamer.h: Added.
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp: Added.
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::append):
        (WebCore::SourceBufferPrivateGStreamer::abort):
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h: Added.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp: Added.
        (webKitMediaSrcAddSrc):
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (webKitMediaSrcSetProperty):
        (webKitMediaSrcGetProperty):
        (webKitMediaVideoSrcStop):
        (webKitMediaAudioSrcStop):
        (webKitMediaVideoSrcStart):
        (webKitMediaAudioSrcStart):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcQueryWithParent):
        (webKitMediaSrcUriGetType):
        (webKitMediaSrcGetProtocols):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):
        (webKitMediaSrcUriHandlerInit):
        (webKitMediaVideoSrcNeedDataMainCb):
        (webKitMediaAudioSrcNeedDataMainCb):
        (webKitMediaVideoSrcNeedDataCb):
        (webKitMediaAudioSrcNeedDataCb):
        (webKitMediaVideoSrcEnoughDataMainCb):
        (webKitMediaAudioSrcEnoughDataMainCb):
        (webKitMediaVideoSrcEnoughDataCb):
        (webKitMediaAudioSrcEnoughDataCb):
        (webKitMediaVideoSrcSeekMainCb):
        (webKitMediaAudioSrcSeekMainCb):
        (webKitMediaVideoSrcSeekDataCb):
        (webKitMediaAudioSrcSeekDataCb):
        (webKitMediaSrcSetMediaPlayer):
        (webKitMediaSrcSetPlayBin):
        (MediaSourceClientGstreamer::MediaSourceClientGstreamer):
        (MediaSourceClientGstreamer::~MediaSourceClientGstreamer):
        (MediaSourceClientGstreamer::didReceiveDuration):
        (MediaSourceClientGstreamer::didReceiveData):
        (MediaSourceClientGstreamer::didFinishLoading):
        (MediaSourceClientGstreamer::didFail):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h: Added.

2013-11-14  Victor Costan  <costan@gmail.com>

        XMLSerializer escapes < > & correctly inside <script> and <style> tags.
        https://bugs.webkit.org/show_bug.cgi?id=123914

        Reviewed by Darin Adler.

        Test: fast/dom/XMLSerializer-entities.html

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces): vim removed some whitespace.
        (WebCore::MarkupAccumulator::entityMaskForText): Fixed the returned value for <script> etc in XML.

2013-11-14  Bem Jones-Bey  <bjonesbe@adobe.com>

        ASSERTION FAILED: rangesIntersect(m_renderer.pixelSnappedLogicalTopForFloat(floatingObject), m_renderer.pixelSnappedLogicalBottomForFloat(floatingObject), m_lineTop, m_lineBottom) ../../Source/WebCore/rendering/FloatingObjects.cpp(463)
        https://bugs.webkit.org/show_bug.cgi?id=124375

        Reviewed by Alexandru Chiculita.

        When moving the placed floats tree over to LayoutUnit, I forgot to
        update these asserts, which causes issues on ports with subpixel
        layout enabled. 

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::::collectIfNeeded):

2013-11-14  Victor Costan  <costan@gmail.com>

        Clean up sequence handling in Blob constructor
        https://bugs.webkit.org/show_bug.cgi?id=124343

        Reviewed by Alexey Proskuryakov.

        Added test case to LayoutTests/fast/files/blob-constructor.html

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
            Handle exceptions in sequences, eliminate double type-checking for
            ArrayBuffer, ArrayBufferView and Blob parts.

2013-11-14  Oliver Hunt  <oliver@apple.com>

        Make CLoop easier to build, and make it work
        https://bugs.webkit.org/show_bug.cgi?id=124359

        Reviewed by Geoffrey Garen.

        Add cloop configuration info to WebCore FeatureDefines
        so that it's consistent with JSC

        * Configurations/FeatureDefines.xcconfig:

2013-11-14  Aloisio Almeida Jr  <aloisio.almeida@openbossa.org>

        [Cairo] Avoid extra copy when drawing images
        https://bugs.webkit.org/show_bug.cgi?id=124209

        Reviewed by Martin Robinson.

        To solve the bug #58309 a cairo subsurface is being used to limit the
        source image boundaries.
        In many cases, when a cairo subsurface is used for drawing an image,
        it occurs an image copy, causing performance penalty. In the case of
        the function PlatformContextCairo::drawSurfaceToContext, the image
        copy always happens.
        So, we should use the subsurface only when it's really necessary.
        In cases where we're drawing the whole image, the subsurface is
        unnecessary.

        The proposed patch avoid the use of subsurfaces when sampling the whole
        image.

        No new tests. It's an enhancement. Already covered by existing tests.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement raw format for WebCrypto key export
        https://bugs.webkit.org/show_bug.cgi?id=124376

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-export-key.html
               crypto/subtle/hmac-export-key.html

        A CryptoKey just exports its native CryptoKeyData, which will also work nicely for
        JWK format soon. For spki and pkcs8, we'll need to figure out the best way to
        utilize platform library support for ASN.1, but we are not there yet.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::exportKey):
        * crypto/CryptoKey.h:
        * crypto/SubtleCrypto.idl:
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::exportData):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::exportData):
        * crypto/keys/CryptoKeyHMAC.h:

        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::exportData):
        Added a dummy implementation for RSA.

2013-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Simply generated domain dispatch methods for domains with few commands
        https://bugs.webkit.org/show_bug.cgi?id=124374

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspector.py:
        (Generator.go):
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:

2013-11-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Accept the new <box> value for shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=124227

        Reviewed by David Hyatt.

        The shape-outside property can now be set to the box values [margin/border/padding/content]-box.
        This patch adds the parsing code required to accept the new values, and the layout code
        to create a rectangle shape that has the size and position of the appropriate box.

        Tests: fast/shapes/shape-outside-floats/shape-outside-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-boxes-002.html
               fast/shapes/shape-outside-floats/shape-outside-boxes-003.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Output the new box values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Accept the new box values.
        * css/CSSValueKeywords.in: Add margin-box value.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Accept the new box values.
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderLogicalWidth): Added new utility methods to help
        with box sizing.
        (WebCore::RenderBoxModelObject::borderLogicalHeight): Ditto.
        (WebCore::RenderBoxModelObject::paddingLogicalWidth): Ditto.
        (WebCore::RenderBoxModelObject::paddingLogicalHeight): Ditto.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): You can create a shape from a box's dimensions, rather
        than always using a BasicShape or RasterShape value.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Create the appropriate shape based on the box values.
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize): Adjust for the box size when using a box value.
        (WebCore::ShapeInfo::logicalTopOffset): Ditto.
        (WebCore::ShapeInfo::logicalLeftOffset): Ditto.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Enable for the box values.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::isEnabledFor): Disable for shape-inside.
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createBoxValue): Create the appropriate shape value for a box.
        (WebCore::ShapeValue::box): Return the box value for this ShapeValue.
        (WebCore::ShapeValue::ShapeValue): Create a ShapeValue from a box value.

2013-11-14  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Tim Horton.

        Post-checkin review comment! StickToViewportBounds sounds better and more accurate 
        than StickToWindowBounds.

        * platform/ScrollTypes.h:

2013-11-13  Jer Noble  <jer.noble@apple.com>

        Unreviewed build failure; update MediaPlayerPrivateAVFFoundationCF::seekToTime after r159208.

        After r159208, seekToTime takes tolerance parameters.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::seekToTime):
        (WebCore::AVFWrapper::seekToTime):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

2013-11-14  Beth Dakin  <bdakin@apple.com>

        Add a new mode where fixed elements don't constrain their positions during a
        rubber band
        https://bugs.webkit.org/show_bug.cgi?id=124260

        Reviewed by Tim Horton.

        This patch adds a new enum called ScrollBehaviorForFixedElements, which has
        two values, StickToDocumentBounds or StickToWindowBounds. StickToDocumentBounds 
        corresponds to our current behavior, where fixed elements constrain 
        their positions during a rubber-band so that they stay stuck to the document.
        The new mode, StickToWindowBounds, will cause fixed elements to always stay
        fixed relative to the window.

        scrollOffsetForFixedPosition() now takes a new parameter for the fixed behavior
        so that it knows whether or not to constrain the position.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollOffsetForFixedPosition):
        
        Right now, just return StickToDocumentBounds and retain existing behavior.
        (WebCore::FrameView::scrollBehaviorForFixedElements):
        * page/FrameView.h:

        The scrolling thread needs to know about the fixed element scroll behavior,
        so this code makes ScrollingStateScrollingNodes keep track of that 
        information to pass over to the scrolling thread.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollBehaviorForFixedElements):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::setScrollBehaviorForFixedElementsForNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        
        Here is the new enum.
        * platform/ScrollTypes.h:
        
        Another place where we only want to constrain scroll position if that is the
        mode we are in.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::customPositionForVisibleRectComputation):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] HMAC sign/verify crashes when key is empty
        https://bugs.webkit.org/show_bug.cgi?id=124372

        Reviewed by Sam Weinig.

        Test: crypto/subtle/hmac-sign-verify-empty-key.html

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::calculateSignature): Give it
        a non-null pointer then.

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement RSASSA-PKCS1-v1_5 sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=124335

        Build fix.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:

2013-11-14  Samuel White  <samuel_white@apple.com>

        AX: Calling NSAccessibilityColumnsAttribute and NSAccessibilityRowsAttribute simply to get column/row count can be very expensive.
        https://bugs.webkit.org/show_bug.cgi?id=124293

        Reviewed by Chris Fleizach.

        Added ability to get accessibility table column or row count without fetching all columns or rows.

        Test: platform/mac/accessibility/table-column-and-row-count.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement RSASSA-PKCS1-v1_5 sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=124335

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsassa-pkcs1-v1_5-sign-verify.html

        * WebCore.xcodeproj/project.pbxproj: Added new files, removed Mac SHA algorithm files.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::getCommonCryptoDigestAlgorithm):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Implemented. These take two steps, first a digest is computed, and then it's signed.

        * crypto/CryptoDigest.h: Added.
        * crypto/mac/CryptoDigestMac.cpp: Added.
        (WebCore::CryptoDigest::CryptoDigest):
        (WebCore::CryptoDigest::~CryptoDigest):
        (WebCore::CryptoDigest::create):
        (WebCore::CryptoDigest::addBytes):
        (WebCore::CryptoDigest::computeHash):
        Added a cross-platform interface and Mac implementation to compute a digest. It
        should be possible to use it outside WebCrypto if we need to (perhaps even merge
        with  WTF SHA-1 class).
        The Mac implementation is kind of ugly, but at least it encapsulates the ugliness.

        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp: (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp: (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp: (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp: (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/mac/CryptoAlgorithmSHA1Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA224Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA256Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA384Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA512Mac.cpp: Removed.
        These are all cross-platform now.

2013-11-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Empty polygons with non-zero shape-padding cause an ASSERT crash
        https://bugs.webkit.org/show_bug.cgi?id=124324

        Reviewed by Andreas Kling.

        PolygonShape::shapePaddingBounds() and PolygonShape::shapeMarginBounds() no
        longer attempt to compute a new FloatPolygon when the original is empty, i.e.
        when it has less than three vertices.

        Tests: fast/shapes/shape-inside/shape-inside-empty-polygon-crash.html
               fast/shapes/shape-outside-floats/shape-outside-floats-empty-polygon-crash.html

        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::shapePaddingBounds): Don't compute a padding FloatPolygon if the original polygon is empty.
        (WebCore::PolygonShape::shapeMarginBounds): Don't compute a margin FloatPolygon if the original polygon is empty.

2013-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cleaner Backend Method Calling Code Generation
        https://bugs.webkit.org/show_bug.cgi?id=124333

        Reviewed by Timothy Hatcher.

        No change in functionality, just improved generated code.

        * inspector/CodeGeneratorInspector.py:
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:
        * inspector/InspectorBackendDispatcher.cpp:
        * inspector/InspectorBackendDispatcher.h:

2013-11-14  Seokju Kwon  <seokju@webkit.org>

        Use [ImplementedAs=defaultStatus] for Window.defaultstatus
        https://bugs.webkit.org/show_bug.cgi?id=124334

        Reviewed by Christophe Dumez.

        No new tests, this is just refactoring.

        Use [ImplementedAs=defaultStatus] for Window.defaultstatus
        and remove unnecessary code from DOMWindow.
        Because 'defaultstatus' is an alias of defaultStatus.

        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2013-11-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toSVGPolyline|gonElement() to replace static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124341

        Reviewed by Andreas Kling.

        toSVGFoo() supports more plenty helper functions. So, toSVGFoo() needs
        to be used instead of static_cast<>.

        Additionally, cleanup other static_cast<> as well.

        No new tests, no behavior changes.

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromEllipseElement):
        (WebCore::updatePathFromLineElement):
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/svgtags.in: Add *generateTypeHelpers* keyword to polygon, polyline

2013-11-14  Andreas Kling  <akling@apple.com>

        FontDescription copies should share families list, not duplicate it.
        <https://webkit.org/b/124338>

        Turn FontDescription::m_families into a RefCountedArray<AtomicString>
        instead of a Vector<AtomicString, 1>. This allows FontDescription to
        share the families list between copies, instead of each object having
        its own Vector.

        Also, FontDescription itself shrinks by 16 bytes.

        Reviewed by Antti Koivisto.

2013-11-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce FILTER_TYPE_CASTS for child filter class
        https://bugs.webkit.org/show_bug.cgi?id=124332

        Reviewed by Andreas Kling.

        To use TYPE_CASTS_BASE, define FILTER_TYPE_CASTS macro. Thanks to 
        it, static_cast<SVGFilter*> can be replaced by toSVGFilter().

        No new tests, no behavior changes.

        * platform/graphics/filters/Filter.h:
            Add isSVGFilter() to check if casting object is SVGFilter object.
        (WebCore::Filter::isSVGFilter):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFilter.h:

2013-11-13  Victor Costan  <costan@gmail.com>

        Blob constructor accepts a sequence (array-like object) as first arg. 
        https://bugs.webkit.org/show_bug.cgi?id=124175

        Reviewed by Christophe Dumez.

        Added test cases to fast/files/script-tests/blob-constructor.js.

        * bindings/js/JSBlobCustom.cpp: Make the constructor work with sequences.
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJSSequence): Slightly better error message when conversion fails.
        (WebCore::toJS): Whitespace.
        (WebCore::jsArray): Whitespace.

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: InspectorBackendDispatcher improvements
        https://bugs.webkit.org/show_bug.cgi?id=124330

        Reviewed by Timothy Hatcher.

        * inspector/InspectorBackendDispatcher.cpp:
        (WebCore::InspectorBackendDispatcher::sendResponse):
        (WebCore::InspectorBackendDispatcher::reportProtocolError):
        * inspector/InspectorBackendDispatcher.h:
        (WebCore::InspectorSupplementalBackendDispatcher::InspectorSupplementalBackendDispatcher):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows Build Fix after r159268.

        Missed adding InspectorBackendDispatcher.h and cpp to the Windows build.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generate Individual InspectorBackendDispatchers, add base InspectorBackendDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=124296

        Reviewed by Timothy Hatcher.

        No new tests, this is just refactoring without changing functionality.
        Set of changes made:

          - Add inspector/InspectorBackendDispatcher.{h,cpp}. This used to be almost entirely
            written in the code generator strings file, but make it actual source files
            because there is nothing changing in the code. Also clean this up a bit.
          - Give the base dispatcher a list of domain dispatchers and a way to register.
          - Make InspectorBackendDispatcher::dispatch read the domain of incoming request
            and pass the request on to the domain dispatcher.
          - Create per-domain dispatcher classes named "InspectorFooBackendDispatcher"
          - Convert "InspectorBackendDispatcher::FooCommandHandler" interfaces to
            "InspectorFooBackendDispatcherHandler" interfaces.
          - Convert all "InspectorBackendDispatcherImpl::FooDomain_fooMethod" methods to
            "InspectorFooBackendDispatcher::fooMethod" methods. These can also remove their
            "if (!agent)" checks because that can never be the case anymore.
          - Remove InspectorBackendDispatcherImpl, now that there are base and domain dispatchers.
          - Add ASCIILiteral in many places in generated code where possible.
          - In all agents, create dispatchers in didCreateFrontendAndBackend and clear
            them in willDestroyFrontendAndBackend, right alongside frontend dispatchers.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes.get_fixed_data.Res):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (Generator):
        (Generator.go):
        (Generator.process_command):
        (Generator.generate_send_method):
        * inspector/CodeGeneratorInspectorStrings.py:
        (void):
        (HashMap):
        (InspectorBackendDispatchers_h):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBackendDispatcher.cpp: Added.
        (WebCore::InspectorBackendDispatcher::CallbackBase::CallbackBase):
        (WebCore::InspectorBackendDispatcher::CallbackBase::isActive):
        (WebCore::InspectorBackendDispatcher::CallbackBase::sendFailure):
        (WebCore::InspectorBackendDispatcher::CallbackBase::sendIfActive):
        (WebCore::InspectorBackendDispatcher::create):
        (WebCore::InspectorBackendDispatcher::registerDispatcherForDomain):
        (WebCore::InspectorBackendDispatcher::dispatch):
        (WebCore::InspectorBackendDispatcher::sendResponse):
        (WebCore::InspectorBackendDispatcher::reportProtocolError):
        (WebCore::InspectorBackendDispatcher::getPropertyValue):
        (WebCore::AsMethodBridges::asInt):
        (WebCore::AsMethodBridges::asDouble):
        (WebCore::AsMethodBridges::asString):
        (WebCore::AsMethodBridges::asBoolean):
        (WebCore::AsMethodBridges::asObject):
        (WebCore::AsMethodBridges::asArray):
        (WebCore::InspectorBackendDispatcher::getInt):
        (WebCore::InspectorBackendDispatcher::getDouble):
        (WebCore::InspectorBackendDispatcher::getString):
        (WebCore::InspectorBackendDispatcher::getBoolean):
        (WebCore::InspectorBackendDispatcher::getObject):
        (WebCore::InspectorBackendDispatcher::getArray):
        * inspector/InspectorBackendDispatcher.h: Added.
        (WebCore::InspectorSupplementalBackendDispatcher::InspectorSupplementalBackendDispatcher):
        (WebCore::InspectorSupplementalBackendDispatcher::~InspectorSupplementalBackendDispatcher):
        (WebCore::InspectorBackendDispatcher::~InspectorBackendDispatcher):
        (WebCore::InspectorBackendDispatcher::clearFrontend):
        (WebCore::InspectorBackendDispatcher::isActive):
        (WebCore::InspectorBackendDispatcher::InspectorBackendDispatcher):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:

2013-11-13  Andy Estes  <aestes@apple.com>

        Use NSCalendarIdentifierGregorian instead of NSGregorianCalendar on OS X 10.9 and iOS
        https://bugs.webkit.org/show_bug.cgi?id=124323

        Reviewed by Mark Rowe.

        NSGregorianCalendar was deprecated in OS X 10.9 and iOS 7.

        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::LocaleMac):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename InspectorBackendDispatcher.h to InspectorBackendDispatchers.h
        https://bugs.webkit.org/show_bug.cgi?id=124257

        Reviewed by Timothy Hatcher.

        Soon each domain will generate its own dispatcher, and the generic
        InspectorBackendDispatcher will no longer be generated, it will just
        live in WebCore/inspector.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        * inspector/CodeGeneratorInspectorStrings.py:
        (InspectorBackendDispatchers_h):
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/WorkerInspectorController.cpp:

2013-11-13  Andreas Kling  <akling@apple.com>

        Remove Document::m_savedRenderView pointer.
        <https://webkit.org/b/124310>

        This pointer held a copy of m_renderView while the document was in
        page cache, and null while it wasn't. It was not used for anything.

        Reviewed by Anders Carlsson.

2013-11-13  Brady Eidson  <beidson@apple.com>

        Move setIndexKeys() to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124301

        Reviewed by Anders Carlsson.

        This is a big step towards moving knowledge of the backing store out of the frontend.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::setIndexKeys):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract InspectorFrontendDispatchers from InspectorFrontend
        https://bugs.webkit.org/show_bug.cgi?id=124246

        Reviewed by Timothy Hatcher.

        No new tests, this is just refactoring without changing functionality.
        Set of changes made:

          - Remove "class InspectorFrontend" that currently does nothing but hold
            sub-frontend dispatcher classes. Catches some stale code.
          - Generate individual "class InspectorFooFrontendDispatcher" classes for
            domains that have events. Catches some unnecessary classes.
          - Simplify the Base Agent interface from optional set/clearFrontend/register
            to required didCreateFrontendAndBackend/willDestroyFrontendAndBackend.
            New agents must implement this and this will be their cue to setup
            frontend and backend dispatchers.
          - Base Agent no longer needs to be templated or have an Interface class.
          - While we are changing subclass BaseAgent superclass calls, use ASCIILiteral
          - In agents with events, convert "InspectorFrontend::Foo* m_frontend" to
            "unique_ptr<InspectorFooFrontendDispatcher> m_frontendDispatcher" and
            update uses as appropriate within the classes.
          - In agents with events, create dispatchers in didCreateFrontendAndBackend
            and clear them in willDestroyFrontendAndBackend.

        * inspector/CodeGeneratorInspector.py:
        (Generator):
        (Generator.go):
        (Generator.process_event):
        * inspector/CodeGeneratorInspectorStrings.py:
        (InspectorFrontendChannel):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::hasFrontend):
        * inspector/InspectorAgentRegistry.cpp:
        (WebCore::InspectorAgentRegistry::append):
        (WebCore::InspectorAgentRegistry::didCreateFrontendAndBackend):
        (WebCore::InspectorAgentRegistry::willDestroyFrontendAndBackend):
        * inspector/InspectorAgentRegistry.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::networkStateChanged):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgent::discardAgent):
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCSSAgent::mediaQueryResultChanged):
        (WebCore::InspectorCSSAgent::didCreateNamedFlow):
        (WebCore::InspectorCSSAgent::willRemoveNamedFlow):
        (WebCore::InspectorCSSAgent::regionLayoutUpdated):
        (WebCore::InspectorCSSAgent::regionOversetChanged):
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::styleSheetChanged):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::findFramesWithUninstrumentedCanvases):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hasFrontend):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::didRemoveDOMAttr):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        (WebCore::InspectorDOMAgent::characterDataModified):
        (WebCore::InspectorDOMAgent::didPushShadowRoot):
        (WebCore::InspectorDOMAgent::willPopShadowRoot):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::enable):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::addMessageToConsole):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        (WebCore::InspectorDebuggerAgent::reset):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::layerTreeDidChange):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::frameDetached):
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        (WebCore::InspectorPageAgent::willRunJavaScriptDialog):
        (WebCore::InspectorPageAgent::didRunJavaScriptDialog):
        (WebCore::InspectorPageAgent::scriptsEnabled):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        (WebCore::InspectorProfilerAgent::toggleRecordButton):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveData):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrameError):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::sendEvent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::dispatchMessageFromWorker):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::didStartWorkerGlobalScope):
        (WebCore::InspectorWorkerAgent::workerGlobalScopeTerminated):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::didCreateIsolatedContext):
        (WebCore::PageRuntimeAgent::notifyContextCreated):
        * inspector/PageRuntimeAgent.h:
        * inspector/TimelineRecordFactory.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        (WebCore::WorkerInspectorController::hasFrontend):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * inspector/protocol/Input.json:

2013-11-13  Simon Fraser  <simon.fraser@apple.com>

        Rename FrameView's repaintFixedElementsAfterScrolling and updateFixedElementsAfterScrolling
        https://bugs.webkit.org/show_bug.cgi?id=124306

        Reviewed by Tim Horton.
        
        FrameView::repaintFixedElementsAfterScrolling() didn't do any repainting, and didn't
        just apply to fixed elements. Rename it to updateLayerPositionsAfterScrolling().
        
        updateFixedElementsAfterScrolling() was also confusingly named; rename it
        to updateCompositingLayersAfterScrolling().

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):
        (WebCore::FrameView::updateLayerPositionsAfterScrolling):
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):
        * platform/ScrollView.h:
        (WebCore::ScrollView::updateLayerPositionsAfterScrolling):
        (WebCore::ScrollView::updateCompositingLayersAfterScrolling):

2013-11-13  Andreas Kling  <akling@apple.com>

        Generate casting helpers for SVGPaint and SVGColor.
        <https://webkit.org/b/124285>

        Use CSS_VALUE_TYPE_CASTS to generate type casting helpers for the
        SVGPaint and SVGColor classes.

        Reviewed by Anders Carlsson.

2013-11-13  Benjamin Poulain  <bpoulain@apple.com>

        Update ResourceHandleCF to use the didReceiveBuffer() callback
        https://bugs.webkit.org/show_bug.cgi?id=124256

        Reviewed by Alexey Proskuryakov.

        Use didReceiveBuffer() instead of didReceiveData() to pass data back to
        the ResourceHandleClient. This unify the update code with the NSURLConnection loader.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveData):
        (WebCore::ResourceHandle::handleDataArray):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Split Inspector.json into individual domain json files
        https://bugs.webkit.org/show_bug.cgi?id=124098

        Reviewed by Timothy Hatcher.

        Split the Inspector domains into their own json file. Generate a
        combined Inspector.json from all of the json files at build time
        so that the CodeGenerator is unchanged.

        * .gitattributes:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        (TypeMap.__init__):
        * inspector/Inspector.json: Removed.
        * inspector/Scripts/generate-combined-inspector-json.py: Added.
        * inspector/protocol/ApplicationCache.json: Added.
        * inspector/protocol/CSS.json: Added.
        * inspector/protocol/Canvas.json: Added.
        * inspector/protocol/Console.json: Added.
        * inspector/protocol/DOM.json: Added.
        * inspector/protocol/DOMDebugger.json: Added.
        * inspector/protocol/DOMStorage.json: Added.
        * inspector/protocol/Database.json: Added.
        * inspector/protocol/Debugger.json: Added.
        * inspector/protocol/FileSystem.json: Added.
        * inspector/protocol/HeapProfiler.json: Added.
        * inspector/protocol/IndexedDB.json: Added.
        * inspector/protocol/Input.json: Added.
        * inspector/protocol/InspectorDomain.json: Added.
        * inspector/protocol/LayerTree.json: Added.
        * inspector/protocol/Memory.json: Added.
        * inspector/protocol/Network.json: Added.
        * inspector/protocol/Page.json: Added.
        * inspector/protocol/Profiler.json: Added.
        * inspector/protocol/Runtime.json: Added.
        * inspector/protocol/Timeline.json: Added.
        * inspector/protocol/Worker.json: Added.

2013-11-13  Zalan Bujtas  <zalan@apple.com>

        Code cleanup: change FrameView::doLayoutWithFrameFlattening() to make it more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=124238

        Reviewed by Simon Fraser.

        Rename doLayoutWithFrameFlattening() and change its signature so that it's inline with
        what it does.

        Covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded):
        * page/FrameView.h:

2013-11-13  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Modifying RTCSessionDescription object construction to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=124212

        Reviewed by Eric Carlson.

        According to the spec the RTCSessionDescriptionInit parameter in RTCSessionDescription constructor is optional,
        which must not be nullable. If the 'type' and/or 'sdp' keys are not present, the string object that stores
        them in the RTCSessionDescription class, must be null in those cases. Also, if an object that is not a
        Dictionary is passed as argument to the constructor, an exception must be raised.

        Existing test was updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCSessionDescription.cpp:
        (WebCore::RTCSessionDescription::create):
        * Modules/mediastream/RTCSessionDescription.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCSessionDescriptionCustom.cpp: Added.
        (WebCore::JSRTCSessionDescriptionConstructor::constructJSRTCSessionDescription):

2013-11-13  Tim Horton  <timothy_horton@apple.com>

        Fix release build after r159224.

        * WebCore.exp.in:

2013-11-13  Anders Carlsson  <andersca@apple.com>

        Remove ChromeClient::paintCustomOverhangArea
        https://bugs.webkit.org/show_bug.cgi?id=124304

        Reviewed by Beth Dakin.

        This function always returns false now; get rid of it.

        * page/Chrome.cpp:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintOverhangAreas):

2013-11-09  Martin Robinson  <mrobinson@igalia.com>

        [MathML] The double bar vertical delimiter does not stretch properly
        https://bugs.webkit.org/show_bug.cgi?id=123543

        Reviewed by Chris Fleizach.

        * rendering/mathml/RenderMathMLOperator.cpp: Add stretching support for U+2225, which
        is another version of the vertical bar.

2013-11-13  Simon Fraser  <simon.fraser@apple.com>

        ASSERTION FAILED: m_repaintRect == renderer().clippedOverflowRectForRepaint(renderer().containerForRepaint()) after r135816
        https://bugs.webkit.org/show_bug.cgi?id=103432

        Reviewed by Dave Hyatt.

        RenderLayer caches repaint rects in m_repaintRect, and on updating layer
        positions after scrolling, asserts that the cached rect is correct. However,
        this assertion would sometimes fail if we were scrolling as a result of
        doing adjustViewSize() in the middle of layout, because we haven't updated
        layer positions post-layout yet.
        
        Fix by having the poorly named FrameView::repaintFixedElementsAfterScrolling()
        skip the layer updating if this FrameView is inside of adjusetViewSize() in
        layout.
        
        In order to know if we're inside view size adjusting, add a LayoutPhase
        member to FrameView, replacing two existing bools that track laying out state.

        Investigative work showed that there are many, many ways to re-enter FrameView::layout(),
        which makes it hard (but desirable) to more assertions about state changes, but
        indicated that saving and restoring the state (via TemporaryChange<LayoutPhase>)
        was a good idea.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintFixedElementsAfterScrolling):
        * page/FrameView.h:

2013-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete unused TextPainter function
        https://bugs.webkit.org/show_bug.cgi?id=124292

        Reviewed by Tim Horton.

        New tests are unnecessary since there is no behavior change

        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintText):
        * rendering/TextPainter.h:

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        Check WebCrypto parameter types when casting
        https://bugs.webkit.org/show_bug.cgi?id=124297

        Reviewed by Sam Weinig.

        Also changed existing toCryptoXXX functions to use TYPE_CASTS_BASE mechanism.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        And sure enough, there was a bug caught by the added checks.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * crypto/CryptoAlgorithmParameters.h:
        (WebCore::CryptoAlgorithmParameters::ENUM_CLASS):
        (WebCore::CryptoAlgorithmParameters::parametersClass):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyData.h:
        * crypto/CryptoKeySerialization.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::isCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        (WebCore::isCryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html is failing on Maverics release bot
        https://bugs.webkit.org/show_bug.cgi?id=124280

        Reviewed by Anders Carlsson.

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        Don't be a muppet, initialize your variables.

2013-11-12  Jer Noble  <jer.noble@apple.com>

        Add support for HTMLMediaElement.fastSeek()
        https://bugs.webkit.org/show_bug.cgi?id=124262

        Reviewed by Eric Carlson.

        Test: media/video-fast-seek.html

        Add the fastSeek() method to HTMLMediaElement, and use fastSeek() in
        the JavaScript media controls.

        Add the new fastSeek() method:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fastSeek): Call seekWithTolerance.
        (HTMLMediaElement::seek): Call seekWithTolerance with 0 tolerance.
        (HTMLMediaElement::seekWithTolerance): Renamed from seek().
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        Add seekWithTolerance() to MediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::seekWithTolerance): Pass to MediaPlayerPrivate.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekWithTolerance): Default implementation which
            calls seek().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Call seekWithTolerance with 0 tolerance.
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): Renamed from seek().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): Take tolerance parameters.

        Use the new fastSeek() method while actively scrubbing.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Add mouse up and down handlers.
        (Controller.prototype.handleTimeUpdate): Only update the timeline when not scrubbing.
        (Controller.prototype.handleTimelineChange): Use fastSeek().
        (Controller.prototype.handleTimelineMouseDown): Start scrubbing.
        (Controller.prototype.handleTimelineMouseUp): Stop scrubbing.

2013-11-13  Andreas Kling  <akling@apple.com>

        Generate casting helpers for scrolling tree classes.
        <https://webkit.org/b/124286>

        Added SCROLLING_STATE_NODE_TYPE_CASTS and used it to replace the
        hand-written toFoo() casts for ScrollingStateNode subclasses.

        Reviewed by Anders Carlsson.

2013-11-13  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Determining if a line is inside of a shape should only happen in one place
        https://bugs.webkit.org/show_bug.cgi?id=121708

        Reviewed by Andreas Kling.

        The ShapeInfo::lineOverlapsShapeBounds() methods now delegate to the Shape object. The
        logic for the Shape overlap test is now the same for ShapeInsideInfo and ShapeOutsideInfo.

        No new tests, this is just a refactoring of existing code.

        * rendering/shapes/Shape.h:
        (WebCore::Shape::lineOverlapsShapeMarginBounds): Apply lineOverlapsLayoutRect() to the shape-margin bounds LayoutRect.
        (WebCore::Shape::lineOverlapsShapePaddingBounds): Apply lineOverlapsLayoutRect() to the shape-padding bounds LayoutRect.
        (WebCore::Shape::lineOverlapsLayoutRect): The common code for checking if a line and a LayoutRect overlap.
        * rendering/shapes/ShapeInsideInfo.h: Use lineOverlapsShapePaddingBounds() for lineOverlapShapeBounds().
        * rendering/shapes/ShapeOutsideInfo.h: Use lineOverlapsShapeMarginBounds() for lineOverlapShapeBounds().

2013-11-13  Jochen Eisinger  <jochen@chromium.org>

        Restrict UserGestureIndicator to main thread
        https://bugs.webkit.org/show_bug.cgi?id=124277

        Reviewed by Andreas Kling.

        Certain classes that interact with UserGestureIndicators, e.g.
        the DOMTimer, can also live on worker threads. Since a
        background thread cannot possible get a user gesture in the
        first place, and to avoid races, we turn a UserGestureIndicator
        on a background thread into a no-op.

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::~UserGestureIndicator):
        (WebCore::UserGestureIndicator::processingUserGesture):
        * dom/UserGestureIndicator.h:

2013-11-13  Antti Koivisto  <antti@apple.com>

        Factor simple line creation loop to function
        https://bugs.webkit.org/show_bug.cgi?id=124279

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::Style::Style):
        
            Capture style that affects line layout to a struct.

        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::measureWord):
        (WebCore::SimpleLineLayout::createLineRuns):
        
            Factor the line loop here.

        (WebCore::SimpleLineLayout::createTextRuns):

2013-11-12  Antti Koivisto  <antti@apple.com>

        Support overflow-wrap:break-word on simple line path
        https://bugs.webkit.org/show_bug.cgi?id=124206

        Reviewed by Andreas Kling.

        Pure text documents are rendered with break-word. It is also common in discussion board type sites.
        
        This also makes many <textarea>'s rendered using the simple line path.

        Tests: fast/forms/basic-textareas-quirks-simple-lines.html
               fast/forms/linebox-overflow-in-textarea-padding-simple-lines.html
               fast/forms/negativeLineHeight-simple-lines.html
               fast/forms/textAreaLineHeight-simple-lines.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange):
        (WebCore::RenderBlock::markShapeInsideDescendantsForLayout):
        
            Invalidate the cached line layout mode on shape-inside style change.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::createTextRuns):

2013-11-13  Andreas Kling  <akling@apple.com>

        Turn some not-so-rare ElementRareData bits into Node flags.
        <https://webkit.org/b/124275>

        The following 4 bits seem to be the most commonly set:

        - childrenAffectedByHover()
        - childrenAffectedByFirstChildRules()
        - childrenAffectedByLastChildRules()
        - childrenAffectedByDirectAdjacentRules()

        Turning them into Node flags means we don't have to allocate full
        ElementRareData object in many cases. I also took this opportunity
        to make Node's flag twiddling functions available to subclasses.

        1.38 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-13  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Cleanup the build from unused parameters in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124199.

        Reviewed by Csaba Osztrogonác.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedOrPendingImage):
        * dom/Document.cpp:
        (WebCore::Document::scriptedAnimationControllerSetThrottled):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        * html/HTMLAnchorElement.cpp:
        (WebCore::shouldProhibitLinks):
        * html/parser/XSSAuditor.cpp:
        (WebCore::isSemicolonSeparatedAttribute):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setIsInWindow):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer):
        * testing/Internals.cpp:
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setCaptionsStyleSheetOverride):

2013-11-13  Andreas Kling  <akling@apple.com>

        Refalize CSSCursorImageValue.
        <https://webkit.org/b/124272>

        Make CSSCursorImageValue constructor return a PassRef, and have it
        take the image CSSValue as a PassRef (and store it internally in a
        Ref<CSSValue>.)

        Had to add a Ref version of compareCSSValuePtr() to make this work.

        Reviewed by Antti Koivisto.

2013-11-13  Andreas Kling  <akling@apple.com>

        RenderTableSection: Cell structures don't need allocation padding.
        <https://webkit.org/b/124263>

        The row structure data gets shrunk-to-fit once we get to layout,
        but per-row cell structures get no such luxury. Fortuntely we know
        ahead of time how many cells a row needs to accomodate, so we can
        just use Vector::resizeToFit() instead of Vector::grow().

        1.25 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-13  Andreas Kling  <akling@apple.com>

        Avoid unnecessarily padding the FontDescription families vector.
        <https://webkit.org/b/124267>

        Use a bit of reserveInitialCapacity+uncheckedAppend grease to avoid
        jumping all the way to capacity=16 when a style has more than just
        a single font-family in it.

        130 kB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontFamily::applyValue):

2013-11-13  Andreas Kling  <akling@apple.com>

        Make remaining CSSPrimitiveValue constructors return PassRef.
        <https://webkit.org/b/124270>

        ..and same with the corresponding CSSValuePool functions.

        Reviewed by Antti Koivisto.

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        Added a way to add an Uint8Array, as needed for RSA key.algorithm.publicExponent.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams): Removed unneeded JSC prefixes.
        (WebCore::createAesKeyGenParams): Ditto.
        (WebCore::createHmacParams): Ditto.
        (WebCore::createHmacKeyParams): Ditto.
        (WebCore::createRsaKeyGenParams): Added. 
        (WebCore::createRsaSsaKeyParams): Added. WebCrypto currently doesn't specify any
        parameters for importKey, so the structure remains blank (unlike with JWK).
        (WebCore::createRsaSsaParams): Added (currently unused, will be sued for sign/verify soon).
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey): Ditto.

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Added.
        (WebCore::getBigIntegerVectorFromJSON): Added.
        (WebCore::createRSASSAKeyParameters): Create parameters for key import. The key
        will remember which algorithm it's allowed to be used with.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): Added support for
        RS256...RS512 (tha is, RSAES_PKCS1_v1_5 with SHA-256...SHA-512).
        (WebCore::JSCryptoKeySerializationJWK::keyDataOctetSequence): Split out of keyData().
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Added code to read
        RSA key components from JWK.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Call one of the above functions.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Placeholders.

        * crypto/CryptoKey.h: (WebCore::CryptoKeyClass): Added RSA key class for poor man's RTTI.

        * crypto/CryptoKeyData.h: (WebCore::CryptoKeyData::FormatRSAComponents): Added RSAComponents
        for poor man's RTTI.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: (WebCore::CryptoAlgorithmAES_CBC::importKey): 
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::isCryptoKeyAES):
        (WebCore::toCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::toCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::isCryptoKeyHMAC):
        (WebCore::toCryptoKeyHMAC):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Switched from "as" functions to "is" and "to" ones, as that's more idiomatic.

        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Added.
        Glue code for importKey/generateKey for now.

        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Added.
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents):
        (WebCore::CryptoKeyDataRSAComponents::~CryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyDataRSAComponents.h: Added.
        (WebCore::toCryptoKeyDataRSAComponents):
        Added a structure to hold RSA key components, extracted from JWK or another format.

        * crypto/keys/CryptoKeyRSA.h: Added.
        * crypto/mac/CryptoKeyRSAMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Register RSASSA_PKCS1_v1_5.

        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added a constructor to make
        sure that hasLength is never left uninitialized, even when reading formats that
        don't contain a length.

        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Added.
        Added parameter structures that are needed for RSASSA_PKCS1_v1_5.

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Disable WebCrypto on Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=124261

        Rubber-stamped by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Manage XMLHttpRequestUpload, XSLImportRule, XMLErrors, XML pending callback classes through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124224

        Reviewed by Anders Carlsson.

        Use std::unique_ptr to handle objects of various XML classes that were previously managed by OwnPtr.
        This removes usage of OwnPtr and PassOwnPtr under Source/WebCore/xml/.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::upload):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::loadChildSheet):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError):
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::PendingCallbacks::callAndRemoveFirstCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-11-12  Brady Eidson  <beidson@apple.com>

        Move basic IDBBackingStoreTransaction operations to IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124244

        Reviewed by Tim Horton (and unofficially Anders Carlsson).

        This patch:
        - Makes IDBBackingStore the owner of an IDBBackingStoreTransaction.
        - Adds the integer transaction ID to IDBBackingStoreTransaction for reference.
        - Removes IDBTransactionBackend’s reliance on IDBBackingStoreTransaction by moving
          necessary methods to IDBServerConnection.
        - Renames the IDBTransactionBackend::backingStoreTransaction() accessor to
          deprecatedBackingStoreTransaction to make it clear it’s on the way out.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::setIndexKeys):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::~IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::deprecatedBackingStoreTransaction):
        (WebCore::IDBTransactionBackend::scheduleTask):
        (WebCore::IDBTransactionBackend::abort):
        (WebCore::IDBTransactionBackend::commit):
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::generateKey):
        (WebCore::IDBBackingStoreLevelDB::updateKeyGenerator):
        (WebCore::IDBBackingStoreLevelDB::establishBackingStoreTransaction):
        (WebCore::IDBBackingStoreLevelDB::deprecatedBackingStoreTransaction):
        (WebCore::IDBBackingStoreLevelDB::removeBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp:
        (WebCore::IDBBackingStoreTransactionLevelDB::IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::~IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::resetTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::deprecatedBackingStoreTransaction):
        (WebCore::IDBServerConnectionLevelDB::openTransaction):
        (WebCore::IDBServerConnectionLevelDB::beginTransaction):
        (WebCore::IDBServerConnectionLevelDB::commitTransaction):
        (WebCore::IDBServerConnectionLevelDB::resetTransaction):
        (WebCore::IDBServerConnectionLevelDB::rollbackTransaction):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-12  Andy Estes  <aestes@apple.com>

        Fix the Mountain Lion build after r159171.

        * platform/mac/HTMLConverter.mm:
        (_dateForString): +[NSCalendar calendarWithIdentifier:] only exists on
        10.9. Use -[NSCalendar initWithIdentifier:] instead.

2013-11-12  Andy Estes  <aestes@apple.com>

        [Mac] Fix some deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=124252

        Reviewed by Mark Rowe.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Use CFPropertyListCreateWithData()
        instead of CFPropertyListCreateFromXMLData().
        (WebCore::LegacyWebArchive::rawDataRepresentation): Use
        CFPropertyListWrite() instead of CFPropertyListWriteToStream().
        * platform/mac/HTMLConverter.mm:
        (_dateForString): Rewrite this method in terms of NSDateComponents and
        NSCalendar instead of using CFGregorianDate.

2013-11-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159160, r159161, and r159164.
        http://trac.webkit.org/changeset/159160
        http://trac.webkit.org/changeset/159161
        http://trac.webkit.org/changeset/159164
        https://bugs.webkit.org/show_bug.cgi?id=124253

        Too many errors (make fewer) (Requested by ap on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams):
        (WebCore::createAesKeyGenParams):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keyData):
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Removed.
        * crypto/CryptoKey.h:
        (WebCore::ENUM_CLASS):
        * crypto/CryptoKeyData.h:
        (WebCore::CryptoKeyData::ENUM_CLASS):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Removed.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Removed.
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::asCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::asCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Removed.
        * crypto/keys/CryptoKeyDataRSAComponents.h: Removed.
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::asCryptoKeyHMAC):
        * crypto/keys/CryptoKeyRSA.h: Removed.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/mac/CryptoKeyRSAMac.cpp: Removed.
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Removed.

2013-11-12  Bem Jones-Bey  <bjonesbe@adobe.com>

        Make the placed floats tree use LayoutUnit instead of int
        https://bugs.webkit.org/show_bug.cgi?id=124207

        Reviewed by Alexandru Chiculita.

        The dimensions of floats are in LayoutUnits, so it doesn't make sense
        to be converting to ints for use in the placed floats tree.

        Also add missed "explicit" to single argument FloatingObjects
        constructor.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::rangesIntersect):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetAdapter::lowValue):
        (WebCore::ComputeFloatOffsetAdapter::highValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::lowValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::highValue):
        * rendering/FloatingObjects.h:
        * rendering/RenderFlowThread.h:

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Build fix.

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        ifdef out some code on Mountain Lion. Bug 124249 track fixing this.

2013-11-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract InspectorAgentRegistry from InspectorBaseAgent
        https://bugs.webkit.org/show_bug.cgi?id=124190

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAgentRegistry.cpp: Added.
        (WebCore::InspectorAgentRegistry::append):
        (WebCore::InspectorAgentRegistry::setFrontend):
        (WebCore::InspectorAgentRegistry::clearFrontend):
        (WebCore::InspectorAgentRegistry::registerInDispatcher):
        (WebCore::InspectorAgentRegistry::discardAgents):
        * inspector/InspectorAgentRegistry.h: Added.
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorBaseAgent.cpp: Removed.
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        (WebCore::InspectorBaseAgentInterface::~InspectorBaseAgentInterface):
        * inspector/InspectorController.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/WorkerInspectorController.h:

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Release build fix.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp: Include TypedArrayInlines.h

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        Added a way to add an Uint8Array, as needed for RSA key.algorithm.publicExponent.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams): Removed unneeded JSC prefixes.
        (WebCore::createAesKeyGenParams): Ditto.
        (WebCore::createHmacParams): Ditto.
        (WebCore::createHmacKeyParams): Ditto.
        (WebCore::createRsaKeyGenParams): Added. 
        (WebCore::createRsaSsaKeyParams): Added. WebCrypto currently doesn't specify any
        parameters for importKey, so the structure remains blank (unlike with JWK).
        (WebCore::createRsaSsaParams): Added (currently unused, will be sued for sign/verify soon).
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey): Ditto.

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Added.
        (WebCore::getBigIntegerVectorFromJSON): Added.
        (WebCore::createRSASSAKeyParameters): Create parameters for key import. The key
        will remember which algorithm it's allowed to be used with.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): Added support for
        RS256...RS512 (tha is, RSAES_PKCS1_v1_5 with SHA-256...SHA-512).
        (WebCore::JSCryptoKeySerializationJWK::keyDataOctetSequence): Split out of keyData().
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Added code to read
        RSA key components from JWK.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Call one of the above functions.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Placeholders.

        * crypto/CryptoKey.h: (WebCore::CryptoKeyClass): Added RSA key class for poor man's RTTI.

        * crypto/CryptoKeyData.h: (WebCore::CryptoKeyData::FormatRSAComponents): Added RSAComponents
        for poor man's RTTI.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: (WebCore::CryptoAlgorithmAES_CBC::importKey): 
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::isCryptoKeyAES):
        (WebCore::toCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::toCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::isCryptoKeyHMAC):
        (WebCore::toCryptoKeyHMAC):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Switched from "as" functions to "is" and "to" ones, as that's more idiomatic.

        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Added.
        Glue code for importKey/generateKey for now.

        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Added.
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents):
        (WebCore::CryptoKeyDataRSAComponents::~CryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyDataRSAComponents.h: Added.
        (WebCore::toCryptoKeyDataRSAComponents):
        Added a structure to hold RSA key components, extracted from JWK or another format.

        * crypto/keys/CryptoKeyRSA.h: Added.
        * crypto/mac/CryptoKeyRSAMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Register RSASSA_PKCS1_v1_5.

        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added a constructor to make
        sure that hasLength is never left uninitialized, even when reading formats that
        don't contain a length.

        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Added.
        Added parameter structures that are needed for RSASSA_PKCS1_v1_5.

2013-11-12  Bem Jones-Bey  <bjonesbe@adobe.com>

        Move ValueToString out to its own header file to remove duplication
        https://bugs.webkit.org/show_bug.cgi?id=124237

        Reviewed by Alexandru Chiculita.

        The ValueToString struct is used in many places for debugging. Move it
        out to its own header file to remove all the duplicated definitions
        and make it possible for the specializations to be placed in the
        header files with the implementation of the classes they print.

        No new tests, no behavior change.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.h:
        * platform/LayoutUnit.h:
        * platform/PODInterval.h:
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        * platform/ValueToString.h: Added.
        * platform/graphics/FloatPolygon.h:
        * rendering/FloatingObjects.cpp:
        * rendering/FloatingObjects.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderFlowThread.h:

2013-11-11  David Hyatt  <hyatt@apple.com>

        Make RenderBlockRareData be in a hashtable instead of being a member variable.
        https://bugs.webkit.org/show_bug.cgi?id=124056

        Reviewed by Anders Carlsson.

        Right now RenderBlock has 4 bytes taken up by a m_rareData member that is almost
        never allocated. This is better off in a separate hash, so that RenderBlock can
        get 4 bytes back.
        
        Since RenderBlockFlow's rare data member was recently removed and folded into
        RenderBlock, we need to undo that change and put the rare data member back in
        RenderBlockFlow. RenderBlockFlowRareData inheriting from RenderBlockRareData
        was not a good idea anyway, since RenderBlockFlows also very rarely need the
        RenderBlockRareData members, and were thus paying a heavier cost when the rare
        data was created than was necessary.
 
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::hasRareData):
        (WebCore::getRareData):
        (WebCore::ensureRareData):
        (WebCore::RenderBlock::ensureShapeInsideInfo):
        (WebCore::RenderBlock::shapeInsideInfo):
        (WebCore::RenderBlock::setShapeInsideInfo):
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::pageLogicalOffset):
        (WebCore::RenderBlock::setPaginationStrut):
        (WebCore::RenderBlock::setPageLogicalOffset):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setMaxMarginBeforeValues):
        (WebCore::RenderBlockFlow::setMaxMarginAfterValues):
        (WebCore::RenderBlockFlow::setMustDiscardMarginBefore):
        (WebCore::RenderBlockFlow::setMustDiscardMarginAfter):
        (WebCore::RenderBlockFlow::mustDiscardMarginBefore):
        (WebCore::RenderBlockFlow::mustDiscardMarginAfter):
        (WebCore::RenderBlockFlow::setBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::setDidBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::clearDidBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::clearShouldBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        (WebCore::RenderBlockFlow::ensureRareBlockFlowData):
        (WebCore::RenderBlockFlow::materializeRareBlockFlowData):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::shouldBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::lineBreakToAvoidWidow):
        (WebCore::RenderBlockFlow::didBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::lineGridBox):
        (WebCore::RenderBlockFlow::setLineGridBox):
        (WebCore::RenderBlockFlow::renderNamedFlowFragment):
        (WebCore::RenderBlockFlow::maxPositiveMarginBefore):
        (WebCore::RenderBlockFlow::maxNegativeMarginBefore):
        (WebCore::RenderBlockFlow::maxPositiveMarginAfter):
        (WebCore::RenderBlockFlow::maxNegativeMarginAfter):
        (WebCore::RenderBlockFlow::initMaxMarginValues):
        (WebCore::RenderBlockFlow::hasRareBlockFlowData):
        (WebCore::RenderBlockFlow::rareBlockFlowData):

2013-11-12  Alex Christensen  <achristensen@webkit.org>

        Build GStreamer files on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=124180

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        Include gstreamer files in WinCairo build.

2013-11-12  Brady Eidson  <beidson@apple.com>

        Introduce IDBServerConnection (and start moving things to it).
        https://bugs.webkit.org/show_bug.cgi?id=124193

        Reviewed by Alexey Proskuryakov.

        IDBServerConnection will be a purely asynchronous interface for database connections, transactions, and cursors.
        Its interface will be 100% asynchronous and callback based - Perfect for an IPC divide.
        Eventually none of the IDB<Foo>Backend classes will need IDBBackingStore<Foo> classes at all, 
        and they’ll all use IDBServerConnection directly.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBServerConnection.h: Added.
        (WebCore::IDBServerConnection::~IDBServerConnection):

        Concrete implementation that - for now - wraps an IDBBackingStoreLevelDB:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp: Added.
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::deprecatedBackingStore):
        (WebCore::IDBServerConnectionLevelDB::isClosed):
        (WebCore::IDBServerConnectionLevelDB::getOrEstablishIDBDatabaseMetadata):
        (WebCore::IDBServerConnectionLevelDB::deleteDatabase):
        (WebCore::IDBServerConnectionLevelDB::close):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h: Added.

        LevelDB created databases get LevelDB server connections:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):

        Replace most uses of IDBBackingStore with server connection:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::create):
        (WebCore::IDBDatabaseBackend::IDBDatabaseBackend):
        (WebCore::IDBDatabaseBackend::openInternalAsync):
        (WebCore::IDBDatabaseBackend::setIndexKeys):
        (WebCore::IDBDatabaseBackend::openConnectionInternal):
        (WebCore::IDBDatabaseBackend::deleteDatabaseAsync):
        (WebCore::IDBDatabaseBackend::close):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        (WebCore::IDBDatabaseBackend::serverConnection):

        Change all the operations to access their DatabaseBackend’s server connection instead
        if hanging on to a backing store directly:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::scheduleCreateObjectStoreOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteObjectStoreOperation):
        (WebCore::IDBTransactionBackend::scheduleCreateIndexOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteIndexOperation):
        (WebCore::IDBTransactionBackend::scheduleGetOperation):
        (WebCore::IDBTransactionBackend::schedulePutOperation):
        (WebCore::IDBTransactionBackend::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackend::scheduleCountOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackend::scheduleClearOperation):
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):
        * Modules/indexeddb/IDBTransactionCoordinator.h:

2013-11-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        * WebCore.vcxproj/WebCore.vcxproj.filters: Correct filter file so that source
        files show up in their proper directories in Visual Studio.

2013-11-12  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for ENABLE(VIDEO).
        https://bugs.webkit.org/show_bug.cgi?id=57420

        Reviewed by Martin Robinson.

        * platform/FileSystem.h:
        * platform/graphics/MediaPlayer.cpp:
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        Separated CG code from GStreamer code.

2013-11-12  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Fix reported build warnings for GTK
        https://bugs.webkit.org/show_bug.cgi?id=123439

        Reviewed by Carlos Garcia Campos.

        There was a void method, that has return value in it's documentation, so I removed it.

        * bindings/gobject/WebKitDOMCustom.h:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Manage StorageThread through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124197

        Reviewed by Anders Carlsson.

        New StorageThread objects are crafted through std::make_unique. This removes the need for the static
        StorageThread::create() method but requires that the StorageThread constructor is made public.

        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        * storage/StorageSyncManager.h:
        * storage/StorageThread.cpp:
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        * storage/StorageTracker.h:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove unnecessary PassOwnPtr.h header includes under Source/WebCore/fileapi
        https://bugs.webkit.org/show_bug.cgi?id=124196

        Reviewed by Anders Carlsson.

        PassOwnPtr is not used anywhere under Source/WebCore/fileapi/, so PassOwnPtr.h inclusions can be removed.

        * fileapi/Blob.h:
        * fileapi/FileThread.h:
        * fileapi/FileThreadTask.h:

2013-11-12  Antti Koivisto  <antti@apple.com>

        Text on simple lines sometimes paints one pixel off
        https://bugs.webkit.org/show_bug.cgi?id=124200

        Reviewed by Andreas Kling.

        Test: fast/text/line-runs-simple-lines.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::adjustRunOffsets):
        
            Don't round on run construction time.

        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        
            Instead round when generating rects.

        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        
            Provide the baseline (used by painting) as unrounded FloatPoint.

2013-11-11  Andreas Kling  <akling@apple.com>

        Elements with class names automatically get unique ElementData.
        <https://webkit.org/b/124184>

        We were calling Element::ensureUniqueElementData() for all Elements
        with a non-empty list of class names. Doing that on parser-fresh
        Elements caused us to upgrade them to UniqueElementData despite not
        needing it (ElementData::setClass() is a const function for caching
        the "cooked" class and can be called on ShareableElementData.)

        1.09 MB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Antti Koivisto.

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        JSC bindings generator should generate deletable JSC functions
        https://bugs.webkit.org/show_bug.cgi?id=122422

        Reviewed by Geoffrey Garen.

        The JSC functions that the JSC bindings generator generates should be deletable to conform to
        the WebIDL specification, which instructs that the WebIDL operations must be configurable (which
        translates to the JSC functions being deletable).

        The generator will still produce a non-deletable JSC function for operations under almost all
        Web-facing interfaces since they're annotated with the OperationsNotDeletable attribute. The
        exception here is the Node interface that is having the attribute removed, with the provided
        test case testing that all the functions on the Node prototype object are writable, enumerable
        and configurable. This behavior conforms to the WebIDL specification and the behaviors of IE
        and Firefox. Chrome at the moment still provides non-configurable functions.

        Test: fast/dom/webidl-operations-on-node-prototype.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Enforce the non-deletable behavior of the JSC function if either the
        operation's interface is annotated with the OperationsNotDeletable attribute or the operation itself
        is annotated with the NotDeletable attribute.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Update the JSC generator test baselines.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
        * dom/Node.idl: Remove the OperationsNotDeletable attribute.

2013-11-11  Brady Eidson  <beidson@apple.com>

        Make IDBTransaction tasks asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=124183

        Reviewed by Tim Horton.

        This is an almost zero-change in behavior.

        The one thing that is different is that previously, IDBTransactionBackends would synchronously
        run through their entire set of IDBOperation’s without ever returning control to the runloop.

        Now, they start one task and then wait for its completion to schedule the start of the next task.

        Change IDBOperation’s perform() to take a completion handler so it can be asynchronous.
        Add an IDBSynchronousOperation class to handle "Abort" tasks, which never need to perform i/o
        and therefore can be entirely synchronous.
        * Modules/indexeddb/IDBOperation.h:
        (WebCore::IDBSynchronousOperation::~IDBSynchronousOperation):

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.
        (WebCore::IDBTransactionBackend::abort):
        (WebCore::IDBTransactionBackend::taskTimerFired): Instead of running through the entire set of tasks,
          perform a single task asynchronously. The completion handler for the task will reset the task timer
          to asynchronously start the next task.
        * Modules/indexeddb/IDBTransactionBackend.h:
        (WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.

        Update all operations to take completion handlers.
        For now, perform things synchronously like before, calling the completion handler when complete.
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called perform() exits.
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::IDBCursorBackend::CursorIterationOperation::create):
        (WebCore::IDBCursorBackend::CursorAdvanceOperation::create):
        (WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::create):
        (WebCore::IDBCursorBackend::CursorAdvanceOperation::perform):
        (WebCore::IDBCursorBackend::CursorIterationOperation::perform):
        (WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::perform):

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called when perform() exits.
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeAbortOperation::create):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::GetOperation::create):
        (WebCore::PutOperation::create):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::OpenCursorOperation::create):
        (WebCore::CountOperation::create):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::ClearOperation::create):

2013-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove some unused generated code
        https://bugs.webkit.org/show_bug.cgi?id=124179

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspectorStrings.py:

2013-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up static_cast<Element*> usage
        https://bugs.webkit.org/show_bug.cgi?id=124133

        Reviewed by Andreas Kling.

        We need to use toFoo cast function instead of static_cast<>. Though there is toElement(),
        static_cast<Element*> is still being used.

        No new tests, no behavior changes.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * dom/ElementTraversal.h:
        (WebCore::::lastWithinTemplate):
        (WebCore::::nextTemplate):
        (WebCore::::previousTemplate):

2013-11-11  Anders Carlsson  <andersca@apple.com>

        FrameFilter can just be an std::function instead
        https://bugs.webkit.org/show_bug.cgi?id=124176

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/archive/cf/LegacyWebArchive.h:

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

        REGRESSION (r155660): box-shadow causes overlay scrollbars to be in the wrong position when element is composited (85647)
        https://bugs.webkit.org/show_bug.cgi?id=124090

        Reviewed by Beth Dakin.
        
        After r155660 we did fewer layouts, so were left with overlay scrollbars in the
        wrong locations because nothing would update them after RenderLayerBacking
        computed a new offsetFromRenderer.
        
        First part of the fix is to wean positionOverflowControlsLayers() off of
        an absolute offset from the root. Do this by not using Widget::frameRect()
        to position the layers, but instead RenderLayer::rectFor{Horizontal|Vertical}Scrollbar
        which is what we used to position the scrollbars in the first place.
        
        Second part of the fix is to call positionOverflowControlsLayers() from
        RenderLayerBacking::updateGraphicsLayerGeometry() if the offsetFromRenderer
        changed.

        Test: compositing/overflow/overflow-scrollbar-layer-positions.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::positionOverflowControls):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        * rendering/RenderLayerBacking.h:

2013-11-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] m_isCompositeFontReference is uninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=124170

        Reviewed by Tim Horton.

        Initialize value to false, as is done in the other constructors for this data type.

        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): 
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-11-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Characters too close together in complex Arabic text
        https://bugs.webkit.org/show_bug.cgi?id=124057

        Reviewed by Darin Adler.

        We weren't updating our total width variable with run's initial
        advance information, leading to widths that were too narrow.

        In addition, while initial advances for runs that aren't the first
        run are accounted for by baking in the initial advances into the
        previous character's advance, the initial advance for the first run
        has to be accounted for in ComplexTextController::offsetForPosition.

        Test: fast/text/complex-grapheme-cluster-with-initial-advance.html
        Test: fast/text/selection-in-initial-advance-region.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Update
        total width variable
        (WebCore::ComplexTextController::offsetOfPosition): Account for
        the first run's initial advance.

2013-11-11  Brady Eidson  <beidson@apple.com>

        Make IDBBackingStoreTransaction be RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=124168

        Reviewed by Tim Horton.

        This is necessarily to safely add a fully asynchronous interface into the IDB mechanism.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h:
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

2013-11-11  Antti Koivisto  <antti@apple.com>

        End of line whitespace should collapse with white-space:pre-wrap; overflow-wrap:break-word in all cases
        https://bugs.webkit.org/show_bug.cgi?id=124158

        Reviewed by Dave Hyatt.
        
        If a word just fits the line but the following space overflows we fail to collapse whitespaces 
        at the end of the line. This happens because with break-word we end up taking word breaking
        code path that does not have pre-wrap whitespace handling.
        
        This patch makes the behavior consistent and also matches Firefox.

        Test: fast/text/break-word-pre-wrap.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::BreakingContext::handleText):
        
            Don't take the word break code path if we are pre-wrap and the current character is space.
            Instead proceed to break the line normally as this is a valid break position.

2013-11-11  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Highlight shape-outside when its element is selected in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=124071

        Reviewed by Timothy Hatcher.

        Adding code to pass computed shape information (path and bounds) to the Inspector overlay
        canvas, and the code to display it. The code creates a path based on ShapeInfo's computed
        shape. The shape highlight draws whenever an element is highlighted, via selection in
        the Inspector elements view.

        Test: inspector-protocol/model/highlight-shape-outside.html

        * inspector/InspectorOverlay.cpp:
        (WebCore::localPointToRoot): Convert a local point to be relative to the root view.
        (WebCore::appendPathCommandAndPoints): Helper for building a single segment's worth
        of the overall path.
        (WebCore::appendPathSegment): Build a single segment's worth of the overall path.
        (WebCore::buildObjectForShapeOutside): Build an object to pass to the Inspector overlay
        that represents the shape.
        (WebCore::buildObjectForElementInfo): Call buildObjectForShapeOutside and pass the
        resulting object along.
        * inspector/InspectorOverlayPage.js:
        (pathCommand): Draw a single path command.
        (drawPath): Draw the overall path.
        (_drawShapeHighlight): Draw the highlight for the given shapeInfo.
        (drawNodeHighlight): Call _drawShapeHighlight.
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::polygon): Expose the underlying vertex information for a
        PolygonShape.
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::logicalRx): Expose the logical radii for a shape.
        (WebCore::RectangleShape::logicalRy): Ditto.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::computedShapePhysicalBoundingBox): The physical bounds of a
        shape in renderer coordinates.
        (WebCore::ShapeInfo::shapeToRendererPoint): Convert shape coordinates to renderer
        coordinates.
        (WebCore::ShapeInfo::shapeToRendererSize): Ditto.
        (WebCore::ShapeInfo::ShapeInfo):

2013-11-11  Alexey Proskuryakov  <ap@apple.com>

        Support WebCrypto KeyPair interface
        https://bugs.webkit.org/show_bug.cgi?id=124161

        Reviewed by Geoffrey Garen.

        No new tests yet, will be tested once generateKey is implemented for any RSA algorithms.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        Added new files.

        * bindings/js/JSDOMPromise.h: Support returning a key pair via a promise.

        * bindings/js/JSCryptoKeyPairCustom.cpp: Added.
        (WebCore::JSCryptoKeyPair::visitChildren):
        * crypto/CryptoKey.idl:
        CryptoKey wrapper is reachable through KeyPair, but it doesn't have (or need)
        a back pointer.

        * crypto/CryptoKeyPair.cpp: Added.
        (WebCore::CryptoKeyPair::CryptoKeyPair):
        (WebCore::CryptoKeyPair::~CryptoKeyPair):
        * crypto/CryptoKeyPair.h: Added.
        (WebCore::CryptoKeyPair::create):
        (WebCore::CryptoKeyPair::publicKey):
        (WebCore::CryptoKeyPair::privateKey):
        * crypto/CryptoKeyPair.idl: Added.

2013-11-11  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Fix build after r158967
        https://bugs.webkit.org/show_bug.cgi?id=124160

        Reviewed by Anders Carlsson.

        After r158967, gcc debug builds with "-Werror=type-limits" enabled
        fail. This patch fixes it.

        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::intervalsAt):

2013-11-11  Zan Dobersek  <zdobersek@igalia.com>

        Remove the OperationsNotDeletable attribute from most of the WebIDL interfaces
        https://bugs.webkit.org/show_bug.cgi?id=124151

        Reviewed by Geoffrey Garen.

        The OperationsNotDeletable attribute currently doesn't have any effect, but will soon enforce
        non-configurability of operations on the interface that uses the attribute. Non-configurability
        of operations is the default behavior at the moment, but will be changed to follow the WebIDL
        specification which requires that the operations are configurable (i.e. -- in JSC terms -- deletable).
        IE and Firefox already exhibit this behavior in the majority of cases, while Chrome and Opera don't.

        The attribute remains in use on the Location interface to mimic the Unforgeable attribute which
        also makes operations of an interface non-configurable. Unforgeable attribute will be used instead
        when support for it will be added to the JSC bindings generator.

        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/proximity/DeviceProximityEvent.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/speech/SpeechSynthesis.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/websockets/WebSocket.idl:
        * crypto/CryptoKey.idl:
        * crypto/SubtleCrypto.idl:
        * css/CSSHostRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSSupportsRule.idl:
        * css/CSSValueList.idl:
        * css/DOMWindowCSS.idl:
        * css/FontLoader.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/CharacterData.idl:
        * dom/ChildNode.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringList.idl:
        * dom/DOMStringMap.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/Range.idl:
        * dom/RangeException.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * dom/UIEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLVideoElement.idl:
        * html/MediaController.idl:
        * html/RadioNodeList.idl:
        * html/TimeRanges.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLLoseContext.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.idl:
        * html/track/TextTrackRegionList.idl:
        * html/track/VideoTrackList.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/Crypto.idl:
        * page/DOMSecurityPolicy.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Navigator.idl:
        * page/Performance.idl:
        * page/PerformanceEntryList.idl:
        * page/SpeechInputResultList.idl:
        * page/WindowBase64.idl:
        * page/WindowTimers.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimationElement.idl:
        * svg/SVGColor.idl:
        * svg/SVGCursorElement.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGException.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGGraphicsElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPatternElement.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/WorkerLocation.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2013-11-11  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Regions] Selection focusNode set to the "region" block, instead of the "source" block
        https://bugs.webkit.org/show_bug.cgi?id=120769

        Reviewed by David Hyatt.

        When a point hits a Region block, current positionForPoint algorithm determines its
        position in the DOM and returns either the start or end offset for such block, since
        Region blocks have no children in the DOM.

        It's necessary to map the point into Flow Thread coordinates in order to determine
        the DOM position of the specific element rendered by the Region.

        Top margin, padding and border points should be mapped to the beginning of the Region
        block, while bottom points are mapped to the block end. The Left coordinate its just
        adjusted to fit in the Flow Thread boundaries, since its not affected by the Flow
        direction.

        Besides, when inspecting the Flow Thread blocks looking for the last candidate box,
        the Region originally associated to the point might be taken into account. Only the
        blocks/boxes rendered by the Region are potential candidates.

        Tests: fast/regions/selection/position-for-point-1-vert-lr.html
               fast/regions/selection/position-for-point-1-vert-rl.html
               fast/regions/selection/position-for-point-1.html
               fast/regions/selection/position-for-point-vert-lr.html
               fast/regions/selection/position-for-point-vert-rl.html
               fast/regions/selection/position-for-point.html

        * rendering/RenderBlock.cpp:
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::positionForPoint):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPoint): Added.
        It just redirects the call to the associated RenderNamedFlowFragment instance.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::mapRegionPointIntoFlowThreadCoordinates): Added.
        It performs the coordinates mapping.
        (WebCore::RenderRegion::positionForPoint): Added.
        It determines the corresponding LayoutPoint in the FlowThread the Region
        is associated to, forwarding the call to the RenderBlock class using the
        FlowThread's first child block and such new point.
        * rendering/RenderRegion.h:

2013-11-11  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        [curl] Remove unused includes.
        https://bugs.webkit.org/show_bug.cgi?id=120415

        Reviewed by Csaba Osztrogonác.

        Original patch by 2013-08-28  Tamas Czene  <tczene@inf.u-szeged.hu>

        * platform/network/curl/ProxyServerCurl.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:

2013-11-11  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r159027 to make Apple Windows build happy.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::sharedBufferGetBytesAtPosition):

2013-11-11  Andreas Kling  <akling@apple.com>

        Kill InlineFlowBox::rendererLineBoxes().
        <https://webkit.org/b/124141>

        We only ever used this to access the RenderLineBoxList for non-root
        boxes, and those always have a RenderInline renderer.

        Tighten things up by losing the virtual rendererLineBoxes() and
        calling RenderInline::lineBoxes() directly.

        Reviewed by Antti Koivisto.

2013-11-11  Andreas Kling  <akling@apple.com>

        Bring the LineFragmentationData back to RootInlineBox.
        <https://webkit.org/b/124136>

        Now that we have the simple line layout path, almost all the root
        line boxes end up with some kind of fragmentation data, so we might
        as well put the members back on RootInlineBox and avoid the extra
        allocation (and indirection.)

        1.74 MB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Shrink RenderInline.
        <https://webkit.org/b/124134>

        Move the "always create line boxes" bit from RenderInline up to
        RenderElement. I didn't do this earlier because there were no bits
        free on RenderObject but thanks to RenderElement we now have tons!

        540 kB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Anders Carlsson.

2013-11-10  Sam Weinig  <sam@webkit.org>

        Make childShouldCreateRenderer() take a Node reference
        https://bugs.webkit.org/show_bug.cgi?id=124132

        Reviewed by Andreas Kling.

        The Node passed to childShouldCreateRenderer() is never null.

2013-11-10  Frédéric Wang  <fred.wang@free.fr>

        CSS direction must be reset to ltr on <math> element.
        <https://webkit.org/b/124121>

        Reviewed by Darin Adler.

        Test: mathml/presentation/direction.html

        * css/mathml.css:
        (math): set direction: ltr; on the <math> element.

2013-11-10  Sam Weinig  <sam@webkit.org>

        Reduce the size of RenderBlockFlow by making its rare data inherit from RenderBlockRareData
        https://bugs.webkit.org/show_bug.cgi?id=124124

        Reviewed by Anders Carlsson.

        Reduce RenderBlockFlow by one word.

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:

2013-11-10  Antti Koivisto  <antti@apple.com>

        Use start/end instead of textOffset/textLength for simple text runs
        https://bugs.webkit.org/show_bug.cgi?id=124130

        Reviewed by Oliver Hunt.
        
        The code reads better this way.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2013-11-10  Antti Koivisto  <antti@apple.com>

        Implement white-space property on simple line layout path
        https://bugs.webkit.org/show_bug.cgi?id=124122

        Reviewed by Andreas Kling.
        
        Support all values of the white-space property and the tab-size property.

        Tests: fast/forms/basic-textareas-simple-lines.html
               fast/text/embed-at-end-of-pre-wrap-line-simple-lines.html
               fast/text/whitespace/pre-wrap-line-test-simple-lines.html
               fast/text/whitespace/pre-wrap-long-word-simple-lines.html
               fast/text/whitespace/pre-wrap-spaces-after-newline-simple-lines.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::isWhitespace):
        (WebCore::SimpleLineLayout::skipWhitespaces):
        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::measureWord):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        (WebCore::SimpleLineLayout::paintFlow):

2013-11-10  Sergio Correia  <sergio.correia@openbossa.org>

        Fix EFL build after r159027
        https://bugs.webkit.org/show_bug.cgi?id=124127

        Reviewed by Anders Carlsson.

        No new tests, build fix.

        * page/Settings.in: Add std to numeric_limits, since we don't have
        'using std' directives anymore.

2013-11-10  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::computeColumnCountAndWidth):
        (WebCore::RenderMultiColumnBlock::checkForPaginationLogicalHeightChange):

2013-11-10  Anders Carlsson  <andersca@apple.com>

        Remove all 'std' using directives from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124125

        Reviewed by Sam Weinig.

        As per the coding style guidelines.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/WorkerThreadableLoader.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::deadCapacity):
        (WebCore::MemoryCache::lruListFor):
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/Chrome.cpp:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::intervalClampedToMinimum):
        * page/FocusController.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::resizePageRectsKeepingRatio):
        * page/PageGroupLoadDeferrer.cpp:
        * page/Settings.cpp:
        * page/animation/AnimationBase.cpp:
        (WebCore::solveStepsFunction):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::fractionalTime):
        (WebCore::AnimationBase::getTimeToNextEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):
        * platform/DateComponents.cpp:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::setScrollOffset):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollContents):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::moveThumb):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::usedTotalSize):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::copyBufferAndClear):
        (WebCore::SharedBuffer::getSomeData):
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::updateSharedTimer):
        * platform/Timer.cpp:
        (WebCore::TimerHeapLessThanFunction::operator()):
        (WebCore::TimerBase::heapPop):
        (WebCore::TimerBase::nextUnalignedFireInterval):
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::portAllowed):
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::setRate):
        * platform/audio/AudioResamplerKernel.cpp:
        (WebCore::AudioResamplerKernel::process):
        * platform/audio/Distance.cpp:
        (WebCore::DistanceEffect::gain):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::process):
        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::indexFromElevationAngle):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFPanner.cpp:
        (WebCore::HRTFPanner::calculateDesiredAzimuthIndexAndBlend):
        * platform/audio/Reverb.cpp:
        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::process):
        * platform/cf/URLCF.cpp:
        * platform/graphics/Color.cpp:
        (WebCore::makeRGB):
        (WebCore::makeRGBA):
        (WebCore::colorFloatToRGBAByte):
        (WebCore::Color::light):
        (WebCore::Color::dark):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        * platform/graphics/FloatQuad.cpp:
        (WebCore::min4):
        (WebCore::max4):
        (WebCore::withinEpsilon):
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::isZero):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::floatWidthForSimpleText):
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::expand):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::calculateLobes):
        (WebCore::computeSliceSizesFromRadii):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::initCharWidths):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setOpacity):
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        (WebCore::GraphicsLayerCA::setupAnimation):
        (WebCore::clampedContentsScaleForScale):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::getTileIndexRangeForRect):
        (WebCore::TileController::computeTileCoverageRect):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::computeLineBoundsAndAntialiasingModeForText):
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):
        (WebCore::FEGaussianBlur::calculateStdDeviation):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::computeNumTiles):
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::offsetForPosition):
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::floatWidthForComplexText):
        * platform/graphics/mac/FontMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::duration):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::blendByMatchingOperations):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::clampEdgeValue):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollPosition):
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/ThemeMac.mm:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController incrementVolume]):
        (timeToString):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::textClone):
        (WebCore::textLatin1MoveInPrimaryContext):
        (WebCore::textLatin1MoveInPriorContext):
        (WebCore::textInChunkOrOutOfRange):
        (WebCore::textOpenLatin1):
        (WebCore::textUTF16MoveInPrimaryContext):
        (WebCore::textUTF16MoveInPriorContext):
        (WebCore::textOpenUTF16):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::encode):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::encode):
        * platform/text/TextStream.cpp:
        * platform/text/mac/LocaleMac.mm:
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::applyPreferredLogicalWidthQuirks):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::applyPreferredLogicalWidthQuirks):
        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffset):
        * rendering/InlineBox.cpp:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::computeMaxLogicalTop):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::constrainToLineTopAndBottomIfNeeded):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::applyShadowToGraphicsContext):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::computeUnderlineOffset):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::paintChild):
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::computeIntrinsicLogicalWidths):
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        (WebCore::RenderBlock::adjustIntrinsicLogicalWidthsForColumns):
        (WebCore::updatePreferredWidth):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::setCollapsedBottomMargin):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        (WebCore::calculateMinimumPageHeight):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::removeFloatingObject):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::lowestFloatLogicalBottom):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        (WebCore::RenderBlockFlow::updateLogicalHeight):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalWidthForLeftAlignedBlock):
        (WebCore::updateLogicalWidthForRightAlignedBlock):
        (WebCore::updateLogicalWidthForCenterAlignedBlock):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::checkFloatsInCleanLine):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        (WebCore::tryHyphenating):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::constrainLogicalWidthInRegionByMinMax):
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::adjustBorderBoxLogicalWidthForBoxSizing):
        (WebCore::RenderBox::adjustBorderBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::adjustContentBoxLogicalWidthForBoxSizing):
        (WebCore::RenderBox::adjustContentBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::containingBlockLogicalWidthForContentInRegion):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::applyVisualEffectOverflow):
        (WebCore::RenderBox::addLayoutOverflow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::calculateAdjustedInnerBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        (WebCore::RenderBoxModelObject::localCaretRectForEmptyElement):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::computePreferredLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::allowedChildFlex):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clampScrollOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::visibleContentRect):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerModelObject.cpp:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::layout):
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        (WebCore::RenderListBox::size):
        (WebCore::RenderListBox::numVisibleItems):
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::scrollHeight):
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):
        (WebCore::RenderMarquee::computePosition):
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::computeIntrinsicLogicalWidths):
        (WebCore::RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderMeter.cpp:
        * rendering/RenderMultiColumnBlock.cpp:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        * rendering/RenderNamedFlowFragment.cpp:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::caretMaxOffset):
        * rendering/RenderProgress.cpp:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderRubyBase.cpp:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::getOverhang):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::computeControlLogicalHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::computePreferredLogicalWidths):
        (WebCore::RenderTable::calcBorderStart):
        (WebCore::RenderTable::calcBorderEnd):
        (WebCore::RenderTable::outerBorderBefore):
        (WebCore::RenderTable::outerBorderAfter):
        (WebCore::RenderTable::outerBorderStart):
        (WebCore::RenderTable::outerBorderEnd):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):
        (WebCore::RenderTableCell::logicalWidthFromColumns):
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        (WebCore::RenderTableCell::layout):
        (WebCore::RenderTableCell::setOverrideLogicalContentHeightFromRowHeight):
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::alignLeftRightBorderPaintRect):
        (WebCore::RenderTableCell::alignTopBottomBorderPaintRect):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::firstLineBaseline):
        (WebCore::RenderTableSection::removeCachedCollapsedBorders):
        (WebCore::RenderTableSection::setCachedCollapsedBorder):
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButton):
        * rendering/RenderWidget.cpp:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):
        (WebCore::RootInlineBox::blockDirectionPointInLine):
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        (WebCore::setAscentAndDescent):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::setFontSize):
        (WebCore::RenderStyle::getShadowExtent):
        (WebCore::RenderStyle::getShadowInsetExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/ShadowData.cpp:
        (WebCore::calculateShadowExtent):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::localSelectionRect):
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::startTimer):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::simpleDuration):
        (WebCore::SVGSMILElement::repeatingDuration):
        (WebCore::SVGSMILElement::resolveActiveEnd):
        (WebCore::SVGSMILElement::resolveInterval):
        (WebCore::SVGSMILElement::resolveFirstInterval):
        (WebCore::SVGSMILElement::resolveNextInterval):
        (WebCore::SVGSMILElement::calculateAnimationPercentAndRepeat):
        * xml/XMLTreeViewer.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::OffsetBuffer::readOutBytes):

2013-11-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Clean up static_cast<> to cast from AccessibilityObject 
        https://bugs.webkit.org/show_bug.cgi?id=124032

        Reviewed by Mario Sanchez Prada.

        ACCESSIBILITY_OBJECT_TYPE_CASTS can support more helpful casting functions.
        So, we need to use them as much as possible. This patch cleans up all static_cast<> in accessibility.

        This patch generates toAccessibilityFoo() in order to replace static_cast<> with it. Below toAccessibilityFoo()
        are generated.

        - toAccessibilityARIAGridRow()
        - toAccessibilityImageMapLink()
        - toAccessibilityListBox()
        - toAccessibilityListBoxOption()
        - toAccessibilityMenuListOption()
        - toAccessibilityMenuListPopup()
        - toAccessibilityScrollbar()
        - toAccessibilitySlider()

        No new tests, no behavior changes.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isListBoxOption):
        (WebCore::AccessibilityObject::isSliderThumb):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (webkitAccessibleSelectionClearSelection):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::didUpdateActiveOption):

2013-11-10  Andreas Kling  <akling@apple.com>

        Rebaseline bindings tests after r158997.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:

2013-11-10  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Consolidate more code into TrackPrivateBaseGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=124020

        Reviewed by Philippe Normand.

        No new tests because this is just refactoring.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer): Don't pass playbin to TrackPrivateBaseGStreamer, and do pass a pointer to "this".
        (WebCore::AudioTrackPrivateGStreamer::disconnect): Clear m_playbin().
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Move labelChanged() and languageChanged() to TrackPrivateBaseGStreamer. Move m_playbin to this class (along with disconnect() to clear it).
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp: Move tag handling, pad and index to TrackPrivateBaseGStreamer.
        (WebCore::textTrackPrivateEventCallback):
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        (WebCore::InbandTextTrackPrivateGStreamer::disconnect):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp: Add WebKitTextCombinerPad with "tags" property, set in the same was as input-selector's pads.
        (webkit_text_combiner_pad_init): Initialize tags to 0.
        (webkitTextCombinerPadFinalize): Clear tags.
        (webkitTextCombinerPadGetProperty): Handling "tags" property.
        (webkitTextCombinerPadEvent): Changed to be a pad event function instead of a pad probe, and now intercepts tags and merges them (like input-selector pads do).
        (webkitTextCombinerRequestNewPad): Using WebKitTextCombinerPad instead of just GhostPad.
        (webkit_text_combiner_pad_class_init): Setup WebKitTextCombinerPad.
        * platform/graphics/gstreamer/TextCombinerGStreamer.h: Remove superfluous code.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Use "notify::active" so we don't need a playbin, and immediately check for tags after the constructor.
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Remove m_playbin.
        (WebCore::TrackPrivateBaseGStreamer::getTag): Refactored out from notifyTrackOfTagsChanged.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Simplify using m_owner (so we can call labelChanged() and languageChanged() directly), and use getTag() above.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Add m_owner to we can access the owning track, and change some functions to match our needs better.
        (WebCore::TrackPrivateBaseGStreamer::setActive): Add empty default since InbandTextTrackPrivateGStreamer doesn't need this.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Same as AudioTrackPrivateGStreamer.
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        (WebCore::VideoTrackPrivateGStreamer::disconnect):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Same as AudioTrackPrivateGStreamer.

2013-11-10  Andreas Kling  <akling@apple.com>

        Generate type casting helpers for Widget classes.
        <https://webkit.org/b/124120>

        Add a WIDGET_TYPE_CASTS macro and replace all the hand-written
        toFoo() helpers we had for Widget subclasses. Fixed up a handful
        of places that were still using static_cast.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Remove unused FragmentationDisabler class.
        <https://webkit.org/b/124118>

        This RAII object was added in r144744 to avoid a crash when using
        MathML inside CSS regions. Its only user was removed in r157070.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Simplify some is-this-a-MathML-element? checks.
        <https://webkit.org/b/124119>

        As of r158198, the MathML-ness of an Element is determined by
        a Node flag, so there's no need to cast to Element before checking
        on this. Simplify accordingly.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Remove RenderTheme::shouldOpenPickerWithF4Key().

        Rubber-stamped by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        CSSValuePool::createFontFamilyValue() should return PassRef.
        <https://webkit.org/b/124114>

        Unlike createFontFaceValue(), createFontFamilyValue() can never
        fail to return an object and thus should return PassRef.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        RenderIFrame should display its name correctly in DRT output.
        <https://webkit.org/b/124117>

        Nuke an age-old FIXME about making RenderIFrame show its true name
        in DRT output. No more "RenderPartObject {IFRAME}"!

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        SVGTextMetricsBuilder::walkTree() should take a RenderElement.
        <https://webkit.org/b/124105>

        Make walkTree() take a RenderElement so we can use the non-virtual
        firstChild() internally. All call sites had pointers to compatible
        objects already.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        RenderMathMLFenced should pass around operators in tighter types.
        <https://webkit.org/b/124115>

        Store operator renderers in RenderMathMLOperator pointers instead
        of passing them around as RenderObject.

        Reviewed by Martin Robinson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Use RENDER_OBJECT_TYPE_CASTS for more types.
        <https://webkit.org/b/124112>

        Generate toRenderFoo() type casting helpers for these classes:

            - RenderCombineText
            - RenderDetailsMarker
            - RenderListMarker
            - RenderVideo
            - RenderView

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Move MathML type checking virtuals to RenderObject.
        <https://webkit.org/b/124111>

        Previously, checking the type of a MathML renderer would require
        that you first check if it's a RenderMathMLBlock, and then casting
        to that type to access the check you really wanted.

        This change moves all the isRenderMathMLFoo() virtual functions
        to RenderObject. I also made sure all the overloads were private
        and marked them OVERRIDE/FINAL as appropriate.

        Finally I replaced all the hand-written casting functions with
        autogenerated ones using RENDER_OBJECT_TYPE_CASTS.

        Reviewed by Anders Carlsson.

2013-11-09  Martin Robinson  <mrobinson@igalia.com>

        [MathML] Poor spacing around delimiters in MathML Torture Test 14
        https://bugs.webkit.org/show_bug.cgi?id=122837

        Reviewed by Brent Fulgham.

        Instead of stretching the vertical bar with the stretchable version, just repeat
        the normal vertical bar. This follows what Gecko does when rendering tall vertical
        bars and also works around an issue with STIX fonts leading to poor spacing in
        formulas.

        * rendering/mathml/RenderMathMLOperator.cpp: Stretch the vertical bar with the
        normal variant.

2013-11-09  Anders Carlsson  <andersca@apple.com>

        Encode form data using the KeyedEncoder
        https://bugs.webkit.org/show_bug.cgi?id=124107

        Reviewed by Sam Weinig.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeEnum):
        * platform/network/FormData.cpp:
        (WebCore::encodeElement):
        (WebCore::FormData::encode):
        * platform/network/FormData.h:

2013-11-09  Sam Weinig  <sam@webkit.org>

        Modernize CanvasObserverProxy
        https://bugs.webkit.org/show_bug.cgi?id=124106

        Reviewed by Anders Carlsson.

        * css/CSSCanvasValue.h:

2013-11-09  Patrick Gansterer  <paroga@webkit.org>

        Move RunLoop from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=116606

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2013-11-09  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGResourcesCycleSolver a bit.
        <https://webkit.org/b/124104>

        Make the SVGResourcesCycleSolver constructor take a RenderElement&
        and a SVGResources&.

        While I was in the neighborhood, also converted one loop to use a
        renderer iterator instead of walking siblings manually.

        Finally used "auto" to clean up some overly wordy loops.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Beat SVGRenderSupport with the RenderElement stick.
        <https://webkit.org/b/124102>

        Tighten up all the SVGRenderSupport helper functions by making them
        take const RenderElements references instead of raw RenderObject
        pointers as much as possible.

        This tunes up a bunch of branchy style() calls.

        The patch looks big but it's mostly mechanical. I just changed the
        signatures and then worked backwards until everything built again.

        Reviewed by Antti Koivisto.

2013-11-09  Andreas Kling  <akling@apple.com>

        SVGTextLayoutAttributes always has a RenderSVGInlineText.
        <https://webkit.org/b/124101>

        No SVGTextLayoutAttributes object is without a RenderSVGInlineText
        "context" so make context() return a reference.

        Reviewed by Antti Koivisto.

2013-11-09  Andreas Kling  <akling@apple.com>

        Move BindingSecurity stuff under JSDOMBinding umbrella.
        <https://webkit.org/b/124099>

        We are hitting shouldAllowAccessToDOMWindow() pretty hard on the
        demo here: <http://www.jasondavies.com/maps/rotate/>

        Putting it together with the rest of the JSDOMBinding code takes
        CPU time spent in there from 8.7% to 6.5%. The abstraction was
        only used to support alternate JS engines in the past.

        Reviewed by Antti Koivisto.

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBDatabaseBackendInterface and IDBDatabaseBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124088

        Reviewed by Tim Horton.
+
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Removed.

        * Modules/indexeddb/IDBDatabaseBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp.
        * Modules/indexeddb/IDBDatabaseBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndexWriter.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBPendingDeleteCall.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.h:

2013-11-08  Andreas Kling  <akling@apple.com>

        Reindent JSDOMBinding.h (finally.)

        Rubber-stamped by Sam Weinig.

2013-11-08  Sam Weinig  <sam@webkit.org>

        Change collectStyleForPresentationAttribute and related functions to take a MutableStylePropertySet by reference
        https://bugs.webkit.org/show_bug.cgi?id=124096

        Reviewed by Andreas Kling.

        Pass MutableStylePropertySet by reference. It is never null.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Implement encoding of arrays of objects
        https://bugs.webkit.org/show_bug.cgi?id=124091

        Reviewed by Beth Dakin.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        Encode the rest of the members.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeObjects):
        Call beginArray, then beginArrayElement/endArrayElement for every element and lastly endArray.

2013-11-08  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: RemoteLayerBackingStore partial repaint is broken for the tile cache
        https://bugs.webkit.org/show_bug.cgi?id=123944

        Reviewed by Simon Fraser.

        Ensure that the tile cache retrieves repaint rects from the tile layer,
        not from the tiled backing layer.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::enumerateRectsBeingDrawn):
        Allow the PlatformCALayer to decide how to enumerate rects to paint.

        * WebCore.exp.in:
        * platform/graphics/mac/WebLayer.h:
        Add RepaintRectList, remove some unnecessary WebCore::s.

        * platform/graphics/mac/WebLayer.mm:
        (WebCore::collectRectsToPaint):
        Factor collectRectsToPaint out; it just grabs the rects from
        the layer and makes the decision whether to repaint the bounds
        of the dirty region or just the subregions.

        Move calls to collectRectsToPaint() to callers of drawLayerContents(),
        so that TileController can collect rects from the appropriate source
        (the Tile layer) and other layers just continue grabbing them from
        their relevant layers.

        Make sure that the list that comes from collectRectsToPaint() always
        has at least one rect in it (appending the clip bounds if we don't
        want to repaint subregions) so we can simplify logic in drawLayerContents.

        (WebCore::drawLayerContents):
        Remove code to support CompositingCoordinatesBottomUp, as it's only
        used on Windows, so this Mac-specific code doesn't need to support it.

        Simplify logic given that dirtyRects will always be non-empty.

        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer setNeedsDisplayInRect:]):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerPaintContents):
        Adopt collectRectsToPaint.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Implement more KeyedEncoder functionality
        https://bugs.webkit.org/show_bug.cgi?id=124089

        Reviewed by Beth Dakin.

        * bindings/js/SerializedScriptValue.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeConditionalObject):

2013-11-08  Eric Carlson  <eric.carlson@apple.com>

        getCueAsHTML() on an empty cue should return a document fragment
        https://bugs.webkit.org/show_bug.cgi?id=124084

        Reviewed by Darin Adler.

        Test: media/track/track-cue-empty-cue-text.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::createDocumentFragmentFromCueText): Don't return early when the
            passed an empty string.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        KeyedEncoder should be able to encoder objects
        https://bugs.webkit.org/show_bug.cgi?id=124085

        Reviewed by Sam Weinig.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree):
        Encode the root object.

        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        Encode the target.

        * history/HistoryItem.h:
        Add new members.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeObject):
        Call beginObject, call the functor and then call endObject().

2013-11-08  Sam Weinig  <sam@webkit.org>

        Teach CanvasObserver about references
        https://bugs.webkit.org/show_bug.cgi?id=124082

        Reviewed by Anders Carlsson.

        * css/CSSCanvasValue.cpp:
        * css/CSSCanvasValue.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out a KeyedEncoder class in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124079

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        Add symbol needed by WebCore.

        * WebCore.xcodeproj/project.pbxproj:
        Add new header file.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree):
        * history/HistoryItem.h:
        Add an encodeBackForwardTree overload that takes a KeyedEncoder object. Encode the version.

        * platform/KeyedCoding.h:
        Add a KeyedEncoder class that just has a single encodeUInt32 member function for now.

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBTransactionBackendInterface and IDBTransactionBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124077

        Reviewed by Alexey Proskuryakov.

        The abstraction is no longer needed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBTransactionBackendInterface.h: Removed.

        * Modules/indexeddb/IDBTransactionBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.cpp.
        * Modules/indexeddb/IDBTransactionBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        * Modules/indexeddb/IDBTransactionCoordinator.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-08  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r155660): Some Etherpad pages not scrollable with overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=124075

        Reviewed by Beth Dakin.
        
        In r155660 I removed some scrollbar-related layouts when scrollbars
        are in overlay mode.
        
        However, ScrollView::updateScrollbars() has a case where we still need
        to do multiple pases, related to its "Never ever try to both gain/lose a
        scrollbar in the same pass" comment. When we avoid making a new scrollbar
        because the other was removed, we need to do another pass to bring the
        correct scrollbar back.

        Can't test overlay scrollbars in tests.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2013-11-08  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape-outside that extends vertically into the margin-box is top-clipped
        https://bugs.webkit.org/show_bug.cgi?id=123769

        Reviewed by Dirk Schulze.

        Remove the assumption that Y coordinates are >= 0 from the RasterShapeIntervals class
        and correct its computeShapeMarginIntervals() method. The computeShapeMarginIntervals()
        method now generates intervals with Y coordinates that begin at the image shape's
        bounds.y - shape-margin, which may be less than 0.

        The RasterShapeIntervals::intervalsAt() method now offsets its Y coordinate parameter
        by the shape-margin. A non-const overload of the method was added to centralize all
        access to m_intervalLists.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-image-margin-004.html
              fast/shapes/shape-outside-floats/shape-outside-floats-image-margin-005.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::MarginIntervalGenerator::intervalAt): Don't clip X coordinates to 0 since they can extend into the margin-box.
        (WebCore::RasterShapeIntervals::appendInterval): Use the non-const intervalsAt() method.
        (WebCore::RasterShapeIntervals::uniteMarginInterval): Ditto.
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals): See above.
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals): Added a field for the margin.
        (WebCore::RasterShapeIntervals::intervalsAt): Offset y coordinates by the margin; added a non-const overload.

2013-11-08  Piotr Grad  <p.grad@samsung.com>

        Ended event should work also when playback rate is negative
        https://bugs.webkit.org/show_bug.cgi?id=123879

        Reviewed by Eric Carlson.

        According to W3C specification playback is ended also when playback rate is
        negative and position is the earliest possible position.

        Test: media/video-ended-event-negative-playback.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):

2013-11-08  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Checking for TypeError in RTCPeerConnection object creation
        https://bugs.webkit.org/show_bug.cgi?id=124049

        Reviewed by Eric Carlson.

        If invalid parameters are passed on RTCPeerConnection creation we must throw a TypeError exception.
        According to the spec it requires a Dictionary argument, the RTCConfiguration, which is mandatory.

        Please notice that this patch does not make every tests run as expected,
        RTCPeerConnectionHandlerMock needs to be update to deal with contraints.

        Existing tests were updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCPeerConnectionCustom.cpp: Added.
        (WebCore::JSRTCPeerConnectionConstructor::constructJSRTCPeerConnection):

2013-11-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        Use references instead of pointers to RenderBlockFlow in FloatingObjects and ComputeFloatOffsetAdapter
        https://bugs.webkit.org/show_bug.cgi?id=124074

        Reviewed by Sam Weinig.

        Just a straightforward conversion from const pointers to const references.

        Also, remove unneeded argument from FloatingObjects constructor.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::FloatingObjects):
        (WebCore::FloatingObjects::clearLineBoxTreePointers):
        (WebCore::FloatingObjects::computePlacedFloatsTree):
        (WebCore::shapeInfoForFloat):
        (WebCore::::updateOffsetIfNeeded):
        (WebCore::::collectIfNeeded):
        (WebCore::::heightRemaining):
        * rendering/FloatingObjects.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createFloatingObjects):

2013-11-08  Sam Weinig  <sam@webkit.org>

        Teach SubframeLoader a bit about references
        https://bugs.webkit.org/show_bug.cgi?id=124076

        Reviewed by Anders Carlsson.

        * html/HTMLAppletElement.cpp:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLMediaElement.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubframeLoader.h:

2013-11-08  Brady Eidson  <beidson@apple.com>

        Blind Windows build-fix attempt after r158959

        * WebCore.vcxproj/WebCore.vcxproj:

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBCursorBackendInterface and IDBCursorBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124068

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCursorBackendInterface.h: Removed.

        * Modules/indexeddb/IDBCursorBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp.
        * Modules/indexeddb/IDBCursorBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-08  Sam Weinig  <sam@webkit.org>

        Modernize FrameLoader a bit
        https://bugs.webkit.org/show_bug.cgi?id=124073

        Reviewed by Anders Carlsson.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        Use std::unique_ptrs rather than OwnPtrs.

        * loader/MixedContentChecker.cpp:
        * loader/MixedContentChecker.h:
        Switch to hold a Frame& rather than Frame*.

2013-11-08  Zan Dobersek  <zdobersek@igalia.com>

        Remove code guarded with ENABLE(STREAM)
        https://bugs.webkit.org/show_bug.cgi?id=123667

        Reviewed by Anders Carlsson.

        Remove ENABLE(STREAM)-guarded code. This was added in the effort to provide Stream API support, but
        no port enables the feature and the work on this feature has wound down after the Chromium port forked,
        leaving this code unmaintained.

        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:

2013-11-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        RenderBlockFlow::nextFloatLogicalBottomBelow should not use ShapeOutsideFloatOffsetMode
        https://bugs.webkit.org/show_bug.cgi?id=123931

        Reviewed by Sam Weinig.

        Rewrite nextFloatLogicalBottomBelow to use the placed floats tree for
        the search and to not need ShapeOutsideFloatOffsetMode anymore. This
        moves almost all of the logic into FloatingObjects, making a small
        reduction in the amount that RenderBlockFlow needs to know about the
        implementation of FloatingObjects.

        In addition, change ComputeFloatOffsetAdapter to take in LayoutUnits
        and roundToInt itself so that all of it's callers can be simplified.

        No new tests, no new behavior.

        * rendering/FloatingObjects.cpp:
        (WebCore::rangesIntersect):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::lowValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::highValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextShapeLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset):
        * rendering/FloatingObjects.h:
        * rendering/LineWidth.cpp:
        (WebCore::LineWidth::fitBelowFloats):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelowForBlock):
        (WebCore::RenderBlockFlow::getClearDelta):
        * rendering/RenderBlockFlow.h:

2013-11-08  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=124064
        Some WebCrypto files are not in correct directories

        Rubber-stamped by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:
        * crypto/CryptoAlgorithmAesCbcParams.h: Removed.
        * crypto/CryptoAlgorithmAesKeyGenParams.h: Removed.
        * crypto/CryptoKeyAES.cpp: Removed.
        * crypto/CryptoKeyAES.h: Removed.
        * crypto/CryptoKeyMac.cpp: Removed.
        * crypto/keys/CryptoKeyAES.cpp: Copied from Source/WebCore/crypto/CryptoKeyAES.cpp.
        * crypto/keys/CryptoKeyAES.h: Copied from Source/WebCore/crypto/CryptoKeyAES.h.
        * crypto/mac/CryptoKeyMac.cpp: Copied from Source/WebCore/crypto/CryptoKeyMac.cpp.
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h: Copied from Source/WebCore/crypto/CryptoAlgorithmAesCbcParams.h.
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h: Copied from Source/WebCore/crypto/CryptoAlgorithmAesKeyGenParams.h.

2013-11-08  Alexey Proskuryakov  <ap@apple.com>

        Implement JWK key import for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=124059

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-import-jwk.html
               crypto/subtle/hmac-import-jwk.html
               crypto/subtle/import-jwk.html

        WebCrypto supports multiple key formats - raw, pkcs8, spki, jwk. The design is that
        we'll transform these into parsed KeyData subclasses before passing to algorithms.

        CryptoKeySerialization is a base class for handling all these formats.

        * WebCore.xcodeproj/project.pbxproj: Added new files. Removed CryptoKeyFormat.h.
        
        * bindings/js/JSCryptoKeySerializationJWK.h: Added.
        * bindings/js/JSCryptoKeySerializationJWK.cpp: Added.
        (WebCore::getStringFromJSON): A helper. Note that we can rely on the object being
        a nice freshly parsed JSON, no getters or anything.
        (WebCore::getBooleanFromJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::JSCryptoKeySerializationJWK):
        (WebCore::JSCryptoKeySerializationJWK::~JSCryptoKeySerializationJWK):
        (WebCore::createHMACParameters): A simple helper.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): WebCrypto API is weird,
        you can have algorithm parameters both inside a JWK key and passed as importKey()
        arguments. They need to agree, whatever that means for specific serialization's
        algorithm options (not all necessarily have a 1-1 matching to WebCrypto).
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Take an intersection of usages.
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable): Only extractable if
        both JWK and the caller agree.
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid): Verify validity of JWK key.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Return an appropriate KeyData
        subclass.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::ENUM_CLASS): Moved CryptoKeyFormat here.
        (WebCore::cryptoKeyFormatFromJSValue): Added a human readable string to an exception.
        (WebCore::JSSubtleCrypto::importKey): Support multiple key formats, not just raw.

        * crypto/CryptoAlgorithm.cpp: (WebCore::CryptoAlgorithm::importKey):
        * crypto/CryptoAlgorithm.h:
        Updated signature for importKey to one that makes more sense. Decoding formats all
        the way from a binary blob is not something that CryptoAlgorithm subclasses should
        do, we now pass a KeyData subclass instead.
        Removed exportKey/wrapKey/unwrapKey altogether, because I don't yet know what the
        signatures will be.

        * crypto/CryptoKeyData.h: Added.
        (WebCore::CryptoKeyData::ENUM_CLASS):
        (WebCore::CryptoKeyData::CryptoKeyData):
        (WebCore::CryptoKeyData::~CryptoKeyData):
        (WebCore::CryptoKeyData::format):
        A base class for passing key material to algorithms. Currently, only one type is
        supported, that being OctetSequence for secret keys. Keys for RSA and EC are more
        complicated, and secret/public ones are different too.

        * crypto/CryptoKeyFormat.h: Removed. There are too many key format classes
        confusingly floating around, and this was only needed in one file for parsing.

        * crypto/CryptoKeySerialization.h: Added.
        Base class for handling raw/pkcs8/spki/jwk keys.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        Updated to use CryptoKeyData.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        Updated to use CryptoKeyData.

        * crypto/keys/CryptoKeyDataOctetSequence.cpp: Added.
        (WebCore::CryptoKeyDataOctetSequence::CryptoKeyDataOctetSequence):
        (WebCore::CryptoKeyDataOctetSequence::~CryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataOctetSequence.h: Added.
        (WebCore::asCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeySerializationRaw.cpp: Added.
        (WebCore::CryptoKeySerializationRaw::CryptoKeySerializationRaw):
        (WebCore::CryptoKeySerializationRaw::~CryptoKeySerializationRaw):
        (WebCore::CryptoKeySerializationRaw::reconcileAlgorithm):
        (WebCore::CryptoKeySerializationRaw::reconcileUsages):
        (WebCore::CryptoKeySerializationRaw::reconcileExtractable):
        (WebCore::CryptoKeySerializationRaw::keyData):
        * crypto/keys/CryptoKeySerializationRaw.h: Added.
        Much code to pass around a Vector<char>.

2013-11-08  Mark Lam  <mark.lam@apple.com>

        Move breakpoint (and exception break) functionality into JSC::Debugger.
        https://bugs.webkit.org/show_bug.cgi?id=121796.

        Reviewed by Geoffrey Garen.

        No new tests.

        - In ScriptDebugServer and JSC::Debugger, SourceID and BreakpointID are
          now numeric tokens.

        - JSC::Debugger now tracks user defined breakpoints in a JSC::Breakpoint
          record. Previously, this info is tracked in the ScriptBreakpoint record
          in ScriptDebugServer. The only element of ScriptBreakpoint that is not
          being tracked by JSC::Breakpoint is the ScriptBreakpointAction.
             The ScriptBreakpointAction is still tracked by the ScriptDebugServer
          in a list keyed on the corresponding BreakpointID.
             The ScriptBreakpoint record is now only used as a means of passing
          breakpoint paramaters to the ScriptDebugServer.

        - ScriptDebugServer now no longer accesses the JSC::CallFrame* directly.
          It always goes through the DebuggerCallFrame.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BreakpointID.h: Added.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::dispatchDidPause):
        (WebCore::ScriptDebugServer::dispatchDidContinue):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::notifyDoneProcessingDebuggerEvents):
        (WebCore::ScriptDebugServer::needPauseHandling):
        (WebCore::ScriptDebugServer::handleBreakpointHit):
        (WebCore::ScriptDebugServer::handleExceptionInBreakpointCondition):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/SourceID.h: Added.
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-11-08  László Langó  <lango@inf.u-szeged.hu>

        InspectorConsoleAgent::didFinishXHRLoading ConsoleMessage should include a column number
        https://bugs.webkit.org/show_bug.cgi?id=114316

        Reviewed by Timothy Hatcher.

        InspectorConsoleAgent::didFinishXHRLoading creates a ConsoleMessage with a line number, 
        but it should also include a column number. It looks like ultimately the line number comes from
        JSXMLHttpRequest::send, it should also be possible to get the column number at the time.
        The column number would be needed by the Web Inspector to jump to the proper place in source code 
        to show where the XHR originated from.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::SendFunctor::SendFunctor):
        (WebCore::SendFunctor::column):
        (WebCore::SendFunctor::operator()):
        (WebCore::JSXMLHttpRequest::send):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::setLastSendLineAndColumnNumber):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2013-11-08  Simon Fraser  <simon.fraser@apple.com>

        Left sidebar on cubic-bezier.com flickers
        https://bugs.webkit.org/show_bug.cgi?id=123128

        Reviewed by Dean Jackson.
        
        The logic that determined whether position:fixed elements outside the viewport
        should be composited was incorrect if the fixed element also had a transform.
        
        layer.calculateLayerBounds() only takes into account painted transforms (since they
        affect layer bounds). So we need to compute the bounds relative to the layer
        itself, then use localToContainerQuad() to map them to document coordinates,
        but only to the RenderView so that we don't hit the page scale transform.

        Tests: compositing/layer-creation/fixed-position-transformed-into-view.html
               compositing/layer-creation/fixed-position-transformed-outside-view.html

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

2013-11-08  Martin Robinson  <mrobinson@igalia.com>

        [MathML] Center of stretched curly bracket not always vertically centered
        https://bugs.webkit.org/show_bug.cgi?id=123715

        Reviewed by Brent Fulgham.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::fillWithExtensionGlyph): Update an assertion and
        handle the case where two glyph pieces abut.
        (WebCore::RenderMathMLOperator::paint): Do not offset the center glyph by y().

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Bring SourceBuffer.append up to the most recent spec.
        https://bugs.webkit.org/show_bug.cgi?id=123377

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-append-failed.html

        Bring the MediaSource append() implementation up to the current spec.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferInternal):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * platform/graphics/SourceBufferPrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::append):
        (WebCore::MockSourceBufferPrivate::evictCodedFrames):
        (WebCore::MockSourceBufferPrivate::isFull):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2013-11-07  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash at com.apple.WebCore: WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange + 26
        https://bugs.webkit.org/show_bug.cgi?id=124031

        Reviewed by Eric Carlson.

        WTF::bind() causes errors when given a bare id pointer as a parameter,
        when that parameter is casted to a specific NS type pointer (in this
        case, a NSArray*) in order to pass it as a parameter to the bound
        function.

        Instead of passing around bare id pointers, wrap them in RetainPtr<>
        objects before passing them to WTF::bind().

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2013-11-08  Antti Koivisto  <antti@apple.com>

        Templated LChar/UChar paths for simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=124035

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseFor):
        
            Use a templated function to check for illegal characters.

        (WebCore::SimpleLineLayout::skipWhitespaces):
        
            Make a template function.

        (WebCore::SimpleLineLayout::textWidth):
        
            Make a template function plus some argument changes.

        (WebCore::SimpleLineLayout::createTextRuns):
        
            Template function for creating runs while operating with either LChars or UChar.
            Also simplified line breaking and text width measuring logic.

        (WebCore::SimpleLineLayout::create):
        
            Pick the template.

        * rendering/break_lines.cpp:
        * rendering/break_lines.h:
        
            Move the implementation to the header (except for the table) so we can use the template
            versions directly.

        (WebCore::isBreakableSpace):
        (WebCore::shouldBreakAfter):
        (WebCore::needsLineBreakIterator):
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):

2013-11-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: [ATK] <span> elements exposed through ATK when not needed
        https://bugs.webkit.org/show_bug.cgi?id=123885

        Reviewed by Chris Fleizach.

        As per SVN r158195, the way it's decided whether <span> elements
        should be ignored or not has slightly changed, causing that the
        GTK/EFL ports expose them in cases that they should be ignored,
        such as for text elements that neither are focusable (e.g. by
        explicitly setting tabindex) nor have a meaningful accessible name
        suggesting they should be exposed.

        As a result, the flattening that ATK based ports normally do for
        this kind of elements (by folding them into their parents) do not
        work correctly anymore, making two tests to fail:

            platform/gtk/accessibility/spans-paragraphs-and-divs.html
            platform/gtk/accessibility/spans.html

        This patch encapsulates the part of the logic that affects this in
        the computeAccessibilityIsIgnored() method, placing it in a
        new method of AccessibilityObject that we can call from ATK's
        accessibilityPlatformIncludesObject() to ensure we hide those
        <span> elements when they don't fulfill those requirements.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasAttributesRequiredForInclusion):
        New virtual method encapsulating part of the logic from the function
        that computes whether accessibility should be ignored or not.
        * accessibility/AccessibilityObject.h:

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hasAttributesRequiredForInclusion):
        Override of the new method adding additional checks, as extracted from
        the original bits in computeAccessibilityIsIgnored().
        * accessibility/AccessibilityNodeObject.h:

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        Use the newly added function where we had the original code before.

        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Make sure <span> elements are ignored if they are not focusable
        and they don't have a meaningful accessible name.

2013-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing symbols to WebKitDOMEventTarget.symbols
        https://bugs.webkit.org/show_bug.cgi?id=123990

        Reviewed by Philippe Normand.

        Add webkit_dom_event_target_add_event_listener_with_closure and
        webkit_dom_event_target_remove_event_listener_with_closure to the
        symbols files.

        * bindings/gobject/WebKitDOMEventTarget.symbols:
        * bindings/gobject/webkitdom.symbols:

2013-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use deprecation guards around deprecated API in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=123899

        Reviewed by Martin Robinson.

        Do not include deprecated API when compiling with
        WEBKIT_DISABLE_DEPRECATED option.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:

2013-11-07  Brady Eidson  <beidson@apple.com>

        Enhance SQL journal_mode setting code to be less likely to log an error.
        <rdar://problem/15418577> and https://bugs.webkit.org/show_bug.cgi?id=124018

        Reviewed by Anders Carlsson.

        Even though the docs says SQLITE_ROW will always be returned, apparently SQLITE_OK is sometimes returned.
        Change the code to handle that.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Save the statement result value, and accept SQLITE_OK as a non-error condition.

2013-11-07  Brady Eidson  <beidson@apple.com>

        Update an out-dated ASSERT in IconDatabase code.
        <rdar://problem/15171118> and https://bugs.webkit.org/show_bug.cgi?id=124030.

        Reviewed by Andreas Kling.

        With the asynchronous interfaces that have been added and the support for WK2 that has been added, 
        this ASSERT can incorrectly fire if an icon is asked for before database cleanup is allowed.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL): Update an invalid ASSERT.

2013-11-07  Andreas Kling  <akling@apple.com>

        RenderSVGResource helpers should take RenderStyle by const reference.
        <https://webkit.org/b/124029>

        Take const RenderStyle& instead of RenderStyle* in a few more places
        so we can get rid of some ampersands and assertions.

        Reviewed by Anders Carlsson.

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Generate toAccessibilityTableRow|Column|Cell to detect bad type casts
        https://bugs.webkit.org/show_bug.cgi?id=123984

        Reviewed by Mario Sanchez Prada.

        As a step to let static_cast<> use TYPE_CASTS_BASE, AccessibilityTableRow|Column|Cell use
        ACCESSIBILITY_OBJECT_TYPE_CASTS which can support more helper functions rather than manual
        static_cast<>. This change will help to detect bad type casts further.

        No new tests, no behavior changes.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/AccessibilityTableRow.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (cellAtIndex):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper tableCellParent]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        REGRESSION (r154375): Image is oriented incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=123831

        Reviewed by Antonio Gomes.

        r154375 made that shouldRespectImageOrientation() isn't used by drawImage().
        It causes an image isn't oriented correctly. This patch sets shouldRespectImageOrientation()
        value by default.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):

2013-11-07  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image shape-outside with vertical gaps is handled incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=123934

        Reviewed by Andreas Kling.

        RasterShapeIntervals::getExcludedIntervals() was returning an empty
        list when the line overlapped any vertical gap in the image. This short-circuit
        had been mistakenly copied from getIncludedIntervals(), where it makes sense.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-image-vgap.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::getExcludedIntervals):

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Make contents layer borders more visible
        https://bugs.webkit.org/show_bug.cgi?id=124025

        Reviewed by Tim Horton.

        Layer borders for contents layers are impossible to see when the
        contentsLayer has the same bounds as its parent; make the contents
        layer border 4px thick to make it more visible.

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

2013-11-07  Andreas Kling  <akling@apple.com>

        InlineFlowBox always has a RenderBoxModelObject, take advantage.
        <https://webkit.org/b/124024>

        Since InlineFlowBox already has the branch-less renderer() returning
        a RenderBoxModelObject&, avoid using InlineBox::boxModelObject()
        wherever we have a tightly-typed box. One branch disappears from
        every call site.

        Deleted boxModelObject() on InlineFlowBox to prevent new code from
        calling the less efficient function.

        Reviewed by Anders Carlsson.

2013-11-07  Andreas Kling  <akling@apple.com>

        CTTE: Scrolling tree nodes should always have a ScrollingTree&.
        <https://webkit.org/b/124022>

        Let ScrollingTreeNode and subclasses store the backpointer to the
        tree as a ScrollingTree& reference.

        Reviewed by Anders Carlsson.

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Lots of layers get solid color but transparent contents layers now
        https://bugs.webkit.org/show_bug.cgi?id=123537

        Reviewed by Tim Horton.
        
        We call rendererBackgroundColor() to determine the layer's background color,
        but on most elements this returns the transparent color (a valid color).
        This caused us to allocate a contentsLayer, and use the transparent color as its
        backgroundColor, which was wasteful.
        
        Fix by only making a background-color layer if the color is not transparent (zero alpha).
        
        Also avoid making a new contents layer on every color change, and make sure that
        we don't do implicit animations for backgroundColor, and some other properties
        that were omitted by mistake.

        Layer tree dumps don't dump content layers, so no way to test easily.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (nullActionsDictionary):

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        DOMTokenList::add can add duplicated values if arguments had duplicated values
        https://bugs.webkit.org/show_bug.cgi?id=123962

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/bd3822ad4ae3fc5d8f89f433a7bf04f697334305

        In case we do element.classList.add('a', 'a') we need to ensure that we do not add the same token twice.
        See http://dom.spec.whatwg.org/#dom-domtokenlist-add

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::add): Make sure filtered tokens are unique among themselves.

2013-11-07  Eric Carlson  <eric.carlson@apple.com>

        Remove npr.org specific hack in HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=123859

        Reviewed by Jer Noble.

        Remove the site specific hack added in r57820, it is no longer necessary.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Remove m_dispatchingCanPlayEvent.
        (HTMLMediaElement::play): Don't special case npr.org.
        * html/HTMLMediaElement.h:

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the 32-bit build. Virtual thunks seem to have different
        symbol names between 32- and 64-bit.
        
        * WebCore.exp.in:

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in HTMLMediaElement::contextDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=123963

        Reviewed by Eric Carlson.

        Merge https://chromium.googlesource.com/chromium/blink/+/177999cdb34b707465670f0feff723922939f278

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):

2013-11-07  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash at com.apple.WebCore: -[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:] + 2084 
        https://bugs.webkit.org/show_bug.cgi?id=124012

        Reviewed by Eric Carlson.

        The value of the 'duration' key is a NSConcreteValue wrapping a CMTime, not a NSNumber.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Crash when submitting form in a document with null encoding
        https://bugs.webkit.org/show_bug.cgi?id=123975

        Reviewed by Alexey Proskuryakov.

        Merge https://chromium.googlesource.com/chromium/blink/+/bba01a7fff09e3053ada96ababac2a6e4261fe5f
        
        The CString object which is passed to normalizeLineEndingsToCRLF() can be
        a null string. It is created in FormDataList::appendString(), and it
        produces a null CString if FormDataList::m_encoding is a null encoding.

        Test: fast/forms/form-submit-in-image-document.html

        * platform/text/LineEnding.cpp:
        (internalNormalizeLineEndingsToCRLF):

2013-11-07  Anders Carlsson  <andersca@apple.com>

        Use std::function for all policy continuation functions
        https://bugs.webkit.org/show_bug.cgi?id=124011

        Reviewed by Sam Weinig.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::responseReceived):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::clear):
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::clearRequest):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::checkContentPolicy):
        * loader/PolicyChecker.h:

2013-11-07  Brady Eidson  <beidson@apple.com>

        Use SQLite journal mode WAL (WriteAheadLogging)
        https://bugs.webkit.org/show_bug.cgi?id=124009

        Reviewed by Anders Carlsson.

        WriteAheadLogging journalling is better than the traditional rollback model.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Use a PRAGMA to set journal_mode to WAL.

2013-11-07  Mark Lam  <mark.lam@apple.com>

        Cosmetic: rename xxxId to xxxID for ScriptId, SourceId, and BreakpointId.
        https://bugs.webkit.org/show_bug.cgi?id=123945.

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionDetails):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::sourceID):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::updateCallFrame):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::compileScript):
        (WebCore::InspectorDebuggerAgent::runScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        (WebCore::InspectorDebuggerAgent::reset):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/ScriptDebugListener.h:

2013-11-07  Cidorvan Leite  <cidorvan.leite@openbossa.org>

        Avoid invalid cairo matrix when drawing surfaces too small
        https://bugs.webkit.org/show_bug.cgi?id=123810

        Drawing surfaces too small makes inverse matrix with values too big,
        when this happen, cairo context is not valid anymore and it stops to draw anything.

        Reviewed by Martin Robinson.

        Test: fast/canvas/drawImage-with-small-values.html

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-11-07  Antti Koivisto  <antti@apple.com>

        Simple line layout crashes with SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=124002

        Reviewed by Simon Fraser.
        
        Don't use simple line layout for flows using SVG fonts. They crash if kerning is enabled.

        Test: fast/text/svg-font-simple-line-crash.html

        * platform/graphics/Font.h:
        (WebCore::Font::isSVGFont):
        
            Add isSVGFont() so callers don't need to go via primaryFont().

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/RenderBlock.cpp:
        (WebCore::constructTextRunInternal):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Disallow SVG fonts.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextRunRenderingContext.h:
        
            Get rid of the abstract textRunNeedsRenderingContext in favor of just testing isSVGFont().

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Allow customization of the contentsScale of TileController tiles
        https://bugs.webkit.org/show_bug.cgi?id=124004

        Reviewed by Tim Horton.

        On some platorms, zooming out on pages with TiledBacking compositing
        layers can cause very high memory use, because the TiledBacking retains
        the original page scale while the zoom is in flight, but can be asked
        to cover a large area.
        
        Make it possible to reduce memory use in this case by allowing RenderLayerCompositor
        to provide an additional scale factor for newly created tiles. Platforms can
        then customize this to create low-res tiles when necessary.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::contentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerContentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerContentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::setScale):
        (WebCore::TileController::createTileLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsScaleMultiplierForNewTiles):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles):
        * rendering/RenderLayerCompositor.h:

2013-11-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed Win build fix after r158855; wrap shapeInfoForFloat() in an ENABLE(CSS_SHAPES) guard.

        * rendering/FloatingObjects.cpp:

2013-11-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        Refactor logical left/right offset for line methods
        https://bugs.webkit.org/show_bug.cgi?id=123898

        Reviewed by David Hyatt.

        Simplify the logical left/right offset for line methods and their
        implementation, including the ComputeFloatOffsetAdapter. This also
        reduces the number of line offset methods in RenderBlock.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetAdapter::offset): Add a method to return
            the offset instead of using a confusing out parameter.
        (WebCore::::shapeOffset): Method to return the offset modified by the
            shape delta. Moving the computation to this method allowed for
            simplification of the users of ComputeFloatOffsetAdapter.
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat): Added this
            method so that ShapeOutsideFloatOffsetMode isn't needed. Returns the
            offset based on the float margin box.
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat): Ditto.
        (WebCore::FloatingObjects::logicalLeftOffset): This now only returns
            the offset based on the shape's contour.
        (WebCore::FloatingObjects::logicalRightOffset): Ditto.
        (WebCore::::heightRemaining): Rename to properly follow the getter
            naming convention.
        * rendering/FloatingObjects.h:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalRightOffsetForLine): Update to remove
            use of ShapeOutsideFloatOffsetMode and heightRemaining.
        (WebCore::RenderBlock::logicalLeftOffsetForLine): Ditto.
        (WebCore::RenderBlock::logicalRightFloatOffsetForLine): Ditto.
        (WebCore::RenderBlock::logicalLeftFloatOffsetForLine): Ditto.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::logicalLeftOffsetForPositioningFloat):
            Positioning a float is the only case where the float margin box
            should be used, and also the only case where heightRemaining is
            needed. This handles that case.
        (WebCore::RenderBlockFlow::logicalRightOffsetForPositioningFloat):
            Ditto.
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat): Update to
            use logical(Left|Right)OffsetForPositioningFloatOnLine.
        (WebCore::RenderBlockFlow::logicalLeftFloatOffsetForLine): Update to
            remove use for ShapeOutsideFloatOffsetMode and heightRemaining.
        (WebCore::RenderBlockFlow::logicalRightFloatOffsetForLine): Ditto.
        * rendering/RenderBlockFlow.h:

2013-11-07  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Removing a content node of a ContentFlow from the DOM will send a 0 nodeId
        https://bugs.webkit.org/show_bug.cgi?id=123577

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/model/content-flow-content-removal.html

        Do not send unregister events for the content nodes of a flow when the element is not part of the DOM
        anymore. We already send an unbind event, so the inspector is already notified that the node was removed.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Add mock MediaSource classes for testing.
        https://bugs.webkit.org/show_bug.cgi?id=123322

        Reviewed by Eric Carlson.

        Tests: media/media-source/media-source-addsourcebuffer.html
               media/media-source/media-source-append-buffer.html
               media/media-source/media-source-canplaythrough.html
               media/media-source/media-source-closed.html
               media/media-source/media-source-play.html
               media/media-source/media-source-track-enabled.html
               media/media-source/media-source-tracks.html


        Add mock implementation of platform MediaSource classes, allowing ports to test the
        MediaSource API without having a platform implementation.

        The MockMediaSource will support a byteformat defined in MockBox.h: a simple box-style media
        format with an initialization segment containing a number of tracks, followed by a list of
        samples.

        Add a means to insert a new media engine factory at runtime, so the internals object can add
        a MockMediaSourceMediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayerFactorySupport::callRegisterMediaEngine):
        * platform/graphics/MediaPlayer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockMediaSource):
        * testing/Internals.h:
        * testing/Internals.idl:

        For non-media-source supporting media engines, fail immediately when asked to load a media
        source, so that the MockMediaSourceMediaPlayer will be instantiated as a fall-back:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::load):
        (WebCore::MediaPlayerPrivateQTKit::supportsType):

        Add new files to the project:
        * WebCore.xcodeproj/project.pbxproj:
        * Source/WebCore/WebCore.exp.in:

        Update the MediaSource implementation:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::monitorSourceBuffers): Add a link to the spec.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::buffered): Ditto.
        (WebCore::SourceBuffer::setTimestampOffset): Ditto.
        (WebCore::SourceBuffer::validateInitializationSegment): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Ditto. Also,
            bring the implementation up to date with part of the spec.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Remove "Predicate" from
            SampleIsRandomAccessPredicate.

        Add utility classes to parse and represent the bytestream supported by the MockMediaSource:
        * platform/mock/mediasource/MockBox.cpp: Added.
        (WebCore::MockBox::MockBox):
        (WebCore::MockBox::peekType):
        (WebCore::MockBox::peekLength):
        (WebCore::MockTrackBox::MockTrackBox):
        (WebCore::MockTrackBox::type):
        (WebCore::MockInitializationBox::MockInitializationBox):
        (WebCore::MockInitializationBox::type):
        (WebCore::MockSampleBox::MockSampleBox):
        (WebCore::MockSampleBox::type):
        * platform/mock/mediasource/MockBox.h: Added.
        (WebCore::MockBox::length):
        (WebCore::MockBox::type):
        (WebCore::MockTrackBox::trackID):
        (WebCore::MockTrackBox::codec):
        (WebCore::MockTrackBox::kind):
        (WebCore::MockInitializationBox::duration):
        (WebCore::MockInitializationBox::tracks):
        (WebCore::MockSampleBox::presentationTimestamp):
        (WebCore::MockSampleBox::decodeTimestamp):
        (WebCore::MockSampleBox::duration):
        (WebCore::MockSampleBox::trackID):
        (WebCore::MockSampleBox::flags):
        (WebCore::MockSampleBox::isSync):

        Add a MediaPlayerPrivate implementation which uses MockMediaSource:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp: Added.
        (WebCore::MockMediaPlayerMediaSource::registerMediaEngine):
        (WebCore::MockMediaPlayerMediaSource::create):
        (WebCore::mimeTypeCache):
        (WebCore::MockMediaPlayerMediaSource::getSupportedTypes):
        (WebCore::MockMediaPlayerMediaSource::supportsType):
        (WebCore::MockMediaPlayerMediaSource::MockMediaPlayerMediaSource):
        (WebCore::MockMediaPlayerMediaSource::~MockMediaPlayerMediaSource):
        (WebCore::MockMediaPlayerMediaSource::load):
        (WebCore::MockMediaPlayerMediaSource::cancelLoad):
        (WebCore::MockMediaPlayerMediaSource::play):
        (WebCore::MockMediaPlayerMediaSource::pause):
        (WebCore::MockMediaPlayerMediaSource::naturalSize):
        (WebCore::MockMediaPlayerMediaSource::hasVideo):
        (WebCore::MockMediaPlayerMediaSource::hasAudio):
        (WebCore::MockMediaPlayerMediaSource::setVisible):
        (WebCore::MockMediaPlayerMediaSource::seeking):
        (WebCore::MockMediaPlayerMediaSource::paused):
        (WebCore::MockMediaPlayerMediaSource::networkState):
        (WebCore::MockMediaPlayerMediaSource::readyState):
        (WebCore::MockMediaPlayerMediaSource::buffered):
        (WebCore::MockMediaPlayerMediaSource::didLoadingProgress):
        (WebCore::MockMediaPlayerMediaSource::setSize):
        (WebCore::MockMediaPlayerMediaSource::paint):
        (WebCore::MockMediaPlayerMediaSource::currentTimeDouble):
        (WebCore::MockMediaPlayerMediaSource::durationDouble):
        (WebCore::MockMediaPlayerMediaSource::seekDouble):
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime):
        (WebCore::MockMediaPlayerMediaSource::updateDuration):
        (WebCore::MockMediaPlayerMediaSource::setReadyState):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h: Added.

        Add a mock implementation of MediaSourcePrivate, which uses MockSourceBuffer:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp: Added.
        (WebCore::MockMediaSourcePrivate::create):
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate):
        (WebCore::MockMediaSourcePrivate::~MockMediaSourcePrivate):
        (WebCore::MockMediaSourcePrivate::addSourceBuffer):
        (WebCore::MockMediaSourcePrivate::removeSourceBuffer):
        (WebCore::MockMediaSourcePrivate::duration):
        (WebCore::MockMediaSourcePrivate::setDuration):
        (WebCore::MockMediaSourcePrivate::markEndOfStream):
        (WebCore::MockMediaSourcePrivate::unmarkEndOfStream):
        (WebCore::MockMediaSourcePrivate::readyState):
        (WebCore::MockMediaSourcePrivate::setReadyState):
        (WebCore::MockMediaSourcePrivate::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MockSourceBufferPrivateHasAudio):
        (WebCore::MockMediaSourcePrivate::hasAudio):
        (WebCore::MockSourceBufferPrivateHasVideo):
        (WebCore::MockMediaSourcePrivate::hasVideo):
        * platform/mock/mediasource/MockMediaSourcePrivate.h: Added.
        (WebCore::MockMediaSourcePrivate::activeSourceBuffers):
        (WebCore::MockMediaSourcePrivate::player):

        Add a mock implementation of SourceBufferPrivate, which uses MockBoxes to parse the
        bytestream provided by SourceBuffer:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp: Added.
        (WebCore::MockMediaSample::create):
        (WebCore::MockMediaSample::~MockMediaSample):
        (WebCore::MockMediaSample::MockMediaSample):
        (WebCore::MockMediaSample::platformSample):
        (WebCore::MockMediaDescription::create):
        (WebCore::MockMediaDescription::~MockMediaDescription):
        (WebCore::MockMediaDescription::MockMediaDescription):
        (WebCore::MockSourceBufferPrivate::create):
        (WebCore::MockSourceBufferPrivate::MockSourceBufferPrivate):
        (WebCore::MockSourceBufferPrivate::~MockSourceBufferPrivate):
        (WebCore::MockSourceBufferPrivate::setClient):
        (WebCore::MockSourceBufferPrivate::append):
        (WebCore::MockSourceBufferPrivate::didReceiveInitializationSegment):
        (WebCore::MockSourceBufferPrivate::didReceiveSample):
        (WebCore::MockSourceBufferPrivate::abort):
        (WebCore::MockSourceBufferPrivate::removedFromMediaSource):
        (WebCore::MockSourceBufferPrivate::readyState):
        (WebCore::MockSourceBufferPrivate::setReadyState):
        (WebCore::MockSourceBufferPrivate::hasVideo):
        (WebCore::MockSourceBufferPrivate::hasAudio):
        * platform/mock/mediasource/MockSourceBufferPrivate.h: Added.

        Create mock implementations of AudioTrackPrivate, VideoTrackPrivate, and TextTrackPrivate
        which wrap the MockTrackBox class:
        * platform/mock/mediasource/MockTracks.cpp: Added.
        * platform/mock/mediasource/MockTracks.h: Added.
        (WebCore::MockAudioTrackPrivate::create):
        (WebCore::MockAudioTrackPrivate::~MockAudioTrackPrivate):
        (WebCore::MockAudioTrackPrivate::id):
        (WebCore::MockAudioTrackPrivate::MockAudioTrackPrivate):
        (WebCore::MockTextTrackPrivate::create):
        (WebCore::MockTextTrackPrivate::~MockTextTrackPrivate):
        (WebCore::MockTextTrackPrivate::id):
        (WebCore::MockTextTrackPrivate::MockTextTrackPrivate):
        (WebCore::MockVideoTrackPrivate::create):
        (WebCore::MockVideoTrackPrivate::~MockVideoTrackPrivate):
        (WebCore::MockVideoTrackPrivate::id):
        (WebCore::MockVideoTrackPrivate::MockVideoTrackPrivate):

2013-11-07  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Changing MediaStreamDescriptor to MediaStreamPrivate
        https://bugs.webkit.org/show_bug.cgi?id=123935

        Reviewed by Eric Carlson.

        No new tests needed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::ended):
        (WebCore::MediaStream::setEnded):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::removeRemoteSource):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registerURL):
        (WebCore::MediaStreamRegistry::unregisterURL):
        (WebCore::MediaStreamRegistry::lookupMediaStreamPrivate):
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::didAddRemoteStream):
        (WebCore::RTCPeerConnection::didRemoveRemoteStream):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::didCreateStream):
        (WebCore::UserMediaRequest::callSuccessHandler):
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::loadResource):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::toWebMediaStreamPrivate):
        (WebCore::MediaPlayerPrivate::lookupMediaStream):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        * platform/mediastream/MediaStreamCenter.cpp:
        * platform/mediastream/MediaStreamCreationClient.h:
        * platform/mediastream/MediaStreamPrivate.cpp: Renamed from Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp.
        (WebCore::MediaStreamPrivate::create):
        (WebCore::MediaStreamPrivate::addSource):
        (WebCore::MediaStreamPrivate::removeSource):
        (WebCore::MediaStreamPrivate::addRemoteSource):
        (WebCore::MediaStreamPrivate::removeRemoteSource):
        (WebCore::MediaStreamPrivate::addRemoteTrack):
        (WebCore::MediaStreamPrivate::removeRemoteTrack):
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::setEnded):
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        * platform/mediastream/MediaStreamPrivate.h: Renamed from Source/WebCore/platform/mediastream/MediaStreamDescriptor.h.
        (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient):
        (WebCore::MediaStreamPrivate::~MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::client):
        (WebCore::MediaStreamPrivate::setClient):
        (WebCore::MediaStreamPrivate::id):
        (WebCore::MediaStreamPrivate::numberOfAudioSources):
        (WebCore::MediaStreamPrivate::audioSources):
        (WebCore::MediaStreamPrivate::numberOfVideoSources):
        (WebCore::MediaStreamPrivate::videoSources):
        (WebCore::MediaStreamPrivate::numberOfAudioTracks):
        (WebCore::MediaStreamPrivate::audioTracks):
        (WebCore::MediaStreamPrivate::numberOfVideoTracks):
        (WebCore::MediaStreamPrivate::videoTracks):
        (WebCore::MediaStreamPrivate::ended):
        * platform/mediastream/MediaStreamSource.cpp:
        * platform/mediastream/MediaStreamSource.h:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp:
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::createMediaStream):
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::createMediaStream):
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::addStream):
        (WebCore::RTCPeerConnectionHandlerMock::removeStream):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-07  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] Glyphs in vertical text tests are rotated 90 degrees clockwise
        https://bugs.webkit.org/show_bug.cgi?id=50619

        Reviewed by Martin Robinson.

        Implemented the OPENTYPE_VERTICAL feature for the GTK+ port. It resolves
        the 90 degrees rotation problem of CJK characters when displaying
        vertical text.

        New tests are not required as the existing tests for vertical text will
        work properly now.

        * GNUmakefile.list.am: Added OpenTypeVerticalData.cpp and
        OpenTypeVerticalData.h to platformgtk_sources.
        * PlatformEfl.cmake: Added OpenTypeVerticalData.cpp.
        * PlatformGTK.cmake: Added OpenTypeVerticalData.cpp.
        * platform/graphics/FontCache.cpp: Originally the HashMap for
        OpenTypeVerticalData was designed with FontFileKey as integer in the
        Chromium port, which was an unique number provided by Skia. Since other
        ports use FontFileKey as string, new generic hash functions had to be
        implemented instead of using the specific ones for integers.
        (WebCore::FontVerticalDataCacheKeyHash::hash): New hash function for
        HashMap of OpenTypeVerticalData.
        (WebCore::FontVerticalDataCacheKeyHash::equal): New function for
        comparing hash indexes in the HashMap of OpenTypeVerticalData.
        (WebCore::FontVerticalDataCacheKeyTraits::emptyValue): New function for
        giving an empty FontFileKey.
        (WebCore::FontVerticalDataCacheKeyTraits::constructDeletedValue): New
        function to create a FontFileKey for deleted values.
        (WebCore::FontVerticalDataCacheKeyTraits::isDeletedValue): New function
        to check if a HashMap entry is available.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Added font
        orientation as a parameter to the FontPlatformData constructor.
        * platform/graphics/freetype/FontPlatformData.h: Added m_orientation to
        store the font orientation and m_horizontalOrientationMatrix to store
        the Cairo matrix for horizontal orientation, which can be restored in
        setOrientation().
        (WebCore::FontPlatformData::FontPlatformData): Added font orientation as
        a parameter.
        (WebCore::FontPlatformData::orientation): Implemented this function
        based on m_orientation.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Added new
        helper function rotateCairoMatrixForVerticalOrientation() to rotate the
        Cairo matrix in case of vertical orientation.
        (WebCore::FontPlatformData::FontPlatformData): Initialized
        m_orientation.
        (WebCore::FontPlatformData::operator=): Added m_orientation and
        m_horizontalOrientationMatrix to the assignment operator.
        (WebCore::FontPlatformData::operator==): Added m_orientation to the
        equal operator.
        (WebCore::FontPlatformData::initializeWithFontFace): Rotated and
        translated fonts if orientation is vertical. Also stored the horizontal
        Cairo matrix.
        (WebCore::FontPlatformData::verticalData): Returned the vertical data
        from the font cache.
        (WebCore::FontPlatformData::openTypeTable): Loaded the font table into
        a shared buffer.
        (WebCore::FontPlatformData::setOrientation): Replaced the scaled font
        data by rotating fonts according to the new orientation.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit): Set the glyph's height and
        width according to the font orientation. It also sets EM.
        (WebCore::SimpleFontData::platformCreateScaledFontData): Added
        orientation to the FontPlatformData constructor.
        (WebCore::SimpleFontData::platformWidthForGlyph): Returned the glyph's
        width according the orientation.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::CairoGetGlyphWidthAndExtents): Obtained the character advance
        and extents according to the font orientation.

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Use toAccessibilityRenderObject() instead of using static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=123986

        Reviewed by Mario Sanchez Prada.

        Though there is toAccessibilityRenderObject(), static_cast<> are being used by many places.
        To use toAccessibilityRenderObject() is more helpful to find bad type cast.

        No new tests, no behavior changes.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::imageMapLinkRenderer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::accessibilityPasswordFieldLength):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetElement):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Use toAccessibilityTable() instead of using manual static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=123982

        Reviewed by Mario Sanchez Prada.

        Though there is toAccessibilityTable(), static_cast<> are being used by many places.
        We need to use toAccessibilityTable().

        No new tests, no behavior changes.

        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (cell):
        (cellAtIndex):
        (webkitAccessibleTableGetIndexAt):
        (webkitAccessibleTableGetNColumns):
        (webkitAccessibleTableGetNRows):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper tableParent]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-11-07  Andreas Kling  <akling@apple.com>

        Use tighter InlineBox subtypes in some places.
        <https://webkit.org/b/123980>

        RenderLineBreak and RenderBox line box wrappers are always going to
        be InlineElementBox, so codify this with tighter types. Also made
        the various positionLine() functions take tighter reference types.

        All the casting to renderer-appropriate box types happens inside of
        RenderBlockFlow::computeBlockDirectionPositionsForLine() and
        propagates from there.

        Reviewed by Antti Koivisto.

2013-11-07  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: [ATK] Video and audio elements are not properly exposed
        https://bugs.webkit.org/show_bug.cgi?id=123894

        Reviewed by Chris Fleizach.

        Expose <audio> and <video> elements with ATK_ROLE_EMBEDDED, so we
        can identify them properly from ATK/AT-SPI based ATs.

        Tests: platform/gtk/accessibility/media-controls-panel-title.html
               platform/efl/accessibility/media-emits-object-replacement.html
               platform/gtk/accessibility/media-emits-object-replacement.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Add the new mapping.

2013-11-07  Laszlo Vidacs  <lac@inf.u-szeged.hu>
        
        Fix crash in BitmapImage::destroyDecodedData()
        https://bugs.webkit.org/show_bug.cgi?id=116494

        Reviewed by Csaba Osztrogonác.

        Merge from https://chromium.googlesource.com/chromium/blink/+/6b6887bf53068f8537908e501fdc7317ad2c6d86

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] CSSParser should reject <track-list> without a <track-size>
        https://bugs.webkit.org/show_bug.cgi?id=118025

        Reviewed by Andreas Kling.

        From Blink r152914 by <jchaffraix@chromium.org>

        Make sure that we parse at least 1 <track-size> inside each
        <track-list>. The old parser code allowed track-lists exclusively
        made of <track-name>. The way it was implemented eases the future
        addition of parsing for the repeat() function.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackList):
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackList): ASSERT if we don't find any
        <track-size> now that we detect their absence in the parser.

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix handling of 'inherit' and 'initial' for grid lines
        https://bugs.webkit.org/show_bug.cgi?id=115401

        Reviewed by Andreas Kling.

        From Blink r150585 by <jchaffraix@chromium.org>

        Added support for 'inherit' and 'initial' special values to
        grid-auto-{columns|rows} and grid-definition-{columns|rows}.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Resolve 'initial' and 'inherit'.
        * rendering/style/RenderStyle.h: Added initialNamedGrid{Column|Row}Lines().
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData): Initialize m_namedGrid{Column|Row}Lines.

2013-11-07  Andreas Kling  <akling@apple.com>

        Clean up BidiRun a little bit.
        <https://webkit.org/b/123964>

        Make BidiRun's member variables private and add accessors for them.
        In doing so, codify the following:

            - BidiRun always has a corresponding RenderObject.
            - The inline box is never cleared after being set.

        Reviewed by Antti Koivisto.

2013-11-07  Andreas Kling  <akling@apple.com>

        More CSSPrimitiveValue constructors should return PassRef.
        <https://webkit.org/b/123953>

        Make some more CSSPrimitiveValue constructor helpers (that are
        known to never return null) return PassRef instead of PassRefPtr.

        Reviewed by Antti Koivisto.

2013-11-07  Andreas Kling  <akling@apple.com>

        Generate type casting helpers for line boxes and use them.
        <https://webkit.org/b/123976>

        Semi-automatically generate the full set of toFooInlineBox()
        helpers with macros instead of having them (partially) hand-coded.
        Replaced static_casts with the new helpers across the codebase.

        Also made the isFooInlineBox() overrides private since they should
        never be called when the type is already known.

        Reviewed by Antti Koivisto.

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify Attr by removing m_specified member variable and setter
        https://bugs.webkit.org/show_bug.cgi?id=123965

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/597f44ec928e08820574728889adabc6d8ecd746

        m_specified is always true in WebKit so simply return true in Attr::specified().

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        * dom/Attr.h:
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Add MediaSource extensions to AudioTrack, VideoTrack, and TextTrack.
        https://bugs.webkit.org/show_bug.cgi?id=123374

        Reviewed by Eric Carlson.

        No tests added; tests will be added when Mock implementations are added in a future patch.

        Add new partial interfaces for added methods on AudioTrack, TextTrack, and VideoTrack:
        * Modules/mediasource/AudioTrackMediaSource.idl: Add read-only sourceBuffer attribute.
        * Modules/mediasource/TextTrackMediaSource.idl: Ditto.
        * Modules/mediasource/VideoTrackMediaSource.idl: Ditto.
        * Modules/mediasource/AudioTrackMediaSource.h:
        (WebCore::AudioTrackMediaSource::sourceBuffer): Added static wrapper around non-static sourceBuffer().
        * Modules/mediasource/TextTrackMediaSource.h:
        (WebCore::TextTrackMediaSource::sourceBuffer): Ditto.
        * Modules/mediasource/VideoTrackMediaSource.h:
        (WebCore::VideoTrackMediaSource::sourceBuffer): Ditto.

        Add support for writable kind & language attributes through a custom setter:
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind):
        (WebCore::JSAudioTrack::setLanguage):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setKind):
        (WebCore::JSTextTrack::setLanguage):
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind):
        (WebCore::JSVideoTrack::setLanguage):
        * html/track/AudioTrack.idl:
        * html/track/TextTrack.idl:
        * html/track/VideoTrack.idl:

        Add setter methods to the implementation classes:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::setKind):
        (WebCore::TextTrack::setLanguage):
        * html/track/TextTrack.h:
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase):
        (WebCore::TrackBase::setKind):
        (WebCore::TrackBase::setKindInternal):
        * html/track/TrackBase.h:
        (WebCore::TrackBase::setLanguage):
        (WebCore::TrackBase::sourceBuffer):
        (WebCore::TrackBase::setSourceBuffer):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::setKind):
        (WebCore::VideoTrack::setLanguage):
        * html/track/VideoTrack.h:

        Implement the unimplemented portions of MediaSource and SourceBuffer:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer):
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::MediaSourceBase):
        (WebCore::MediaSourceBase::setPrivateAndOpen):
        (WebCore::MediaSourceBase::setReadyState):
        (WebCore::MediaSourceBase::attachToElement):
        * Modules/mediasource/MediaSourceBase.h:
        (WebCore::MediaSourceBase::mediaElement):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::videoTracks):
        (WebCore::SourceBuffer::audioTracks):
        (WebCore::SourceBuffer::textTracks):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddAudioTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddVideoTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddTextTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidChangeActiveState):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:

        Add new files to the project:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        And a smorgasbord of other utility changes:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Pass this when attaching.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack): Ditto.
        * html/HTMLMediaSource.h:
        * html/track/TextTrackList.cpp:
        (TextTrackList::item): Make const.
        * html/track/TextTrackList.h:
        (WebCore::TextTrackList::lastItem): Added.
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::create): Added.
        (WebCore::MockSourceBufferPrivate::trackDidChangeEnabled):

2013-11-06  Vani Hegde  <vani.hegde@samsung.com>

        Applied background color is not retained after typing a characters
        https://bugs.webkit.org/show_bug.cgi?id=117337

        Reviewed by Ryosuke Niwa.

        While deleting a selection, only the inheritable style properties
        applied on the selection were saved.
        Since background color is considered as noninheritable style property,
        on deleting the selection, background color set on it was being lost.
        Hence on typing in new text, it would not have the applied
        background color set.
        Fixed by saving editing preoperties that are already in effect
        on a selection before deleting it.

        Test: editing/style/background-color-retained.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState):
        Modified as to save EditingPropertiesInEffect on a selection before
        deleting it.

2013-11-06  Andreas Kling  <akling@apple.com>

        InlineBox: Make paint() and nodeAtPoint() pure virtuals.
        <https://webkit.org/b/123937>

        ...and move the current implementations to InlineElementBox.
        All subclasses were already overriding these functions so the move
        is completely natural.

        Reviewed by Anders Carlsson.

2013-11-06  Andreas Kling  <akling@apple.com>

        Nothing should return std::unique_ptr<InlineBox>.
        <https://webkit.org/b/123936>

        Made RenderBox, RenderLineBreak and RenderListMarker return tightly
        typed InlineElementBoxes instead.

        Reviewed by Anders Carlsson.

2013-11-06  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream Letterpress effect
        https://bugs.webkit.org/show_bug.cgi?id=123932

        Reviewed by Sam Weinig.

        Test: platform/iphone-simulator/iphone/getComputedStyle-text-decoration-letterpress.html

        * Configurations/FeatureDefines.xcconfig: Add feature define ENABLE_LETTERPRESS disabled
        by default. We only enable letterpress on iOS.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationFlagsToCSSValue): Add support for CSS value -webkit-letterpress.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextDecoration): Ditto.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TextDecoration): Ditto.
        * css/CSSValueKeywords.in: Added CSS value -webkit-letterpress.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::fillVectorWithHorizontalGlyphPositions): Added.
        (WebCore::shouldUseLetterpressEffect): Added.
        (WebCore::showLetterpressedGlyphsWithAdvances): Added.
        (WebCore::showGlyphsWithAdvances): Modified to call showLetterpressedGlyphsWithAdvances()
        to show a letterpressed glyph. I also included additional iOS-specific changes.
        (WebCore::Font::drawGlyphs):
        * rendering/TextPaintStyle.cpp:
        (WebCore::TextPaintStyle::TextPaintStyle): 
        (WebCore::computeTextPaintStyle): Modified to compute letterpress effect style.
        (WebCore::updateGraphicsContext): Modified to apply/unapply letterpress effect drawing mode.
        * rendering/TextPaintStyle.h:
        * rendering/style/RenderStyleConstants.h:

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in SliderThumbElement::dragFrom
        https://bugs.webkit.org/show_bug.cgi?id=123873

        Reviewed by Sam Weinig.

        Moved Ref.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::dragFrom):

2013-11-06  Daniel Bates  <dabates@apple.com>

        Cleanup FontMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=123928

        Reviewed by Andy Estes.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances): Inline the value of variable isVertical as we
        reference it exactly once and its value is sufficiently clear.
        (WebCore::Font::drawGlyphs): Remove default case in switch block so that the compiler
        checks that all cases are covered. Move definition of platformData to the top of the
        function and use it whenever we want to access the platform font data

2013-11-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] We should not allow generateMipMap on compressed textures
        https://bugs.webkit.org/show_bug.cgi?id=123915
        <rdar://problem/15201274>

        Reviewed by Dean Jackson.

        Found by existing conformance/extensions/webgl-compressed-texture-s3tc.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Set compressed flag.
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::generateMipmap): For Apple builds, check state
        of compressed flag and generate appropriate WebGL error if necessary.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture): Set compressed flag to false by default
        (WebCore::WebGLTexture::isCompressed): Added
        (WebCore::WebGLTexture::setCompressed): Added
        * html/canvas/WebGLTexture.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::generateMipmap): Switch implementation to use proper
        glGenerateMipmaps, rather than the glGenerateMipmapsEXT method.

2013-11-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Changes to CodeGeneratorInspectorStrings.py should rebuild inspector generated files
        https://bugs.webkit.org/show_bug.cgi?id=123925

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:

2013-11-06  Bem Jones-Bey  <bjonesbe@adobe.com>

        Rename region line offset methods
        https://bugs.webkit.org/show_bug.cgi?id=123897

        Reviewed by Sam Weinig.

        Because of the large number of overloads on the line offset methods,
        it is very hard to read code using them, which also makes it harder to
        move them out of RenderBlock. This patch renames the methods that take
        a region as an argument to make it clearer when looking at the code
        how the differ from the ones that don't.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLineInRegion):
        (WebCore::RenderBlock::logicalRightOffsetForLineInRegion):
        (WebCore::RenderBlock::logicalLeftOffsetForLineInRegion):
        (WebCore::RenderBlock::startOffsetForLineInRegion):
        (WebCore::RenderBlock::endOffsetForLineInRegion):
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):

2013-11-06  Antti Koivisto  <antti@apple.com>

        HTMLCollection should use CollectionIndexCache
        https://bugs.webkit.org/show_bug.cgi?id=123906

        Reviewed by Ryosuke Niwa.
        
        More code sharing.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h:
        (WebCore::::nodeBeforeCached):
        (WebCore::::nodeAfterCached):
        (WebCore::::nodeAt):
            
            Add a mechanism for disabling use of backward traversal.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::collectionCanTraverseBackward):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::isMatchingElement):
        (WebCore::HTMLCollection::iterateForPreviousElement):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::nameShouldBeVisibleInDocumentAll):
        (WebCore::firstMatchingChildElement):
        (WebCore::nextMatchingSiblingElement):
        (WebCore::HTMLCollection::firstElement):
        (WebCore::HTMLCollection::traverseForward):
        (WebCore::HTMLCollection::collectionFirst):
        (WebCore::HTMLCollection::collectionLast):
        (WebCore::HTMLCollection::collectionTraverseForward):
        (WebCore::HTMLCollection::collectionTraverseBackward):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::collectionCanTraverseBackward):
        
            Disable use of backward traversal for collections that use custom traversal.

2013-11-06  Brendan Long  <b.long@cablelabs.com>

        Add "id" attribute to TextTrack
        https://bugs.webkit.org/show_bug.cgi?id=123825

        Reviewed by Eric Carlson.

        Test: media/track/track-id.html

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::addTextTrack): Add emptyString() for track id.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::AudioTrack::idChanged): Added, set id.
        * html/track/AudioTrack.h: Move m_id to TrackBase.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::InbandTextTrack::idChanged): Added, set id.
        * html/track/InbandTextTrack.h: Add idChanged().
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack): Add emptyString() for track id.
        (WebCore::LoadableTextTrack::id): Override to return the track element's id.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::captionMenuOffItem): Add empty string for track id.
        (WebCore::TextTrack::captionMenuAutomaticItem): Add empty string for track id.
        (WebCore::TextTrack::TextTrack): Pass id to TrackBase.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::create): Add id parameter.
        * html/track/TextTrack.idl: Add id attribute.
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase): Add m_id.
        * html/track/TrackBase.h: Add id attribute / m_id.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::VideoTrack::idChanged): Added, set id.
        * html/track/VideoTrack.h: Move m_id to TrackBase.
        * platform/graphics/TrackPrivateBase.h: Add idChanged() callback.

2013-11-06  Antti Koivisto  <antti@apple.com>

        Move array position caching out from HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=123895

        Reviewed by Darin Adler.

        This caching complicates the logic but is used by a single subclass
        (HTMLFormControlsCollection) only. The subclass can do the caching itself.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::elementBeforeOrAfterCachedElement):
        (WebCore::HTMLCollection::firstElement):
        
            Renamed from traverseFirstElement.

        (WebCore::HTMLCollection::traverseForwardToOffset):
        (WebCore::HTMLCollection::invalidateCache):
        
            Make cache invalidation virtual so we can clear HTMLTableRowsCollection index cache.

        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        
            Use traverseForwardToOffset instead traverseNextElement. This allows removal of traverseNextElement.

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::usesCustomForwardOnlyTraversal):
        
            Renamed the enum and the accessor to be more informative.

        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::customElementAfter):
        
            Renamed from virtualItemAfter.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore::findFormAssociatedElement):
        (WebCore::HTMLFormControlsCollection::customElementAfter):
        
            Move the array position caching logic here.

        (WebCore::HTMLFormControlsCollection::invalidateCache):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):
        (WebCore::HTMLTableRowsCollection::customElementAfter):
        * html/HTMLTableRowsCollection.h:

2013-11-06  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [ATK] accessibility/title-ui-element-correctness.html fails
        https://bugs.webkit.org/show_bug.cgi?id=99825

        Reviewed by Mario Sanchez Prada.

        When calling setAtkRelationSetFromCoreObject a new ATK_LABELLED_BY_RELATION
        is added, adding proper label element as a relation. When the document structure
        has been changed and a different label should be linked as a relation, current ATK
        implementation adds it as a next target on relation's target list, while
        WTR/DumpRenderTree implementation takes only first one into account.
        This patch adds a new function removing current relations before adding new ones.

        Covered by existing tests.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (removeAtkRelationFromRelationSetByType):
        (setAtkRelationSetFromCoreObject):

2013-11-06  Daniel Bates  <dabates@apple.com>

        Add ENABLE(TEXT_SELECTION)
        https://bugs.webkit.org/show_bug.cgi?id=123827

        Reviewed by Ryosuke Niwa.

        Add compile-time guard, ENABLE(TEXT_SELECTION), to enable or
        disable selection painting in WebCore (enabled by default).

        On iOS we disable WebCore selection painting and have UIKit
        paint the selection.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection): Only paint selection when
        TEXT_SELECTION is enabled.
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):
        For now, add a ENABLE(TEXT_SELECTION)-guard around an assertion. Added
        a FIXME comment to investigate the callers and either move the assertion
        to the appropriate callers or structure the code such that we can remove
        the assertion.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection): Only paint selection when
        TEXT_SELECTION is enabled.
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextSelectionPaintStyle): Only compute the selection
        paint style when TEXT_SELECTION is enabled. Otherwise, return a paint
        style identical to the text paint style. Also, substitute nullptr for 0.

2013-11-06  Jer Noble  <jer.noble@apple.com>

        Unrevewied Windows build fix after r158736; add InlineElementBox.cpp to the RenderingAllInOne.cpp file.

        * rendering/RenderingAllInOne.cpp:

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix, style() return type is now a reference.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionFromStyle):

2013-11-06  Jer Noble  <jer.noble@apple.com>

        Unreviewed 32-bit Mac build fix; use an explicit FloatSize -> IntSize conversion function.

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

2013-11-04  Jer Noble  <jer.noble@apple.com>

        Playing many sounds with HTML5 Audio makes WebKit unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=116145

        Reviewed by Eric Carlson.

        Cache as much information as possible from AVPlayerItem to eliminate unneccesary
        calls into AVFoundation.

        Add WillChange/DidChange functions to handle the results of KVO notifications
        from AVPlayerItem and AVPlayer:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPlay):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatusDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferFullWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferFullDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::presentationSizeDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::durationDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rateDidChange):
        (WebCore::itemKVOProperties):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

        Instruct the HTMLMediaElement to cache the currentTime value for 5 seconds:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::maximumDurationToCacheMediaTime):

        Add and initialize member variables to hold these cached values:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):

        Add a new Notification type which can take (and call) a Function object:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::function):

        Implement queries in terms of the cached values of AVPlayerItem and AVPlayer
        properties:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):

        Invalidate the cached currentTime before calling scheduleTimeUpdate so that the
        correct movieTime is saved in m_clockTimeAtLastUpdateEvent:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::setReadyState):

2013-10-24  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add support for named grid areas
        https://bugs.webkit.org/show_bug.cgi?id=120045

        Reviewed by Andreas Kling.

        From Blink r155555, r155850 and r155889 by <jchaffraix@chromium.org>

        Added support for named grid areas. Basically a named grid area is
        now a valid grid position. The shorthand parsing of grid-area was
        split from the grid-{row|column} as the rules for expanding are
        slightly different.

        Unknown grid area names are treated as 'auto' as per the
        specification. This means that for those cases we need to trigger
        the auto-placement algorithm.

        Tests: fast/css-grid-layout/grid-item-bad-named-area-auto-placement.html
               fast/css-grid-layout/grid-item-named-grid-area-resolution.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridPosition):
        (WebCore::gridMissingGridPositionValue):
        (WebCore::CSSParser::parseGridItemPositionShorthand):
        (WebCore::CSSParser::parseGridAreaShorthand):
        (WebCore::CSSParser::parseSingleGridAreaLonghand):
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::adjustGridItemPosition):
        (WebCore::createGridPosition):
        * css/StyleResolver.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::isNamedGridArea):
        (WebCore::GridPosition::setNamedGridArea):
        (WebCore::GridPosition::namedGridLine):

2013-11-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Audio and Video attachments are not output to VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=123479

        Reviewed by Mario Sanchez Prada.

        Video and audio elements don't appear as distinct objects in the AX hierarchy,
        nor are they treated as replaceable objects when emitting the text. We should
        treat these characters like attachments, for one. On the Mac platform, we should
        also identify them with special subroles.

        Tests: platform/mac/accessibility/media-emits-object-replacement.html
               platform/mac/accessibility/media-role-descriptions.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isGenericFocusableElement):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):


2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Notify nodes removal to Range/Selection after dispatching blur and mutation event
        https://bugs.webkit.org/show_bug.cgi?id=123880

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/b60576a0560d14f8757e58d55d37b7cefa48a6ac

        In willRemoveChildren in ContainerNode.cpp, call Document::nodeChildrenWillBeRemoved after instead of
        before dispatching mutation events because we need to update ranges created by those mutation event
        listeners. willRemoveChild was fixed in r115686.

        Tests: editing/selection/selection-change-in-blur-event-by-remove-children.html
               editing/selection/selection-change-in-mutation-event-by-remove-children.html
               fast/dom/Range/range-created-during-remove-children.html

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

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Fix out-of-date offset in selection range code in range.surroundContents
        https://bugs.webkit.org/show_bug.cgi?id=123871

        Reviewed by Andreas Kling.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/c89b413ff0fc4aafa0c71d180b0b1e131bb37707

        The code in Range::insertNode assumeed that the start offset of the selection range within its container
        doesn't change across a call to insertBefore on the container but this is wrong. This patch recomputes
        the start offset when it is used after the insertBefore call.

        Test: editing/selection/range-surroundContents-with-preceding-node.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode):

2013-11-06  Andreas Kling  <akling@apple.com>

        Add InlineElementBox and stop instantiating InlineBox directly.
        <https://webkit.org/b/123882>

        Make the InlineBox constructors protected and add a new class
        called InlineElementBox on top. This is somewhat analogous to the
        split between RenderText and RenderElement, and allows us to make
        renderer() return a far tighter RenderBoxModelObject& instead
        of a RenderObject&.

        Moved over attachLine(), deleteLine() and extractLine() to start
        things off. More things will follow.

        Reviewed by Antti Koivisto.

2013-11-06  Piotr Grad  <p.grad@samsung.com>

        Seek for video doesn't work when playback rate is negative
        https://bugs.webkit.org/show_bug.cgi?id=123791

        In MediaPlayerPrivateGStreamer::seek negative playback rate was not taken to account.

        Reviewed by Philippe Normand.

        Test: media/video-seek-with-negative-playback.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::seek):

2013-11-06  Andreas Kling  <akling@apple.com>

        Reinstate an annoying assertion that I accidentally commented out.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):

2013-11-06  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Override label() and language() in Audio and VideoTrackPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=123836

        The tests are currently flakey because we only get the label and language if we get
        tags after the track client is set.

        Reviewed by Philippe Normand.

        No new tests because the tests already exist (this fixes flakeyness).

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Override label() and language() to use m_label and m_language.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Same.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Make m_label and m_language protected so they can be used in the functions above.

2013-11-05  Andreas Kling  <akling@apple.com>

        RenderBlockFlow should only expose its line boxes as RootInlineBox.
        <https://webkit.org/b/123878>

        The line boxes attached directly to a RenderBlockFlow are always
        RootInlineBox objects, so call sites should always use the tightly
        typed firstRootBox() and lastRootBox().

        This allows the compiler to devirtualize calls to member functions
        of RootInlineBox that are marked FINAL.

        Reviewed by Antti Koivisto.

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure end < m_runCount in WebCore::BidiRunList<WebCore::BidiRun>::reverseRuns
        https://bugs.webkit.org/show_bug.cgi?id=123863

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/cbaa92c763a37d89eeabd01658e522219299290c

        Test: fast/text/bidi-reverse-runs-crash.html

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver<Iterator, Run>::createBidiRunsForLine): Don't reverse the runs if there's
        nothing to be reversed.

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Address the review comment after r158724.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):

2013-11-05  Zalan Bujtas  <zalan@apple.com>

        Widget's position change should not initiate layout, only when its size changes.
        https://bugs.webkit.org/show_bug.cgi?id=123860

        Reviewed by Andreas Kling.

        RenderWidgets initiate unnecessary layouts while scrolling when they are embedded to
        overflow:scroll containers. Scroll position change doesn't dirty the render tree
        so it should not trigger layout either.

        Manual test added. Unfortunately we can't test against the number of layouts yet.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Use-after-free in SliderThumbElement::dragFrom
        https://bugs.webkit.org/show_bug.cgi?id=123873

        Reviewed by Andreas Kling.

        Ref the SliderThumbElement since it could go away inside dragFrom.

        Test: fast/forms/range/range-type-change-onchange-2.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Change the order of conditions to avoid computing rendererIsEditable()
        https://bugs.webkit.org/show_bug.cgi?id=123868

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/c89b413ff0fc4aafa0c71d180b0b1e131bb37707

        When we need both Node::renderer() and Node::rendererIsEditable() conditions to be true to perform
        some operation, it is more effective to check for renderer() first, so that if this condition fails
        we can avoid unnecessary computation of rendererIsEditable().

        * dom/Position.cpp:
        (WebCore::nextRenderedEditable):
        (WebCore::previousRenderedEditable):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        simpleUserAgentStyleSheet doesn't have focus ring on anchor element
        https://bugs.webkit.org/show_bug.cgi?id=123867

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/08ecc23c4d80be9969918c4baf0ac83dc6cb6cbd

        * css/CSSDefaultStyleSheets.cpp:

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        valueForBorderRadiusShorthand returns wrong values in some case
        https://bugs.webkit.org/show_bug.cgi?id=123866

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/0933728126f2db06ab8e945efc98bffa2d42af1c

        Because valueForBorderRadiusShorthand misses the followings:
        - showHorizontalBottomRight depends on showHorizontalBottomLeft.
        - showHorizontalTopRight depends on showHorizontalBottomRight (including showHorizontalBottomLeft).

        See also http://dev.w3.org/csswg/css-backgrounds/#the-border-radius

        Test: fast/css/getComputedStyle/getComputedStyle-borderRadius-2.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusShorthandValue):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Protect DOM nodes in IndentOutdentCommand::tryIndentingAsListItem()
        https://bugs.webkit.org/show_bug.cgi?id=123861

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/297442eb539a2b764fdad323de79099a70179186 partially.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Make selectedListItem, previousList, and nextList
        RefPtr since they're are used after calling insertNodeBefore.

2013-11-05  Andreas Kling  <akling@apple.com>

        Apply more unique_ptr to line box management.
        <https://webkit.org/b/123857>

        Make all of the functions that return newly-created line boxes
        return them packed up in std::unique_ptrs.

        There is one exception in RenderBlockLineLayout where the function
        createInlineBoxForRenderer() is inconsistent about the ownership of
        the returned object. This will be addressed by a subsequent patch.

        We now "release" the line boxes into their various home structures,
        so the pointer smartness doesn't go end-to-end just yet.

        Reviewed by Anders Carlsson.

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        getComputedStyle(x).lineHeight is affected by zooming
        https://bugs.webkit.org/show_bug.cgi?id=123847

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/7957097afbab2899ababd0d9c8acbf6e3eddb870

        Test: fast/css/line-height-zoom-get-computed-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::lineHeightFromStyle): Don't round line-height values.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLineHeight::applyValue): Use the computed value instead of the used value.

2013-11-05  James Craig  <jcraig@apple.com>

        AX: media controls accessibility needs more work
        https://bugs.webkit.org/show_bug.cgi?id=123749

        Reviewed by Jer Noble.

        Updated some of the control labels/roles to improve accessibility.
          - Volume slider is now keyboard/screenreader accessible.
          - muteButton was a checkbox toggling checked state, now a button that toggles label "mute/unmute"
          - fullscreenButton was a checkbox toggling checked state, now a button that toggles label "display/exit full screen"
          - captionButton was a checkbox, now a popup button that launches the newly accessible menu.
        Subtitles menu is now keyboard/screenreader accessible (uses roaming tabindex).
        Render dump expectations changed because volume slider is now hidden via... 
        ...opacity/size (to make accessible without hover) instead of display:none.

        Updated existing test coverage.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel .volume-box):
        (audio::-webkit-media-controls-panel .volume-box:active):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-closed-captions-container .list):
        (audio::-webkit-media-controls-closed-captions-container li:focus):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.handleMuteButtonClicked):
        (Controller.prototype.handleMinButtonClicked):
        (Controller.prototype.handleMaxButtonClicked):
        (Controller.prototype.handleVolumeSliderChange):
        (Controller.prototype.buildCaptionMenu):
        (Controller.prototype.focusSiblingCaptionItem):
        (Controller.prototype.handleCaptionItemKeyUp):

2013-11-05  Andreas Kling  <akling@apple.com>

        Move some plugin-specific code from RenderWidget to RenderEmbeddedObject.
        <https://webkit.org/b/123845>

        All RenderWidgets representing plugins will be RenderEmbeddedObjects.
        Move some of the plugin-specific logic to RenderEmbeddedObject since it
        doesn't make sense for all RenderWidgets (frames, embedded documents)
        to care about this.

        Reviewed by Anders Carlsson.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * WebCore.exp.in:

2013-11-05  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: Moving an element while in the DOMNodeRemoved handler will hide it in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=123516

        Reviewed by Timothy Hatcher.

        InspectorInstrumentation::willRemoveDOMNode was actually calling both willRemoveDOMNodeImpl and
        didRemoveDOMNodeImpl, making the DOMAgent unbind the element even if it was still part of the DOM.

        Because of that the DOMAgent was sending two events:
        1. When the element was about to be removed, just before JS "DOMNodeRemoved" was triggered.
        2. When the element was actually removed.

        Note that inspector's event #2 will not know about the node, as it just removed it from the
        internal hashmap, so it will just use a nodeID == 0 for it.

        This patch adds a separate call to InspectorInstrumentation::didRemoveDOMNode, just before the
        element is about to be removed. The InspectorInstrumentation::willRemoveDOMNode call is now only used
        by the DOMDebugger to trigger the DOM breakpoints in the Web Inspector. That feature is not exposed
        in the new Inspector UI, but can be used/tested using the protocol directly.

        Tests: inspector-protocol/dom-debugger/node-removed.html
               inspector-protocol/dom/dom-remove-events.html
               inspector-protocol/dom/remove-multiple-nodes.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeBetween):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::didRemoveDOMNode):

2013-11-05  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on CMake based ports with GLES.

        * CMakeLists.txt:
        Added OPENGLES2_LIBRARIES and OPENGLES2_INCLUDE_DIR into the includes and
        libraries list.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        platformCALayerDeviceScaleFactor should be const
        https://bugs.webkit.org/show_bug.cgi?id=123842

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerDeviceScaleFactor):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerDeviceScaleFactor):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerDeviceScaleFactor):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDeviceScaleFactor):
        Constify PlatformCALayerClient::platformCALayerDeviceScaleFactor.

2013-11-05  Gavin Barraclough  <barraclough@apple.com>

        Subresource loads should not prevent page throttling
        https://bugs.webkit.org/show_bug.cgi?id=123757

        Reviewed by Alexey Proskuryakov.

        The page-is-loading test for inhibiting process supression is currently
        too conservative, preventing supression of pages with infinitely loading
        resources (commonly XHRs). Instead, just rely on the FrameLoader being
        active (with hysteresis).

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::checkForHTTPStatusCodeError):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        * loader/SubresourceLoader.h:
            - remove m_activityAssertion from SubresourceLoader.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        [mac] PDFDocumentImage is too big if PDF has a crop box smaller than the media box
        https://bugs.webkit.org/show_bug.cgi?id=123840
        <rdar://problem/15308765>

        Reviewed by Alexey Proskuryakov.

        Test: fast/images/pdf-as-image-crop-box.html

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::size):
        Use the crop box when determining the size of the image.

        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        Get rid of m_mediaBox, since we don't need it anymore.

        (WebCore::PDFDocumentImage::drawPDFPage):
        PDFKit does the translation by the crop box origin for us;
        if we do it additionally, we'll be painting the wrong part of the image.
        So, don't do the translation here.

2013-11-05  Antti Koivisto  <antti@apple.com>

        Factor index cache for NodeLists and HTMLCollections to a class
        https://bugs.webkit.org/show_bug.cgi?id=123823

        Reviewed by Ryosuke Niwa.

        Implement index cache class that can used by NodeLists and HTMLCollections that currently
        each have implementations of their own.
        
        This patch also implements ChildNodeList and LiveNodeList using CollectionIndexCache.
        HTMLCollection is will be transitioned later.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        
            The client calls to cache to for indexed and size access.

        (WebCore::ChildNodeList::collectionFirst):
        (WebCore::ChildNodeList::collectionLast):
        (WebCore::ChildNodeList::collectionTraverseForward):
        (WebCore::ChildNodeList::collectionTraverseBackward):
        
            Cache calls back to these as needed to do the actual traversal.

        (WebCore::ChildNodeList::invalidateCache):
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h: Added.
        
            Templated cache class itself.

        (WebCore::::CollectionIndexCache):
        (WebCore::::nodeCount):
        (WebCore::::nodeBeforeCached):
        (WebCore::::nodeAfterCached):
        (WebCore::::nodeAt):
        (WebCore::::invalidate):
        * dom/LiveNodeList.cpp:
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForward):
        (WebCore::LiveNodeList::collectionFirst):
        (WebCore::LiveNodeList::collectionLast):
        (WebCore::LiveNodeList::collectionTraverseForward):
        (WebCore::LiveNodeList::collectionTraverseBackward):
        (WebCore::LiveNodeList::length):
        (WebCore::LiveNodeList::item):
        (WebCore::LiveNodeList::invalidateCache):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):

2013-11-05  Enrica Casucci  <enrica@apple.com>

        Full width semicolon is wrong in vertical text.
        https://bugs.webkit.org/show_bug.cgi?id=123814
        <rdar://problem/15312541>

        Reviewed by Benjamin Poulain.

        The full width semicolon should always be upright.
        Adding it to the list of characters that should
        ignore rotation.

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::shouldIgnoreRotation):

2013-11-05  Andreas Kling  <akling@apple.com>

        Remove unused RenderWidget::notifyWidget().

        Rubber-stamped by Anders Carlsson.

2013-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158678.
        http://trac.webkit.org/changeset/158678
        https://bugs.webkit.org/show_bug.cgi?id=123820

        Causes a new debug assertion failure on the Mavericks test
        system. (Requested by bfulgham on #webkit).

        * rendering/mathml/RenderMathMLOperator.cpp:

2013-11-05  Renata Hodovan  <reni@webkit.org>

        ASSERTION FAILED: isHTMLTitleElement(m_titleElement.get()) in WebCore::Document::setTitle
        https://bugs.webkit.org/show_bug.cgi?id=122092

        Reviewed by Darin Adler.

        Remove a bogus assert in Document::setTitle().
        m_titleElement can be either of HTMLTitleElement or SVGTitleElement. The assertion was wrong.
        
        Backported from Blink:
        https://src.chromium.org/viewvc/blink?revision=158620&view=revision

        Test: svg/custom/title-assertion.html

        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto):

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

        [MathML] Poor spacing around delimiters in MathML Torture Test 14
        https://bugs.webkit.org/show_bug.cgi?id=122837

        Reviewed by Brent Fulgham.

        Instead of stretching the vertical bar with the stretchable version, just repeat
        the normal vertical bar. This follows what Gecko does when rendering tall vertical
        bars and also works around an issue with STIX fonts leading to poor spacing in
        formulas.

        * rendering/mathml/RenderMathMLOperator.cpp: Stretch the vertical bar with the
        normal variant.

2013-11-05  Daniel Bates  <dabates@apple.com>

        XSSAuditor should catch reflected srcdoc properties even without a <frame> tag injection

        From Blink r160615 by <tsepez@chromium.org>
        https://src.chromium.org/viewvc/blink?view=rev&revision=160615

        Test: http/tests/security/xssAuditor/iframe-srcdoc-property-blocked.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterIframeToken):

2013-11-05  Éva Balázsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        Delete maketokenizer.
        https://bugs.webkit.org/show_bug.cgi?id=115155

        Reviewed by Zoltan Herczeg.

        This script was used to generate the old flex based CSS tokenizer. It
        was replaced by a custom tokenizer in r106217 but the script wasn't
        removed. Since there is no mention of it in the original bug nor any
        reference to maketokenizer in our build files, it's probably an
        oversight.

        Merge from blink:
        https://chromium.googlesource.com/chromium/blink/+/2a1c8aaf867f707ccdcd8893446e907e2aa2e1c2

        * css/maketokenizer: Removed.

2013-11-05  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Unbreaking GCC builds.

        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement): This inline function is not a template anymore.

2013-11-05  Antti Koivisto  <antti@apple.com>

        Make it compile.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):

2013-11-05  Antti Koivisto  <antti@apple.com>

        HTMLCollection should not be NodeList
        https://bugs.webkit.org/show_bug.cgi?id=123794

        Reviewed by Andreas Kling.

        HTMLCollection and NodeList are unrelated types in DOM yet our HTMLCollection inherits NodeList
        for code sharing reasons. While some code does get shared the types are sufficiently different 
        that this results in lots of unnecessary branches, complexity and general awkwardness. Code sharing 
        can be better achieved by means other than inheritance.
        
        This patch splits HTMLCollection from NodeList by copy-pasting and eliminating resulting redundancies. 
        Sharing comes later.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::~ClassNodeList):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::registerNodeList):
        (WebCore::Document::unregisterNodeList):
        (WebCore::Document::registerCollection):
        (WebCore::Document::unregisterCollection):
        (WebCore::Document::ensureCachedCollection):
        
            Add separate functions and map for registering HTMLCollections.

        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::ensureCachedHTMLCollection):
        (WebCore::Element::cachedHTMLCollection):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::rootNode):
        (WebCore::isMatchingElement):
        (WebCore::LiveNodeList::iterateForPreviousElement):
        (WebCore::LiveNodeList::itemBefore):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForwardToOffset):
        (WebCore::LiveNodeList::traverseLiveNodeListFirstElement):
        (WebCore::LiveNodeList::traverseLiveNodeListForwardToOffset):
        (WebCore::LiveNodeList::isLastItemCloserThanLastOrCachedItem):
        (WebCore::LiveNodeList::isFirstItemCloserThanCachedItem):
        (WebCore::LiveNodeList::length):
        (WebCore::LiveNodeList::item):
        (WebCore::LiveNodeList::elementBeforeOrAfterCachedElement):
        
            This code used to live in HTMLCollection.cpp. Copy-paste here and remove all branches not needed for NodeLists.

        (WebCore::LiveNodeList::invalidateCache):
        
            NodeLists have no name caches.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        (WebCore::LiveNodeList::isRootedAtDocument):
        (WebCore::LiveNodeList::type):
        (WebCore::LiveNodeList::invalidateCache):
        (WebCore::LiveNodeList::setCachedElement):
        
            Merge LiveNodeListBase and LiveNodeList.
            Remove fields and code supporting HTMLCollection.

        (WebCore::shouldInvalidateTypeOnAttributeChange):
        
            Move to global scope. This function is used both HTMLCollections and LiveNodeLists.

        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::~NameNodeList):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::create):
        * dom/Node.cpp:
        (WebCore::shouldInvalidateNodeListCachesForAttr):
        (WebCore::Document::shouldInvalidateNodeListAndCollectionCaches):
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::Node::invalidateNodeListAndCollectionCachesInAncestors):
        (WebCore::NodeListsNodeData::invalidateCaches):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::addCachedCollection):
        (WebCore::NodeListsNodeData::cachedCollection):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCacheWithName):
        (WebCore::NodeListsNodeData::removeCachedCollection):
        (WebCore::NodeListsNodeData::isEmpty):
        (WebCore::NodeListsNodeData::adoptDocument):
        (WebCore::NodeListsNodeData::namedCollectionKey):
        (WebCore::NodeListsNodeData::namedNodeListKey):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList):
        
            Add separate cache for HTMLCollections.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::TagNodeList::~TagNodeList):
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create):
        (WebCore::HTMLTagNodeList::create):
        * html/CollectionType.h:
        
            Remove NodeList types.

        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::rootNode):
        (WebCore::isMatchingElement):
        (WebCore::HTMLCollection::iterateForPreviousElement):
        (WebCore::HTMLCollection::itemBefore):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForwardToOffset):
        (WebCore::HTMLCollection::isLastItemCloserThanLastOrCachedItem):
        (WebCore::HTMLCollection::isFirstItemCloserThanCachedItem):
        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::elementBeforeOrAfterCachedElement):
        (WebCore::HTMLCollection::traverseFirstElement):
        (WebCore::HTMLCollection::traverseNextElement):
        (WebCore::HTMLCollection::traverseForwardToOffset):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::invalidateIdNameCacheMaps):
        (WebCore::HTMLCollection::namedItem):
        
            Remove NodeList specific branches and functions.
            LiveNodeListBase functions are now HTMLCollection functions.

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::isRootedAtDocument):
        (WebCore::HTMLCollection::invalidationType):
        (WebCore::HTMLCollection::type):
        (WebCore::HTMLCollection::ownerNode):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::document):
        (WebCore::HTMLCollection::overridesItemAfter):
        (WebCore::HTMLCollection::isElementCacheValid):
        (WebCore::HTMLCollection::cachedElement):
        (WebCore::HTMLCollection::cachedElementOffset):
        (WebCore::HTMLCollection::isLengthCacheValid):
        (WebCore::HTMLCollection::cachedLength):
        (WebCore::HTMLCollection::setLengthCache):
        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::isItemRefElementsCacheValid):
        (WebCore::HTMLCollection::setItemRefElementsCacheValid):
        (WebCore::HTMLCollection::rootType):
        (WebCore::HTMLCollection::hasNameCache):
        (WebCore::HTMLCollection::setHasNameCache):
        
            Copy-paste functions and fields from former LiveNodeListBase.

        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::~HTMLNameCollection):
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::~LabelsNodeList):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::~RadioNodeList):
        * html/RadioNodeList.h:
        (WebCore::RadioNodeList::create):

2013-11-05  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        [GTK] Add stubs for missing symbols in dom bindings
        https://bugs.webkit.org/show_bug.cgi?id=123663

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_head_element_get_profile):
        (webkit_dom_html_head_element_set_profile):
        (webkit_dom_processing_instruction_get_data):
        (webkit_dom_processing_instruction_set_data):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:

2013-11-05  Zan Dobersek  <zdobersek@igalia.com>

        Main thread tasks in ThreadableBlobRegistry should use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=122946

        Reviewed by Darin Adler.

        The new BlobRegistryContext objects don't have to be adopted into OwnPtr and then have OwnPtr's leaked pointer
        passed into the WTF::callOnMainThread call - the pointer to the new heap-allocated object is passed in directly,
        with the object ending up being managed by std::unique_ptr in the designated main thread task.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::registerBlobURLTask):
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::registerBlobURLFromTask):
        (WebCore::unregisterBlobURLTask):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):

2013-11-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CSS] Enable css-image-orientation on EFL and GTK ports.
        https://bugs.webkit.org/show_bug.cgi?id=123698

        Reviewed by Beth Dakin.

        r157909 added wrong early return for css-image-orientation. It causes about 20 regressions in layout test
        when enabling css-image-orientation. This fixes those wrong implementation as well as enables it on EFL
        and GTK ports by default.

        Test: fast/css/image-orientation/image-orientation.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateSize):

2013-11-05  Andreas Kling  <akling@apple.com>

        RenderEmbeddedObject shouldn't know about fallback content.
        <https://webkit.org/b/123781>

        Stop caching the presence of fallback (DOM) content in a flag on
        RenderEmbeddedObject and have SubframeLoader fetch it directly from
        HTMLObjectElement instead.

        Also made SubframeLoader::requestObject() take the owner element
        by reference since we don't support owner-less embedded objects.

        Reviewed by Antti Koivisto.

2013-11-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Remove NATIVE_FULLSCREEN_VIDEO support
        https://bugs.webkit.org/show_bug.cgi?id=123437

        Reviewed by Philippe Normand.

        Removed some dead code as no GStreamer port is using the native
        fullscreen video support.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake: Removed compilation of deleted files.
        * platform/graphics/MediaPlayer.h: Removed structures related to
        GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp: Removed.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.h: Removed.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Removed.
        * platform/graphics/gstreamer/GStreamerGWorld.h: Removed.
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: Removed
        gst/video/video.h include.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::platformMedia):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Removed code related to GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gstreamer/PlatformVideoWindow.h: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowMac.mm: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowNix.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h: Removed.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):
        (webkitVideoSinkNew):
        * platform/graphics/gstreamer/VideoSinkGStreamer.h: Removed code
        related to GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gtk/FullscreenVideoControllerGtk.cpp: Removed.
        * platform/graphics/gtk/FullscreenVideoControllerGtk.h: Removed.

2013-11-05  Andreas Kling  <akling@apple.com>

        Remove RenderWidget::viewCleared().
        <https://webkit.org/b/123777>

        This was some ancient hand-waving code from the KHTML era.

        It was obviously confused (e.g RenderEmbeddedObject trying to handle
        iframe owners, even though that setup is impossible.)

        Reviewed by Anders Carlsson.

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: Split backend Cursors and Transactions into their own files
        https://bugs.webkit.org/show_bug.cgi?id=123789

        Reviewed by Alexey Proskuryakov.

        No new tests (Rename, no change in behavior).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h:
        (WebCore::IDBBackingStoreCursorInterface::~IDBBackingStoreCursorInterface):

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h: Added.
        (WebCore::IDBBackingStoreTransactionInterface::~IDBBackingStoreTransactionInterface):

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/IDBIndexWriter.cpp:
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h:

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::createCursorBackend):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.cpp: Added.
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):
        (WebCore::IDBBackingStoreCursorLevelDB::firstSeek):
        (WebCore::IDBBackingStoreCursorLevelDB::advance):
        (WebCore::IDBBackingStoreCursorLevelDB::continueFunction):
        (WebCore::IDBBackingStoreCursorLevelDB::haveEnteredRange):
        (WebCore::IDBBackingStoreCursorLevelDB::isPastBounds):
        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h: Added.
        (WebCore::IDBBackingStoreCursorLevelDB::~IDBBackingStoreCursorLevelDB):
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::compareIndexKeys):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::findGreatestKeyLessThanOrEqual):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreCursorImpl::create):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
 
       * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp: Added.
        (WebCore::IDBBackingStoreTransactionLevelDB::IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::begin):
        (WebCore::IDBBackingStoreTransactionLevelDB::commit):
        (WebCore::IDBBackingStoreTransactionLevelDB::rollback):
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-04  Zalan Bujtas  <zalan@apple.com>

        Do not call setFrameRect on Widget unless its boundaries changed.
        https://bugs.webkit.org/show_bug.cgi?id=123781

        Reviewed by Andreas Kling.

        Call Widget:setFrameRect only when the frame's rect actually changes. It also
        cleans up the related weak reference code a bit.
        
        Covered by existing tests.

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

2013-11-04  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/html] remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123740

        Reviewed by Darin Adler.

        Removing redundant headers.

        * html/BaseDateAndTimeInputType.cpp:
        * html/ColorInputType.cpp:
        * html/DOMFormData.cpp:
        * html/DOMURL.cpp:
        * html/DateInputType.cpp:
        * html/DateTimeInputType.cpp:
        * html/DateTimeLocalInputType.cpp:
        * html/FTPDirectoryDocument.cpp:
        * html/FileInputType.cpp:
        * html/FormController.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAreaElement.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCollection.cpp:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLFormControlsCollection.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLLegendElement.cpp:
        * html/HTMLMapElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTemplateElement.cpp:
        * html/HTMLVideoElement.cpp:
        * html/HTMLViewSourceDocument.cpp:
        * html/MediaController.cpp:
        * html/MediaKeyEvent.cpp:
        * html/MonthInputType.cpp:
        * html/RangeInputType.cpp:
        * html/StepRange.cpp:
        * html/TextFieldInputType.cpp:
        * html/TimeInputType.cpp:
        * html/WeekInputType.cpp:
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasStyle.cpp:
        * html/canvas/OESVertexArrayObject.cpp:
        * html/parser/BackgroundHTMLParser.cpp:
        * html/parser/CSSPreloadScanner.cpp:
        * html/parser/CompactHTMLToken.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLElementStack.cpp:
        * html/parser/HTMLFormattingElementList.cpp:
        * html/parser/HTMLMetaCharsetParser.cpp:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/HTMLPreloadScanner.cpp:
        * html/parser/HTMLTokenizer.cpp:
        * html/parser/HTMLTreeBuilder.cpp:
        * html/parser/HTMLTreeBuilderSimulator.cpp:
        * html/parser/HTMLViewSourceParser.cpp:
        * html/parser/TextDocumentParser.cpp:
        * html/parser/XSSAuditor.cpp:
        * html/shadow/ContentDistributor.cpp:
        * html/shadow/InsertionPoint.cpp:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/MediaControlsBlackBerry.cpp:
        * html/shadow/MediaControlsGtk.cpp:
        * html/shadow/SliderThumbElement.cpp:
        * html/track/AudioTrack.cpp:
        * html/track/InbandGenericTextTrack.cpp:
        * html/track/InbandTextTrack.cpp:
        * html/track/InbandWebVTTTextTrack.cpp:
        * html/track/TextTrack.cpp:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackRegion.cpp:
        * html/track/TrackListBase.cpp:
        * html/track/VideoTrack.cpp:
        * html/track/WebVTTParser.cpp:

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: deleteDatabase() interface should be asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=123787

        Reviewed by Tim Horton.

        No new tests (No behavior change for a tested port).

        deleteDatabase now has no return value, but calls back to a bool function:
        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::deleteDatabase):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        Refactor to account for the new async deleteDatabase:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabaseAsync):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

2013-11-04  Brady Eidson  <beidson@apple.com>

        Add Modules/indexeddb/leveldb to the WebCore.xcodeproj

        Rubberstamped by Andreas Kling.

        This will make hacking on IDB much easier for Mac developers as they won’t have
        to constantly add and then subtract the leveldb subdirectory.

        The USE(LEVELDB) flag is still disabled so these files won’t actually build by default.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-04  Brady Eidson  <beidson@apple.com>

        Address review feedback I forgot to commit in r158641

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingOpenCalls):

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: Make opening/establishing a database asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=123775

        Reviewed by Andreas Kling.

        No new tests (No behavior change for a tested port).

        * Modules/indexeddb/IDBBackingStoreInterface.h: Add getOrEstablishIDBDatabaseMetadata with a callback,
          removing getIDBDatabaseMetaData, getObjectStores, and createIDBDatabaseMetaData in the process.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::getOrEstablishIDBDatabaseMetadata): Adapted from getIDBDatabaseMetaData,
          implement the asynchronous interface in terms of other LevelDB methods, always calling back synchronously.
        (WebCore::IDBBackingStoreLevelDB::createIDBDatabaseMetaData):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::create):
        (WebCore::IDBDatabaseBackendImpl::openInternalAsync): Broken off from openInternal.
        (WebCore::IDBDatabaseBackendImpl::didOpenInternalAsync): Broken off from openInternal.
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::processPendingOpenCalls): Broken off to allow didOpenInternalAsync
          to perform open callbacks in the failure case.
        (WebCore::IDBDatabaseBackendImpl::openConnection): Always queue open connection calls, then immediately processPendingCalls.
        (WebCore::IDBDatabaseBackendImpl::openConnectionInternal): Actually perform open connection calls.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:


2013-11-04  Andreas Kling  <akling@apple.com>

        CTTE: RenderFrameBase's widget is always a FrameView.
        <https://webkit.org/b/123771>

        Delete widget() from RenderFrameBase and supplant a childView()
        that returns FrameView*. Strip away unnecessary casts and asserts.

        Reviewed by Antti Koivisto.

2013-11-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Content in region doesn't respect shape-outside after initial layout pass
        <https://webkit.org/b/114829>

        Although we set the size of a shape for shape-outside in RenderBlockFlow::insertFloatingObject based on the
        float's size, the actual height of the float is not always resolved at that point. (Look at cases when the shape
        has percentage based height or percentage based radius.) ShapeInfo::setShapeSize triggers a layout for 0 height
        value, which will be overriden later, when RenderBlockFlow::positionNewFloats sets the actual size of the float (shape).
        Thus it doesn't make sense to set the shape's size in insertFloatingObject and run those extra unnecessary layout passes,
        since it'll be overriden anyways. I moved the shape size setting logic into RenderBlockFlow::positionNewFloats.

        The problem showed up when we had a shape-outside ellipse with percentage based radius, and we inserted the content
        with JavaScript into a region flow. The content has been layed out based on the 0 border radius, and relayout hasn't been
        triggered when it flew into the flow. This change sets the shape size only when we already have the height of the float,
        so the radius(es) can be resolved correctly, thus no unnecessary layout passes will happen and the layout will be correct as well.

        Reviewed by David Hyatt.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-layout-after-initial-layout-pass.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertFloatingObject): Remove setting the size of the shape.
        (WebCore::RenderBlockFlow::positionNewFloats): Set the size of the shape here.

2013-11-04  Samuel White  <samuel_white@apple.com>

        AX: AXShowMenu doesn't always work.
        https://bugs.webkit.org/show_bug.cgi?id=123649

        Reviewed by Chris Fleizach.

        No new tests, the change occurs in a code path that forces the context menu to show which
        locks up DRT if we try to test it (platform menu is shown). The change itself gives the mouse
        event handler a chance to handle our platform mouse event BEFORE the event ends up in the show
        context menu machinery. This is necessary because without it, the element will not become
        focused. Without focus, accessibility shows different/less menu items than a mouse click. The
        end result is that context menus shown via accessibility are consistent with menus shown via click.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenuAt):

2013-11-04  Jeffrey Pfau  <jpfau@apple.com>

        SMIL timers can still fire after the containing document has been torn down
        <https://webkit.org/b/123291>

        Reviewed by Darin Adler.

        Ensure that the timers get paused when the document is preparing to be torn down.

        Test: svg/animations/smil-timers-not-disabled-crash.html

        * dom/Document.cpp:
        (WebCore::Document::dropChildren):
        (WebCore::Document::commonTeardown):
        (WebCore::Document::prepareForDestruction):
        * dom/Document.h:

2013-11-04  Brendan Long  <b.long@cablelabs.com>

        Move duplicate code in TrackPrivate classes to a common base class
        https://bugs.webkit.org/show_bug.cgi?id=123619

        Reviewed by Darin Adler.

        No new tests because this is just refactoring.

        * GNUmakefile.list.am: Add TrackPrivateBase.
        * WebCore.vcxproj/WebCore.vcxproj: Same.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::inbandTrackIndex): Renamed audioTrackIndex() to trackIndex().
        (WebCore::AudioTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::AudioTrack::languageChanged): Same.
        (WebCore::AudioTrack::willRemove): Same.
        * html/track/AudioTrack.h: Update TrackPrivateBaseClient function signatures.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::inbandTrackIndex): Renamed textTrackIndex() to trackIndex().
        (WebCore::InbandTextTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::InbandTextTrack::languageChanged): Same.
        (WebCore::InbandTextTrack::willRemove): Same.
        * html/track/InbandTextTrack.h: Update TrackPrivateBaseClient function signatures.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::inbandTrackIndex): Renamed videoTrackIndex() to trackIndex().
        (WebCore::VideoTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::VideoTrack::languageChanged): Same.
        (WebCore::VideoTrack::willRemove): Same.
        * html/track/VideoTrack.h: Update TrackPrivateBaseClient function signatures.
        * platform/graphics/AudioTrackPrivate.h: Remove code that was moved to TrackPrivateBase.
        * platform/graphics/InbandTextTrackPrivate.h: Same.
        * platform/graphics/InbandTextTrackPrivateClient.h: Same.
        * platform/graphics/VideoTrackPrivate.h: Same.
        * platform/graphics/TrackPrivateBase.h: Refactored out duplicate code in AudioTrackPrivate, InbandTextTrackPrivate and VideoTrackPrivate.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: Renamed textTrackIndex() to trackIndex().
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h: Same.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Renamed audioTrackIndex() to trackIndex().
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Renamed videoTrackIndex() to trackIndex90.

2013-11-04  Andreas Kling  <akling@apple.com>

        FrameView destructor is worried about being retained by a renderer.
        <https://webkit.org/b/123763>

        There's no way we can be in ~FrameView() while also being owned by
        a RenderWidget. Remove some overly paranoid code that was making sure
        the renderer didn't have a reference on us.

        Reviewed by Anders Carlsson.

2013-11-04  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r158311): media/media-fragments/TC0054.html and TC0061.html hit assertions
        https://bugs.webkit.org/show_bug.cgi?id=123555

        Reviewed by Darin Adler.

        No new tests, covered by existing tests.

        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseFragments): Don't add a fragment with empty key or value as
            they will not processed.
        (WebCore::MediaFragmentURIParser::parseNPTFragment): Remove excess whitespace.

2013-11-04  Patrick Gansterer  <paroga@webkit.org>

        Remove code duplications in createFontCustomPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=123706

        Reviewed by Darin Adler.

        Move OpenTypeSanitizer and WOFF handling from the port specific
        implementations in createFontCustomPlatformData() into the only
        caller of this function CachedFont::ensureCustomFontData().
        Also change the parameter passing the SharedBuffer from a
        pointer to a reference since it is never null.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        * platform/graphics/blackberry/FontCustomPlatformData.h:
        * platform/graphics/blackberry/FontCustomPlatformDataBlackBerry.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h:

2013-11-04  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing MediaStreamDescriptor addSource and addTrack methods
        https://bugs.webkit.org/show_bug.cgi?id=123755

        Reviewed by Eric Carlson.

        We must store the track and source that is passed as parameter in a RefPtr,
        otherwise we will refer to a null pointer.

        No new tests needed.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addSource):
        (WebCore::MediaStreamDescriptor::addTrack):

2013-11-04  Tim Horton  <timothy_horton@apple.com>

        Remove PlatformCALayer::playerLayer
        https://bugs.webkit.org/show_bug.cgi?id=123764

        Reviewed by Sam Weinig.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::clone):
        Remove playerLayer(), fold it into clone().

2013-11-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Mail attachments at the start of an email are not output by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=123697

        Reviewed by Ryosuke Niwa.

        VoiceOver is expecting that "replaced elements" (attachments in a Mail message in this case) to be
        represented by the replacement character when asking for a stringForRange.

        However, when that replaced element is at the beginning of the document, the logic does not work because
        there is a few code places that will take that first Position and advance it forward, not accounting for replaced elements.
        When using the TextIterator normally, it does account for these, so that's why it's only affecting as at the beginning of the document.

        Also a "replaced element" can be more than just renderer->isReplaced(), hence the externing of the isRendererReplacedElement method
        and using that it in pertinent places.

        Tests: platform/mac/accessibility/object-replacement-with-no-rendered-children-at-node-start.html
               platform/mac/accessibility/object-replacement-with-rendered-children-at-node-start.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::replacedNodeNeedsCharacter):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (nsStringForReplacedNode):
        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        * dom/Range.cpp:
        (WebCore::Range::firstNode):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/TextIterator.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        Use RenderAncestorIterator in a couple of places.
        <https://webkit.org/b/123725>

        Take the ancestorsOfType<RenderMoo>() thingy out for a spin.

        Found a bunch of parent chain walking loops that were really just
        looking for the first ancestor renderer of a certain type.
        They were a perfect fit for this pattern:

            if (auto svgRoot = ancestorsOfType<RenderSVGRoot>(renderer).first())
                svgRoot->shakeMoneyMaker();

        Quite a bit clearer than the previous:

            for (auto ancestor = renderer.parent(); ancestor; ancestor = ancestor->parent()) {
                if (ancestor->isSVGRoot())
                    toRenderSVGRoot(ancestor)->makeMoneyShaker();
            }

        Reviewed by Antti Koivisto.

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a SourceBufferPrivateClient interface for platform -> html communication.
        https://bugs.webkit.org/show_bug.cgi?id=123373

        Reviewed by Eric Carlson.

        To enable communication between SourceBuffer and SourceBufferPrivate without introducing
        layering violations, add a new interface class SourceBufferPrivateInterface from which
        SourceBuffer will inherit.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer): Set the private's client.
        (WebCore::SourceBuffer::~SourceBuffer): Clear the private's client.
        (WebCore::SourceBuffer::sourceBufferPrivateDidEndStream): Added stub.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Hinno.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateHasAudio): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateHasVideo): Ditto.
        * Modules/mediasource/SourceBuffer.h:
        * WebCore.xcodeproj/project.pbxproj: Add new files to project.
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/SourceBufferPrivateClient.h: Added.
        (WebCore::SourceBufferPrivateClient::~SourceBufferPrivateClient): Empty destructor.

2013-11-01  Jer Noble  <jer.noble@apple.com>

        [PluginProxy] Add a setting to disable video plugin proxy support in HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=123621

        Reviewed by Eric Carlson.

        Add a new Setting which will disable the video plugin proxy. Enable support for AVFoundation
        in iOS (which requries fixing a few compile errors resulting from classes and methods which
        are not available on iOS.

        * WebCore.exp.in: Export wkAVAssetResolvedURL.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement): Make conditional upon
            new isVideoPluginProxyEnabled() setting.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createRenderer): Ditto.
        (WebCore::HTMLVideoElement::attach): Ditto.
        (WebCore::HTMLVideoElement::parseAttribute): Ditto.
        (HTMLVideoElement::setDisplayMode): Ditto.
        * html/HTMLVideoElement.h:
        * page/Settings.cpp:
        (WebCore::Settings::setVideoPluginProxyEnabled): Simple setter.
        * page/Settings.h:
        (WebCore::Settings::isVideoPluginProxyEnabled): Simple getter.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Conditionally add MediaPlayerPrivateIOS and always add
            MediaPlayerPriateAVFoundationObjC.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::deliverNotification): Add default implementation.
        (WebCore::MediaPlayerPrivateInterface::setMediaPlayerProxy): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Use new
            HAS_ and USE_ macros instead of __MAC_OS_MIN_VERNSION_REQUIRED.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasContextRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createContextVideoRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Use cachedCGColor instead
            of CGColorGetConstantColor.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput): Use CVPixelBuffer pixel
            format constant instead of QuickDraw constant.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createPixelBuffer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput): Draw to intermediary
            CGImage on iOS.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        REGRESSION(r158561): fast/block/float/float-append-child-crash.html asserting.

        The non-const ancestor iterator was walking siblings, not ancestors.

        Rubber-stamped by Antti Koivisto.

2013-10-31  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Disclaim support for MSE in AVFoundation and QTKit engines
        https://bugs.webkit.org/show_bug.cgi?id=123593

        Reviewed by Eric Carlson.

        Immediately fail if asked to load a Media Source in engines which do not support
        them.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::load):
        (WebCore::MediaPlayerPrivateQTKit::supportsType):

2013-11-04  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] image valued shape element margin can cause an ASSERT fail
        https://bugs.webkit.org/show_bug.cgi?id=123743

        Reviewed by Andreas Kling.

        When margin-top is specified for a shape's element, the Y coordinates passed
        to RasterShapeIntervals::getExcludedIntervals() may be negative. This is
        because the incoming logical coordinates are relative to the content or
        padding box, depending on the box-sizing property. The RasterShape::getExcludedIntervals()
        method now clips the incoming Y coordinates to the shape's bounds before
        accessing the shape's intervals.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-margin-crash.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::getExcludedIntervals):

2013-11-04  Antti Koivisto  <antti@apple.com>

        Make LiveNodeListBase use Elements instead of Nodes
        https://bugs.webkit.org/show_bug.cgi?id=123745

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::firstElementChild):
        (WebCore::Element::lastElementChild):
        
            Switch to correct calls. ElementTraversal::previous and previousChild are no longer equivalent.

        * dom/ElementTraversal.h:
        (WebCore::::lastWithinTemplate):
        (WebCore::::previousTemplate):
        
            Fix ElementTraversal::lastWithin and previous. They had no real clients and didn't work correctly.
            With LiveNodeListBase starting to use these they get excellent test coverage.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeListBase::invalidateCache):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeListBase::LiveNodeListBase):
        (WebCore::LiveNodeListBase::isElementCacheValid):
        (WebCore::LiveNodeListBase::cachedElement):
        (WebCore::LiveNodeListBase::cachedElementOffset):
        (WebCore::LiveNodeListBase::setCachedElement):
        
            Make the cache Element based.
            Switch to Elements in all helpers.
            Rename item -> element for clarity.

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodePointer::moveToPrevious):
        (WebCore::NodeIterator::updateForNodeRemoval):
        
            This code expected the old inconsistent NodeTraversal::previous behavior where the traversal includes
            the root as the last item. Drop the stayWithin parameter and handle the one case where it is needed here.

        * dom/NodeTraversal.cpp:
        (WebCore::NodeTraversal::last):
        (WebCore::NodeTraversal::deepLastChild):
        * dom/NodeTraversal.h:
        
            Support ElementTraversal::previous/lastWithin.

        (WebCore::NodeTraversal::previous):
        
            This was slightly wrong too.

        * html/HTMLCollection.cpp:
        (WebCore::previousElement):
        (WebCore::lastElement):
        (WebCore::LiveNodeListBase::iterateForPreviousElement):
        (WebCore::LiveNodeListBase::itemBefore):
        (WebCore::LiveNodeListBase::isLastItemCloserThanLastOrCachedItem):
        (WebCore::LiveNodeListBase::isFirstItemCloserThanCachedItem):
        (WebCore::LiveNodeListBase::setCachedElement):
        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::elementBeforeOrAfterCachedElement):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::isEmpty):
        (WebCore::HTMLCollection::hasExactlyOneItem):

2013-11-04  Michael Saboff  <msaboff@apple.com>

        Eliminate HostCall bit from JSC Stack CallerFrame
        https://bugs.webkit.org/show_bug.cgi?id=123642

        Reviewed by Geoffrey Garen.

        Updated JavaScript stack walking as a result of the corresponding changes made in
        JavaScriptCore.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::returnEvent):
        (WebCore::ScriptDebugServer::didExecuteProgram):

2013-11-04  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Fix support for shape-outside on a float with padding
        https://bugs.webkit.org/show_bug.cgi?id=123590

        Reviewed by Alexandru Chiculita.

        The line top was being improperly converted to the coordinates of the
        shape, causing the shape to be positioned incorrectly when the float
        had padding. This fixes that problem.

        No new tests, covered by updates to existing ones.

        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):

2013-11-04  Alexey Proskuryakov  <ap@apple.com>

        Implement generateKey for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123669

        Reviewed by Dan Bernstein.

        Tests: crypto/subtle/aes-cbc-generate-key.html
               crypto/subtle/hmac-generate-key.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams): Added bindings for AesKeyGenParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Handle
        algorithms that generate AES and HMAC keys.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::generateKey): Added.

        * crypto/CryptoAlgorithmAesKeyGenParams.h: Added.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::randomData):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyMac.cpp: Added
        Expose a function that produces random data for symmetric crypto keys. Cross-platform
        implementation uses ARC4 code from WTF, while Mac uses a system function that
        provides a FIPS validated random number generator.

        * crypto/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::generate):
        * crypto/CryptoKeyAES.h:
        Added a function that creates AES keys.

        * crypto/SubtleCrypto.idl: Added generateKey.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey): Added.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey): Added.

        * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyHMAC.h:
        Added a function that creates HMAC keys.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Removed generateKey stub, the implementation
        ended up in cross-platform file.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Ditto.

2013-11-04  Daniel Bates  <dabates@apple.com>

        Revert SetCGFontRenderingMode() build fix for Chromium Mac
        https://bugs.webkit.org/show_bug.cgi?id=123633

        Reviewed by Darin Adler.

        Reverts <http://trac.webkit.org/changeset/134380>, which
        was a Chromium Mac build fix for <http://trac.webkit.org/changeset/134348>
        (https://bugs.webkit.org/show_bug.cgi?id=101787). Chromium doesn't
        build against top-of-tree WebKit.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-11-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158526.
        http://trac.webkit.org/changeset/158526
        https://bugs.webkit.org/show_bug.cgi?id=123744

        it broke the build (Requested by jessieberlin on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        * crypto/CryptoAlgorithmAesKeyGenParams.h: Removed.
        * crypto/CryptoKey.cpp:
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyAES.cpp:
        * crypto/CryptoKeyAES.h:
        * crypto/CryptoKeyMac.cpp: Removed.
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):

2013-11-04  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [Texmap] Remove redundant calls in CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=123737

        Reviewed by Noam Rosenthal.

        Removing unused code left after few refactoring patches.

        No new tests. Covered by existing ones.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):

2013-11-04  Andreas Kling  <akling@apple.com>

        CSSPrimitiveValue color constructors should return PassRef.
        <https://webkit.org/b/123728>

        Make CSSPrimitiveValue::createColor() and the corresponding
        CSSValuePool helper functions return PassRef<CSSPrimitiveValue>.

        Also made CSSValuePool slightly less stupid when hitting the upper
        size limit on the color value cache: instead of throwing out cache
        and rebuilding it from scratch, just remove one value at random.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Some more RenderChildIterator deployment.
        <https://webkit.org/b/123735>

        Convert another handful of loops to use childrenOfType<RenderFoo>
        iterators, mostly for skipping over uninteresting text renderers.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        LabelsNodeList always is always rooted at a LabelableElement.
        <https://webkit.org/b/123730>

        Tighten up LabelsNodeList by enforcing that it's only rooted to
        a LabelableElement. Also marked the class FINAL and made its
        create() helper return PassRef.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        REGRESSION: RenderStyle is leaked when not creating renderer for display:none
        <https://webkit.org/b/123726>

        Explicitly drop the RenderStyle reference in RenderElement::createFor
        if we decide to not create any renderer.

        Reviewed by Antti Koivisto.

        Test: fast/css/renderstyle-leak-with-display-none.html

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

2013-11-04  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/dom] Remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123720

        Reviewed by Andreas Kling.

        Removing redundant headers from dom related cpp files.

        * dom/Attr.cpp:
        * dom/CharacterData.cpp:
        * dom/ChildListMutationScope.cpp:
        * dom/ChildNodeList.cpp:
        * dom/ContainerNode.cpp:
        * dom/ContainerNodeAlgorithms.cpp:
        * dom/DOMNamedFlowCollection.cpp:
        * dom/DatasetDOMStringMap.cpp:
        * dom/Document.cpp:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentMarkerController.cpp:
        * dom/DocumentOrderedMap.cpp:
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/Element.cpp:
        * dom/ElementRareData.cpp:
        * dom/Event.cpp:
        * dom/EventContext.cpp:
        * dom/EventDispatcher.cpp:
        * dom/EventTarget.cpp:
        * dom/ExceptionBase.cpp:
        * dom/FocusEvent.cpp:
        * dom/InlineStyleSheetOwner.cpp:
        * dom/KeyboardEvent.cpp:
        * dom/LiveNodeList.cpp:
        * dom/MessageEvent.cpp:
        * dom/MessagePort.cpp:
        * dom/MouseRelatedEvent.cpp:
        * dom/MutationEvent.cpp:
        * dom/MutationObserver.cpp:
        * dom/MutationObserverInterestGroup.cpp:
        * dom/MutationObserverRegistration.cpp:
        * dom/MutationRecord.cpp:
        * dom/NameNodeList.cpp:
        * dom/NamedFlowCollection.cpp:
        * dom/NamedNodeMap.cpp:
        * dom/Node.cpp:
        * dom/NodeIterator.cpp:
        * dom/NodeTraversal.cpp:
        * dom/PositionIterator.cpp:
        * dom/ProcessingInstruction.cpp:
        * dom/Range.cpp:
        * dom/RegisteredEventListener.cpp:
        * dom/ScopedEventQueue.cpp:
        * dom/ScriptElement.cpp:
        * dom/ScriptRunner.cpp:
        * dom/SelectorQuery.cpp:
        * dom/ShadowRoot.cpp:
        * dom/StyledElement.cpp:
        * dom/TagNodeList.cpp:
        * dom/Text.cpp:
        * dom/TextEvent.cpp:
        * dom/TouchEvent.cpp:
        * dom/TreeScope.cpp:
        * dom/TreeScopeAdopter.cpp:
        * dom/TreeWalker.cpp:
        * dom/UIEvent.cpp:
        * dom/UserActionElementSet.cpp:
        * dom/UserTypingGestureIndicator.cpp:
        * dom/VisitedLinkState.cpp:
        * dom/WebKitNamedFlow.cpp:

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLAllCollection is always rooted at a Document.
        <https://webkit.org/b/123724>

        Tighten up HTMLAllCollection by making the constructor take a
        Document& instead of a ContainerNode&. Drive-by application of
        FINAL and PassRef also happened.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Make more CSSValue subclass constructors return PassRef.
        <https://webkit.org/b/123731>

        Make the constructor helpers for the following classes return
        PassRef instead of PassRefPtr:

            - CSSFontValue
            - CSSImageSetValue
            - CSSUnicodeRangeValue
            - WebKitCSSArrayFunctionValue
            - WebKitCSSFilterValue
            - WebKitCSSMatFunctionValue
            - WebKitCSSMixFunctionValue
            - WebKitCSSShaderValue
            - WebKitCSSTransformValue

        Reviewed by Antti Koivisto.

2013-11-04  Jozsef Berta  <jberta@inf.u-szeged.hu>

        Buildfix after r158182 for GCC 4.6
        https://bugs.webkit.org/show_bug.cgi?id=123442

        Reviewed by Csaba Osztrogonác.

        Added explicit "friend class", because  GCC 4.6 doesn't support extended friend declaration (c++11)

        * dom/ScopedEventQueue.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLTableRowsCollection is always rooted at a HTMLTableElement.
        <https://webkit.org/b/123721>

        Tighten up HTMLTableRowsCollection by making the create() helper
        take a HTMLTableElement& and adding a HTMLSelectElement& getter.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLNameCollection and friends are always rooted at a Document.
        <https://webkit.org/b/123722>

        Tighten WindowNameCollection and DocumentNameCollection by making
        their constructors take a Document&, and add a slightly better
        document() than the one we inherit from LiveNodeListBase.

        Also marked the classes FINAL and made create() helpers return
        PassRef instead of PassRefPtr.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Add an ancestor renderer iterator.
        <https://webkit.org/b/123718>

        Add ancestor iterators for renderers, analogous to element ancestor
        iterators. They walk the chain of parent renderers, stopping at each
        ancestor of a certain type.

        Just like child renderer iterators, this requires isRendererOfType()
        to be implemented for the targeted renderer class.

        You use them like this:

        auto frameSets = ancestorsOfType<RenderFrameSet>(*this);
        for (auto frameSet = frameSets.begin(), end = frameSets.end(); frameSet != end; ++frameSet)
            frameSet->thisOrThat();

        To complete the patch, I put them to use in a couple of random places.

        Reviewed by Antti Koivisto.

2013-11-04  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use auto keyword to clean-up for loops
        https://bugs.webkit.org/show_bug.cgi?id=123699

        Reviewed by Anders Carlsson.

        Start using auto keyword for loops.
        Also, since region breaks (forced breaks) can be added only on boxes,
        i changed RenderFlowThread::addForcedRegionBreak to use a RenderBox* instead of RenderObject*.

        No change in functionality, no new tests.

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName):
        (WebCore::FlowThreadController::styleDidChange):
        (WebCore::FlowThreadController::layoutRenderNamedFlowThreads):
        (WebCore::FlowThreadController::updateFlowThreadsChainIfNecessary):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingLayout):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingTwoStepLayout):
        (WebCore::FlowThreadController::resetFlowThreadsWithAutoHeightRegions):
        (WebCore::FlowThreadController::updateFlowThreadsIntoConstrainedPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoOverflowPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoMeasureContentPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoFinalPhase):
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        (WebCore::FlowThreadController::isAutoLogicalHeightRegionsCountConsistent):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant):
        (WebCore::RenderFlowThread::getLayerListForRegion):
        (WebCore::RenderFlowThread::updateLayerToRegionMappings):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        (WebCore::RenderFlowThread::regionInRange):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::markRegionsForOverflowLayoutIfNeeded):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        (WebCore::RenderFlowThread::collectLayerFragments):
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        (WebCore::RenderFlowThread::addRegionsVisualEffectOverflow):
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsLayoutOverflow):
        (WebCore::RenderFlowThread::clearRegionsOverflow):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::addRegionToList):
        (WebCore::RenderNamedFlowThread::computeOversetStateForRegions):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):

2013-11-03  Zan Dobersek  <zdobersek@igalia.com>

        PingLoader objects unnecessarily pass through OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=122942

        Reviewed by Darin Adler.

        There's no need to store new PingLoader objects into an OwnPtr just to leak them out a few lines later
        into an unused variable. New objects are created through a new helper method and then left unmanaged as
        they're guaranteed to destroy themselves when they receive a response of any kind.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage): Call the new createPingLoader method to spawn the PingLoader.
        (WebCore::PingLoader::sendPing): Ditto.
        (WebCore::PingLoader::sendViolationReport): Ditto.
        (WebCore::PingLoader::createPingLoader): A helper method that creates a new PingLoader object
        * loader/PingLoader.h: Declare the new PingLoader::createPingLoader method.

2013-11-03  Andreas Kling  <akling@apple.com>

        HTMLOptionsCollection is always rooted at a HTMLSelectElement.
        <https://webkit.org/b/123719>

        Tighten up HTMLOptionsCollection by making the constructor take
        a HTMLSelectElement& and adding a HTMLSelectElement& getter instead
        of casting all over the place. Removed now-pointless assertions.

        Reviewed by Sam Weinig.

2013-11-03  Andreas Kling  <akling@apple.com>

        RenderTextFragment: Tighten first-letter logic.
        <https://webkit.org/b/123714>

        Reviewed by Antti Koivisto.

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

            Use iterator helper to find first RenderText child.

        (WebCore::TextIterator::handleTextNodeFirstLetter):

            Tightening through type inference.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        * rendering/RenderTextFragment.h:

            The first letter renderer is always a RenderBoxModelObject,
            so make the code deal in that instead of RenderObject.

        * rendering/RenderChildIterator.h:
        (WebCore::RenderChildIteratorAdapter::first):
        (WebCore::RenderChildIteratorAdapter::last):

            Remove excess ampersands that were keeping this from building.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSPrimitiveValue identifier constructors should return PassRef.
        <https://webkit.org/b/123712>

        Make CSSPrimitiveValue::createIdentifier() and the corresponding
        CSSValuePool helper return PassRef<CSSPrimitiveValue>.

        Reviewed by Antti Koivisto.

2013-11-03  Andreas Kling  <akling@apple.com>

        Use RenderChildIterator in two more loops.
        <https://webkit.org/b/123713>

        Switch two more renderer child traversal loops to childrenOfType.

        Reviewed by Antti Koivisto.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSShadowValue constructor should return PassRef.
        <https://webkit.org/b/123711>

        Make CSSShadowValue::create() return a PassRef since it will never
        return null.

        Reviewed by Sam Weinig.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSLineBoxContainValue constructor should return PassRef.
        <https://webkit.org/b/123710>

        Make CSSLineBoxContainValue::create() return a PassRef since it
        will never return null.

        Reviewed by Sam Weinig.

2013-11-03  Antti Koivisto  <antti@apple.com>

        LiveNodeLists should have non-null ContainerNode as root
        https://bugs.webkit.org/show_bug.cgi?id=123709

        Reviewed by Andreas Kling.

        After moving ChildNodeList off from LiveNodeList the root is now always at least a ContainerNode.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByTagNameNS):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        
            Also these move from Node to ContainerNode to make tighter typing work.

2013-11-03  Antti Koivisto  <antti@apple.com>

        Switch createContextualFragment to element iterator
        https://bugs.webkit.org/show_bug.cgi?id=123704

        Reviewed by Andreas Kling.

        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        
            Use type helpers instead of hasTagName

        * editing/markup.cpp:
        (WebCore::collectElementsToRemoveFromFragment):
        (WebCore::removeElementFromFragmentPreservingChildren):
        (WebCore::createContextualFragment):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        
            Use type helpers instead of hasTagName

        * html/HTMLTagNames.in:
        
            Generate type helpers for <html>.

2013-11-03  Antti Koivisto  <antti@apple.com>

        ChildNodeList should not be LiveNodeList
        https://bugs.webkit.org/show_bug.cgi?id=123708

        Reviewed by Sam Weinig.

        ChildNodeList is a poor fit to be a LiveNodeList. It is heavily special-cased. It is also
        the only subtype that returns non-Elements thus preventing tightening.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        
            Support new types.

        * dom/ChildNodeList.cpp:
        (WebCore::EmptyNodeList::~EmptyNodeList):
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::~ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::childFromFirst):
        (WebCore::childFromLast):
        (WebCore::ChildNodeList::nodeBeforeCached):
        (WebCore::ChildNodeList::nodeAfterCached):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::namedItem):
        (WebCore::ChildNodeList::invalidateCache):
        
            Implement the same caching optimizations as LiveNodeList with tighter, less generic code.

        * dom/ChildNodeList.h:
        
            Inherit ChildNodeList directly from NodeList.

            Add new EmptyNodeList type. This is only ever used if NodeList is requested for a non-container node.
            It allows tighter typing in ChildNodeList.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeListBase::LiveNodeListBase):
        (WebCore::LiveNodeListBase::~LiveNodeListBase):
        (WebCore::LiveNodeList::LiveNodeList):
        
            Remove ChildNodeList specific code and branches.

        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        
            Return EmptyNodeList for non-containers.

        * dom/NodeList.h:
        (WebCore::NodeList::~NodeList):
        (WebCore::NodeList::isLiveNodeList):
        (WebCore::NodeList::isChildNodeList):
        (WebCore::NodeList::isEmptyNodeList):
        
            For isReachableFromOpaqueRoots.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::ensureChildNodeList):
        (WebCore::NodeListsNodeData::removeChildNodeList):
        (WebCore::NodeListsNodeData::ensureEmptyChildNodeList):
        (WebCore::NodeListsNodeData::removeEmptyChildNodeList):
        (WebCore::NodeListsNodeData::NodeListsNodeData):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList):
        
            EmptyNodeList support.

        * html/CollectionType.h:
        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::isMatchingElement):
        (WebCore::LiveNodeListBase::itemBefore):
        (WebCore::LiveNodeListBase::traverseLiveNodeListFirstElement):
        (WebCore::LiveNodeListBase::traverseLiveNodeListForwardToOffset):
        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::itemBeforeOrAfterCachedItem):
        
            Remove ChildNodeList specific code and branches.

2013-11-03  Patrick Gansterer  <paroga@webkit.org>

        [WINCE] Replace OwnPtr with GDIObject
        https://bugs.webkit.org/show_bug.cgi?id=123670

        Reviewed by Anders Carlsson.

        * page/win/FrameGdiWin.cpp:
        (WebCore::imageFromRect):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontData::create):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::getScaledFontHandle):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        (WebCore::createBrush):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawRoundCorner):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::createHandle):
        (WebCore::SharedBitmap::draw):
        (WebCore::SharedBitmap::clipBitmap):
        (WebCore::drawPatternSimple):
        (WebCore::SharedBitmap::drawPattern):
        (WebCore::SharedBitmap::DCProvider::getDC):
        * platform/graphics/wince/SharedBitmap.h:

2013-11-03  Antti Koivisto  <antti@apple.com>

        Add helpers for partial descendant traversal to element iterators
        https://bugs.webkit.org/show_bug.cgi?id=123703

        Reviewed by Andreas Kling.

        * dom/ElementAncestorIterator.h:
        (WebCore::lineageOfType):
        
            lineageOfType definition didn't match the declaration.

        * dom/ElementDescendantIterator.h:
        (WebCore::::find):
        (WebCore::::from):
        
            Add find and from for getting begin iterator for partial traversals.

        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        (WebCore::FrameSelection::currentForm):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        (WebCore::HTMLFormElement::findClosestFormAncestor):
        
            Use them in a few places.

2013-11-03  Andreas Kling  <akling@apple.com>

        Inline RenderStyle functions for getting/setting pseudo style bits.
        <https://webkit.org/b/123702>

        hasPseudoStyle() actually shows up on html5-full-render.html,
        and it's pretty crazy to eat the cost of a function call just
        to do some basic bit twiddling.

        Reviewed by Antti Koivisto.

2013-11-03  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Remove HTMLMediaElement.initialTime
        https://bugs.webkit.org/show_bug.cgi?id=123572

        Reviewed by Eric Carlson.

        Patch based on one by: philipj@opera.com
        Blink review URL: https://codereview.chromium.org/35033002

        initialTime has been removed from the HTMLMediaElement.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_get_initial_time):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Added phony function.
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Removed HTMLMediaElement::initialTime.

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

        Implement generateKey for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123669

        Reviewed by Dan Bernstein.

        Tests: crypto/subtle/aes-cbc-generate-key.html
               crypto/subtle/hmac-generate-key.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams): Added bindings for AesKeyGenParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Handle
        algorithms that generate AES and HMAC keys.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::generateKey): Added.

        * crypto/CryptoAlgorithmAesKeyGenParams.h: Added.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::randomData):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyMac.cpp: Added
        Expose a function that produces random data for symmetric crypto keys. Cross-platform
        implementation uses ARC4 code from WTF, while Mac uses a system function that
        provides a FIPS validated random number generator.

        * crypto/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::generate):
        * crypto/CryptoKeyAES.h:
        Added a function that creates AES keys.

        * crypto/SubtleCrypto.idl: Added generateKey.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey): Added.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey): Added.

        * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyHMAC.h:
        Added a function that creates HMAC keys.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Removed generateKey stub, the implementation
        ended up in cross-platform file.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Ditto.

2013-11-02  Christophe Dumez  <ch.dumez@samsung.com>

        EnforceRange doesn't enforce range of a short
        https://bugs.webkit.org/show_bug.cgi?id=123661

        Reviewed by Alexey Proskuryakov.

        Handle Web IDL short / unsigned short types as per the
        specification:
        - http://www.w3.org/TR/WebIDL/#es-short
        - http://www.w3.org/TR/WebIDL/#es-unsigned-short

        Specifically, we used to treat short / unsigned short as 32bit
        integers, which was wrong. We now properly handle them as 16bit
        integers.

        No new tests, added test cases to js/dom/webidl-type-mapping.html.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toSmallerInt):
        (WebCore::toSmallerUInt):
        (WebCore::toInt8):
        (WebCore::toUInt8):
        (WebCore::toInt16):
        (WebCore::toUInt16):
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testShort):
        (WebCore::TypeConversions::setTestShort):
        (WebCore::TypeConversions::testEnforceRangeShort):
        (WebCore::TypeConversions::setTestEnforceRangeShort):
        (WebCore::TypeConversions::testUnsignedShort):
        (WebCore::TypeConversions::setTestUnsignedShort):
        (WebCore::TypeConversions::testEnforceRangeUnsignedShort):
        (WebCore::TypeConversions::setTestEnforceRangeUnsignedShort):
        * testing/TypeConversions.idl:

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Cleanup OpenTypeUtilities
        https://bugs.webkit.org/show_bug.cgi?id=123686

        Reviewed by Darin Adler.

        Merge the WinCE specific code into the general Windows code to
        make the compilation of WinCE port on WinNT easier.

        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameFont):
        (WebCore::renameAndActivateFont):
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

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

        CSSFontFaceSrcValue constructors should return PassRef.
        <https://webkit.org/b/123692>

        Make functions that return non-null CSSFontFaceSrcValues return
        PassRef instead of PassRefPtr. Tweak some call sites to be
        slightly more efficient.

        Reviewed by Anders Carlsson.

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

        CSSStyleSheet::contents() should return a reference.
        <https://webkit.org/b/123689>

        Make CSSStyleSheet::contents() return a StyleSheetContents& instead
        of a pointer. The object was already stored in a Ref.

        Reviewed by Anders Carlsson.

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

        CSSReflectValue constructor should return PassRef.
        <https://webkit.org/b/123963>

        Make CSSReflectValue::create() return a PassRef. Tweak one call
        site to be slightly more efficient.

        Reviewed by Anders Carlsson.

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

        CSSFontFeatureValue constructor should return PassRef.
        <https://webkit.org/b/123691>

        Make CSSFontFeatureValue::create() return PassRef, since it never
        returns null. Tweak one call site to be slightly more efficient.

        Reviewed by Anders Carlsson.

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

        Tighten typing in SVGResources::buildCachedResources().
        <https://webkit.org/b/123690>

        Make this function take a RenderElement&/SVGRenderStyle& pair instead
        of a RenderObject*/SVGRenderStyle* pair. Also tweaked the code a bit,
        removing ampersands and asserts as appropriate.

        Reviewed by Anders Carlsson.

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

        CSSImageValue constructors should return PassRef.
        <https://webkit.org/b/123688>

        Make the CSSImageValue::create() helpers return PassRef.
        Tightened call sites to avoid null checks and destructor calls.

        Reviewed by Anders Carlsson.

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Fix compilation of SynchronousLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=123676

        Reviewed by Darin Adler.

        Assign a ResourceRequest varibale an empty ResourceRequest instead of 0.
        The current solution only works for ports which can create a
        ResourceRequest from a pointer, which might not be true for all ports.

        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequest):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Port LoggingWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=123678

        Reviewed by Darin Adler.

        This makes it easier to use a common list of files
        for the different Windows ports later.

        * PlatformWin.cmake:
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Fix UnicodeWchar after r157330.
        https://bugs.webkit.org/show_bug.cgi?id=123668

        Reviewed by Darin Adler.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::generateComponents):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawText):
        * platform/text/wchar/TextBreakIteratorWchar.cpp:
        (WebCore::isCharStop):
        (WebCore::isLineStop):
        (WebCore::isSentenceStop):
        (WebCore::WordBreakIterator::next):
        (WebCore::WordBreakIterator::previous):

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

        Use RenderChildIterator in a couple of places.
        <https://webkit.org/b/123684>

        Added isRendererOfType() for RenderBox and RenderBlock and switch
        some loops over to using childrenOfType<>. Also sprinkled const
        and references on touched code.

        Reviewed by Antti Koivisto.

2013-11-02  Zan Dobersek  <zdobersek@igalia.com>

        Manage FileReaderLoader through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123666

        Reviewed by Anders Carlsson.

        Construct FileReaderLoader objects through std::make_unique and store them in std::unique_ptr.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readInternal):
        * fileapi/FileReader.h:

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

        Add a child renderer iterator.
        <https://webkit.org/b/123662>

        Introduce an ElementIterator-style iterator for renderers and put
        it to use in a childrenOfType() implementation.

        It's used just like the Element iterators:

        auto sections = childrenOfType<RenderTableSection>(*this);
        for (auto section = sections.begin(), section = sections.end(); section != sections.end(); ++section)
            section->thisOrThat();

        Just like the DOM counterpart, it relies on a templatized helper:

            bool isRendererOfType<T>(const RenderObject&)

        This patch puts the iterator to use in a couple of random places.

        Reviewed by Antti Koivisto.

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

        Implement remaining SHA variations for WebCrypto
        https://bugs.webkit.org/show_bug.cgi?id=123659

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/sha-224.html
               crypto/subtle/sha-256.html
               crypto/subtle/sha-384.html
               crypto/subtle/sha-512.html

        * WebCore.xcodeproj/project.pbxproj:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp: Added.
        (WebCore::CryptoAlgorithmSHA224::CryptoAlgorithmSHA224):
        (WebCore::CryptoAlgorithmSHA224::~CryptoAlgorithmSHA224):
        (WebCore::CryptoAlgorithmSHA224::create):
        (WebCore::CryptoAlgorithmSHA224::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA224.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp: Added.
        (WebCore::CryptoAlgorithmSHA256::CryptoAlgorithmSHA256):
        (WebCore::CryptoAlgorithmSHA256::~CryptoAlgorithmSHA256):
        (WebCore::CryptoAlgorithmSHA256::create):
        (WebCore::CryptoAlgorithmSHA256::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA256.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp: Added.
        (WebCore::CryptoAlgorithmSHA384::CryptoAlgorithmSHA384):
        (WebCore::CryptoAlgorithmSHA384::~CryptoAlgorithmSHA384):
        (WebCore::CryptoAlgorithmSHA384::create):
        (WebCore::CryptoAlgorithmSHA384::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA384.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp: Added.
        (WebCore::CryptoAlgorithmSHA512::CryptoAlgorithmSHA512):
        (WebCore::CryptoAlgorithmSHA512::~CryptoAlgorithmSHA512):
        (WebCore::CryptoAlgorithmSHA512::create):
        (WebCore::CryptoAlgorithmSHA512::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA512.h: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/mac/CryptoAlgorithmSHA224Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/mac/CryptoAlgorithmSHA256Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/mac/CryptoAlgorithmSHA384Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/mac/CryptoAlgorithmSHA512Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA512::digest):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Various small WinCE build fixes

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/wince/PlatformPathWinCE.h:
        * platform/win/PopupMenuWin.h:
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):

2013-11-01  Alexey Proskuryakov  <ap@apple.com>

        Add WebCrypto AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123647

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-192-encrypt-decrypt.html
               crypto/subtle/aes-cbc-256-encrypt-decrypt.html
               crypto/subtle/aes-cbc-encrypt-decrypt-with-padding.html
               crypto/subtle/aes-cbc-encrypt-decrypt.html
               crypto/subtle/aes-cbc-invalid-length.html
               crypto/subtle/aes-cbc-wrong-key-class.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::getProperty): Factored out a function to get a property as JSValue.
        (WebCore::getHashAlgorithm): Use it.
        (WebCore::createAesCbcParams): Added converter for AesCbcParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Support AES_CBC.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Support all
        algorithms, all the new ones just have trivial dictionaries.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Ditto.

        * bindings/js/JSCryptoOperationData.cpp: Added.
        (WebCore::sequenceOfCryptoOperationDataFromJSValue):
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSCryptoOperationData.h: Added.
        Moved CryptoOperationData bindings out of JSSubtleCryptoCustom.cpp, so that we
        could use them in JSCryptoAlgorithmDictionary.cpp.

        * bindings/js/JSDOMPromise.h: (WebCore::PromiseWrapper::reject): Added a specialization
        to reject with null result. The spec doesn't actually say how algorithms fail.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt): Added.
        (WebCore::JSSubtleCrypto::decrypt): Ditto.
        (WebCore::JSSubtleCrypto::sign): Style fix.

        * crypto/CryptoAlgorithmAesCbcParams.h: Added.

        * crypto/CryptoKey.h:
        (WebCore::CryptoKeyClass):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::asCryptoKeyHMAC):
        Added poor man's RTTI, so that we can safely upcast Keys passed fro JavaScript code.

        * crypto/CryptoKeyAES.cpp: Added.
        (WebCore::CryptoKeyAES::CryptoKeyAES):
        (WebCore::CryptoKeyAES::~CryptoKeyAES):
        (WebCore::CryptoKeyAES::buildAlgorithmDescription):
        * crypto/CryptoKeyAES.h: Added.
        (WebCore::asCryptoKeyAES):
        AES keys are the same for all algorithms, but they still need to remember the algorithm.

        * crypto/SubtleCrypto.idl: Added encrypt/decrypt.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: Added.
        (WebCore::CryptoAlgorithmAES_CBC::CryptoAlgorithmAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::~CryptoAlgorithmAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::create):
        (WebCore::CryptoAlgorithmAES_CBC::identifier):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        (WebCore::CryptoAlgorithmAES_CBC::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h: Added.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Added.
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        Added.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Check key class before casting it to CryptoKeyHMAC.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register AES-CBC
        on Mac, so that it can be used.

2013-11-01  Andreas Kling  <akling@apple.com>

        SVGRenderStyle accessors should return references.
        <https://webkit.org/b/123656>

        RenderStyle::svgStyle() and accessSVGStyle() never return null,
        so make them return references instead.
        
        This flushed out a myriad of pointless null checks and assertions.

        Reviewed by Anders Carlsson.

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing MediaStreamTrackVector and MediaStreamSourceVector typedefs
        https://bugs.webkit.org/show_bug.cgi?id=123648

        Reviewed by Eric Carlson.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::clone):
        (WebCore::MediaStream::cloneMediaStreamTrackVector):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::trackVectorForType):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::create):
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
        * platform/mediastream/MediaStreamDescriptor.h:
        * platform/mediastream/MediaStreamSource.h:

2013-11-01  Andreas Kling  <akling@apple.com>

        createFontFaceValue() should be smarter about overgrown cache.
        <https://webkit.org/b/123643>

        Instead of clearing the whole font-face value cache when it passes
        128 entries, just delete one entry at random.

        Reviewed by Geoffrey Garen.

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing mac code to use new MediaStreamDescriptor create method
        https://bugs.webkit.org/show_bug.cgi?id=123653

        Reviewed by Eric Carlson.

        No new tests needed.

        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::createMediaStream):

2013-11-01  Andreas Kling  <akling@apple.com>

        Re-use existing RenderStyle local in textWidth().
        <https://webkit.org/b/123392>

        We already have the RenderStyle cached in a local here, so avoid
        getting it from RenderText since that has to go via the parent.

        Reviewed by Antti Koivisto.

2013-11-01  Andreas Kling  <akling@apple.com>

        Neuter WTF_MAKE_FAST_ALLOCATED in GLOBAL_FASTMALLOC_NEW builds.
        <https://webkit.org/b/123639>

        WebCore::TimerBase really needed to have the new/delete operators
        overridden, in order for WebCore::SuspendableTimer to be able to
        choose that "operator new" out of the two it inherits.

        Reviewed by Anders Carlsson.

2013-11-01  Andreas Kling  <akling@apple.com>

        CSSCanvasValue construction helper should return PassRef.
        <https://webkit.org/b/123650>

        Return PassRef instead of PassRefPtr from functions that return
        ownership-passing pointers that are known to be non-null.

        Reviewed by Anders Carlsson.

2013-11-01  Joseph Pecoraro  <pecoraro@apple.com>

        Move CF/Mac WTF String implementations down into WTF
        https://bugs.webkit.org/show_bug.cgi?id=123635

        Reviewed by Sam Weinig.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing unnecessary early returns in addTrack, removeTrack and removeRemoteSource methods
        https://bugs.webkit.org/show_bug.cgi?id=123644

        Reviewed by Eric Carlson.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::removeRemoteSource):
        (WebCore::MediaStream::trackVectorForType):
        * Modules/mediastream/MediaStream.h:

2013-11-01  Andreas Kling  <akling@apple.com>

        CSSAspectRatioValue construction helper should return PassRef.
        <https://webkit.org/b/123645>

        Return PassRef instead of PassRefPtr from functions that return
        ownership-passing pointers that are known to be non-null.

        Reviewed by Darin Adler.

2013-11-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Initial implementation of text-decoration-skip ink
        https://bugs.webkit.org/show_bug.cgi?id=121806

        Reviewed by Darin Adler.

        text-decoration-skip: ink is implemented by the following steps:
        1. Before drawing any decorations, figure out the bounding box for the decorations that will be drawn
        2. Create an ImageBuffer with these dimensions
        3. Draw text into this ImageBuffer with a thicker stroke
        4. Apply the ImageBuffer as a mask to the context
        5. Draw decorations like normal
        6. Clean up

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

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText): Don't call GraphicsContext::roundToDevicePixels
        when painting is disabled
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Pass the TextPainter to paintDecoration
        (WebCore::computeUnderlineOffset): Small cleanup
        (WebCore::getWavyStrokeControlPointDistance): Pulling out of strokeWavyTextDecoration()
        (WebCore::getWavyStrokeStep): Ditto
        (WebCore::strokeWavyTextDecoration): Use the previous 2 functions
        (WebCore::getSingleDecorationBoundingBox): Pulling out repeated code into a function
        (WebCore::getDecorationBoundingBox): Compute the bounding box for an underline which
        hasn't been drawn yet
        (WebCore::InlineTextBox::paintDecoration): Construct a mask and apply it to the GraphicsContext
        * rendering/InlineTextBox.h: paintDecoration needs the TextPainter
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline): Redraw the underline when
        text-decoration-skip changes

2013-11-01  Andreas Kling  <akling@apple.com>

        CSS 'initial' and 'inherit' value constructors should return PassRef.
        <https://webkit.org/b/123641>

        Make the helpers involved in constructing CSS{Initial,Inherited}Value
        all return PassRef instead of PassRefPtr. This avoids generating
        pointless null checks at the call sites.

        Reviewed by Darin Adler.

2013-11-01  Andreas Kling  <akling@apple.com>

        Kill RenderArena.
        <https://webkit.org/b/123634>

        There are no remaining users of the RenderArena allocator.

        Reviewed by Geoffrey Garen.

2013-11-01  James Craig  <jcraig@apple.com>

        AX: Regression: media controls are no longer accessible
        https://bugs.webkit.org/show_bug.cgi?id=121990

        Reviewed by Jer Noble.

        Updated existing test coverage.
        Added ARIA roles, attrs, and labels to the new media controls shadow DOM.
        Localization will be handled in http://webkit.org/b/120956

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.UIString):
        (Controller.prototype.createControls):
        (Controller.prototype.handleLoadStart):
        (Controller.prototype.handleError):
        (Controller.prototype.handleAbort):
        (Controller.prototype.handleSuspend):
        (Controller.prototype.handleStalled):
        (Controller.prototype.handleWaiting):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.handleMuteButtonClicked):
        (Controller.prototype.handleMinButtonClicked):
        (Controller.prototype.handleMaxButtonClicked):
        (Controller.prototype.handleVolumeSliderChange):
        (Controller.prototype.updatePlaying):

2013-11-01  Andreas Kling  <akling@apple.com>

        Take BidiRuns out of the arena.
        <https://webkit.org/b/123630>

        Stop arena-allocating BidiRun objects and use regular new/delete.

        With this, there are no remaining clients of RenderArena.
        It will be removed in a subsequent patch.

        Reviewed by Anders Carlsson.

2013-11-01  Afonso R. Costa Jr.  <afonso.costa@samsung.com>

        Expose setApplicationCacheOriginQuota via window.internals
        https://bugs.webkit.org/show_bug.cgi?id=87838

        Reviewed by Joseph Pecoraro.

        Also reset the default origin quota in resetToConsistentState().

        * testing/Internals.cpp: Add setApplicationCacheOriginQuota.
        (WebCore::Internals::resetToConsistentState): Reset the default origin
        quota.
        (WebCore::Internals::setApplicationCacheOriginQuota): Added.
        * testing/Internals.h: Add setApplicationCacheOriginQuota.
        * testing/Internals.idl: Ditto.

2013-11-01  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Explicitly initialize RefCounted base class in MediaStreamTrack's constructors
        https://bugs.webkit.org/show_bug.cgi?id=123620

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding addRemoteTrack and removeRemoteTrack functions to MediaStreamDescriptor and MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=123477

        Reviewed by Eric Carlson.

        When the backend report that a remote track has been added or removed by a remote peer, we must be able to add
        it to its MediaStream

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack): Splitted in two parts that can be used by old addTrack and new addRemoteTrack.
        (WebCore::MediaStream::removeTrack): Splitted in two parts that can be used by old removeTrack and new
        removeRemoteTrack.
        (WebCore::MediaStream::addRemoteSource): Reusing code in new addTrack method.
        (WebCore::MediaStream::removeRemoteSource): Refactored.
        (WebCore::MediaStream::addRemoteTrack): Added.
        (WebCore::MediaStream::removeRemoteTrack): Added.
        (WebCore::MediaStream::getTrackVectorForType): Helper method that returns a vector of tracks according to
        track's type (Audio or Video).

        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addRemoteTrack): Added.
        (WebCore::MediaStreamDescriptor::removeRemoteTrack): Added.
        * platform/mediastream/MediaStreamDescriptor.h:

2013-11-01  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Support audio and video tracks
        https://bugs.webkit.org/show_bug.cgi?id=117039

        Reviewed by Philippe Normand.

        Tests: media/track/audio/audio-track-mkv-vorbis-addtrack.html
               media/track/audio/audio-track-mkv-vorbis-enabled.html
               media/track/audio/audio-track-mkv-vorbis-language.html
               media/track/in-band/track-in-band-kate-ogg-addtrack.html
               media/track/in-band/track-in-band-srt-mkv-addtrack.html
               media/track/video/video-track-mkv-theora-addtrack.html
               media/track/video/video-track-mkv-theora-language.html
               media/track/video/video-track-mkv-theora-selected.html

        * GNUmakefile.list.am: Add audio and video track files.
        * PlatformEfl.cmake: Same.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Schedule "change" event.
        (WebCore::HTMLMediaElement::videoTrackSelectedChanged): Same.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::setEnabled): Call m_private->setEnabled
        (WebCore::AudioTrack::enabledChanged): Added callback.
        (WebCore::AudioTrack::labelChanged): Same.
        (WebCore::AudioTrack::languageChanged): Same.
        (WebCore::AudioTrack::willRemoveAudioTrackPrivate): Use ASSERT_UNUSED for consistence.
        * html/track/AudioTrack.h: Add new enabled, label and language callbacks.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::setSelected): Call m_private->setEnabled
        (WebCore::VideoTrack::selectedChanged): Added callback.
        (WebCore::VideoTrack::labelChanged): Same.
        (WebCore::VideoTrack::languageChanged): Same.
        (WebCore::VideoTrack::willRemoveVideoTrackPrivate): Use ASSERT_UNUSED for consistence.
        * html/track/VideoTrack.h: Add new selected, label and language callbacks.
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::setEnabled): Call m_client->enabledChanged
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::setSelected): Call m_client->selectedChanged
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer): Add ASSERT(m_pad)
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfTagsChanged): Look at all tag events instead of just the first one.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVideoSinkCapsChangedCallback): Separated callback when caps change from callback when number of videos change.
        (WebCore::mediaPlayerPrivateVideoCapsChangeTimeoutCallback): Same.
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Initialize m_videoCapsTimerHandler.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Disconnect audio and video tracks and remove callbacks.
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged): Separated callback when caps change from callback when number of videos change.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Create video tracks for each stream.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideoCaps): Separated callback when caps change from callback when number of videos change.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Create audio tracks for each stream.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add audio and video tracks, and a pointer to keep track of the default audio stream.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp: Added.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Added.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Add GRefPtr<GstTagList>
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp: Added, handles tags and "active" property of audio and video tracks.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Added.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Added.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Added.

2013-11-01  Patrick Gansterer  <paroga@webkit.org>

        Buildfix for !ENABLE(INSPECTOR) after 157288.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchEvent):

2013-11-01  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Avoid explicit traversal of text controls and the render tree in AtkText implementation
        https://bugs.webkit.org/show_bug.cgi?id=123153

        Reviewed by Chris Fleizach.

        Remove functions from the AtkText implementation that manually
        walk the render tree to compose the text for a exposed objects in
        certain cases (e.g. anonymous blocks, text controls).

        The reason for this change is that the current implementation
        follows an error-prone approach, since by doing things like
        manually walking the render tree from here we are not properly
        considering all the possible scenarios that might happen when
        traversing text. This, however, is a task that is better suited
        for the TextIterator, which is already written to consider all
        those cases and to emit the proper character in every single
        situation: text nodes, replaced objects and so on.

        So, by removing all that too specific code (textForObject() and
        textForRenderer() mainly) from WebKitAccessibleInterfaceText.cpp
        and relying in AccessibilityObject::textUnderElement(), which it
        ends up using the TextIterator for certain cases, we have a much
        better and robust method of retrieving the text associated with an
        instance of AtkObject implementing the AtkText interface.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetText): Removed call to textForObject(), now that
        we have just removed that function, together with textForRenderer().

        Make AccessibilityRenderObject::textUnderElement() able to deal with
        anonymous blocks directly, by creating a range based in the boundaries
        defined by the first and last child renderers for that block. This will
        make possible to treat an anonymous block as a whole instead of having
        to rely in the concatenation of each of its children, as it does now.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement): Added a new code
        path to deal with anonymous blocks for text renderers, or when including
        all the children is explicitly requested.

        Modified TextIterator so text for children of replaced objects are
        ignored if we are emmiting the special character for those objects.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement): Make sure no children are
        handled a replaced object if m_emitsObjectReplacementCharacters is set.
        * editing/TextIterator.h: Updated m_emitsObjectReplacementCharacters
        description to reflect the new behavior.

2013-11-01  Alexey Proskuryakov  <ap@apple.com>

        Add a Mac WebCrypto implementation of HMAC importKey/sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=123598

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/hmac-sign-verify.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp: Added property svn:eol-style.
        (WebCore::createAlgorithmFromJSValue):
        (WebCore::cryptoOperationDataFromJSValue):
        (WebCore::cryptoKeyFormatFromJSValue):
        (WebCore::cryptoKeyUsagesFromJSValue):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::importKey):
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: Added.
        (WebCore::CryptoAlgorithmHMAC::CryptoAlgorithmHMAC):
        (WebCore::CryptoAlgorithmHMAC::~CryptoAlgorithmHMAC):
        (WebCore::CryptoAlgorithmHMAC::create):
        (WebCore::CryptoAlgorithmHMAC::identifier):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        (WebCore::CryptoAlgorithmHMAC::exportKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h: Added.
        * crypto/keys: Added.
        * crypto/keys/CryptoKeyHMAC.cpp: Added.
        (WebCore::CryptoKeyHMAC::CryptoKeyHMAC):
        (WebCore::CryptoKeyHMAC::~CryptoKeyHMAC):
        (WebCore::CryptoKeyHMAC::buildAlgorithmDescription):
        * crypto/keys/CryptoKeyHMAC.h: Added.
        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Added.
        (WebCore::getCommonCryptoAlgorithm):
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clean up a few Inspector interfaces
        https://bugs.webkit.org/show_bug.cgi?id=123594

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::name):
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        (WebCore::InspectorConsoleAgent::enabled):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::profilerEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::enabled):
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::enabled):

2013-10-31  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Vend layer contents via IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=123600

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export sRGBColorSpaceRef.

        * WebCore.xcodeproj/project.pbxproj:
        Expose GraphicsContextCG.h.

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused Page::setDebuggerForAllPages
        https://bugs.webkit.org/show_bug.cgi?id=123602

        Reviewed by Timothy Hatcher.

        * page/Page.cpp:
        * page/Page.h:

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorState
        https://bugs.webkit.org/show_bug.cgi?id=123547

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        (WebCore::InspectorApplicationCacheAgent::create):
        * inspector/InspectorBaseAgent.cpp:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        (WebCore::InspectorCSSAgent::create):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        * inspector/InspectorCanvasAgent.h:
        (WebCore::InspectorCanvasAgent::create):
        * inspector/InspectorClient.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::create):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        * inspector/InspectorIndexedDBAgent.h:
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        * inspector/InspectorInputAgent.h:
        (WebCore::InspectorInputAgent::create):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        * inspector/InspectorLayerTreeAgent.h:
        (WebCore::InspectorLayerTreeAgent::create):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        (WebCore::InspectorMemoryAgent::create):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorState.cpp: Removed.
        * inspector/InspectorState.h: Removed.
        * inspector/InspectorStateClient.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::create):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::create):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        * inspector/PageRuntimeAgent.h:
        (WebCore::PageRuntimeAgent::create):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        (WebCore::WorkerConsoleAgent::create):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::create):
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        * inspector/WorkerRuntimeAgent.h:
        (WebCore::WorkerRuntimeAgent::create):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:

2013-10-31  Brady Eidson  <beidson@apple.com>

        Split PendingDeleteCall into its own header
        https://bugs.webkit.org/show_bug.cgi?id=123597

        Reviewed by Beth “Okay I guess so, bro” Dakin.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

        * Modules/indexeddb/IDBPendingDeleteCall.h: Added.
        (WebCore::IDBPendingDeleteCall::create):
        (WebCore::IDBPendingDeleteCall::callbacks):
        (WebCore::IDBPendingDeleteCall::IDBPendingDeleteCall):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Convert some InspectorObject member variables to HashSet/HashMap
        https://bugs.webkit.org/show_bug.cgi?id=123579

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        Make m_eventListenerBreakpoints and m_xhrBreakpoints HashSet.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        Make m_javaScriptBreakpoints a HashMap.

2013-10-31  Youenn Fablet  <youennf@gmail.com>

        Correct the elapsedTime calculation in SVG animations
        https://bugs.webkit.org/show_bug.cgi?id=119289

        Reviewed by Brent Fulgham.

        Merged from Blink: https://chromium.googlesource.com/chromium/blink/+/338f9badca7fb7880abdb0cecd5f02493c1f7d2e

        Test: svg/animations/getCurrentTime-pause-unpause.html

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::elapsed):
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::pause):
        (WebCore::SMILTimeContainer::resume):
        (WebCore::SMILTimeContainer::setElapsed):
        * svg/animation/SMILTimeContainer.h:

2013-10-31  Andreas Kling  <akling@apple.com>

        Manage line-grid RootInlineBox with unique_ptr.
        <https://webkit.org/b/123583>

        Use smart pointers for the RenderBlockFlow's optional line-grid box
        instead of manual new/delete.

        Reviewed by Antti Koivisto.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Enable WebCrypto on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123587

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig: Enable it.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp: Build fix.

        * crypto/CryptoAlgorithmRegistry.cpp: (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        Special case empty keys to avoid upsetting HashMap.

        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: (WebCore::CryptoAlgorithmSHA1::create):
        Build fix. Can't use make_unique, because constructor is private.

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Underline bounds cannot be queried before underline itself is drawn
        https://bugs.webkit.org/show_bug.cgi?id=123310

        Reviewed by Dean Jackson.

        GraphicsContext's drawLineForText function is used to draw underlines,
        strikethroughs, and overlines. Before drawing the line, this function
        modifies the bounds given to it in order to make underlines crisp. However,
        this means that it is impossible to know where an underline will be drawn
        before drawing it. This patch pulls out this adjustment computation into
        GraphicsContext::computeLineBoundsForText, then passes the result to
        drawLineForText

        Because there should be no observable difference, no tests need to be updated.

        * platform/graphics/GraphicsContext.h: Signature of new computeLineBoundsForText
        function
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Implement new function
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Ditto
        (WebCore::GraphicsContext::drawLineForText): Use computeLineBoundsForText
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText): Static function that
        performs the actual bounds computation
        (WebCore::GraphicsContext::computeLineBoundsForText): Calls
        computeLineBoundsAndAntialiasingModeForText
        (WebCore::GraphicsContext::drawLineForText): Use new function
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Implement new function

2013-10-31  Beth Dakin  <bdakin@apple.com>

        Repro scrolling crash with scrollbars that use setPresentationValue on the 
        scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=123549
        -and corresponding-
        <rdar://problem/15246606>

        Reviewed by Brady Eidson.

        Here's another speculative fix. If a scrollbar was removed, we would not properly 
        inform the scrolling thread. Instead of checking supportsUpdateOnSecondaryThread() 
        before calling setScrollbarPaintersFromScrollbars(), check it from within 
        setScrollbarPaintersFromScrollbars(), and this will allow the ScrollbarPainter to 
        be properly updated.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fix after 158386. (buildfix after r158365)

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Move CSS3 text decoration implementation behind ENABLE(CSS3_TEXT_DECORATION)
        https://bugs.webkit.org/show_bug.cgi?id=123541

        Reviewed by Tim Horton.

        Enabled CSS3 text decoration tests

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationStyleFlagsToCSSValue): Mapping internal
        representation to a CSSValue
        (WebCore::ComputedStyleExtractor::propertyValue): Ditto
        * css/CSSParser.cpp: Moving parsing functions behind new flag
        (WebCore::isColorPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::parseTextDecorationSkip):
        (WebCore::CSSParser::parseTextUnderlinePosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSPropertyNames.in: Marking the new properties behind new flag
        * css/CSSValueKeywords.in: Marking new values behind new flag
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty): Move text decoration shorthand
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStyleToStrokeStyle):
        (WebCore::computeUnderlineOffset):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        [WebCrypto] Add SHA-1
        https://bugs.webkit.org/show_bug.cgi?id=123582

        Reviewed by Anders Carlsson.

        Tests: security/crypto-subtle-arguments.html
               security/crypto-subtle-sha1.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::createAlgorithmFromJSValue):
        (WebCore::sequenceOfCryptoOperationDataFromJSValue):
        (WebCore::JSSubtleCrypto::digest):
        * crypto/SubtleCrypto.idl:
        Added bindings for crypto.digest.

        * crypto/algorithms: Added.
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmSHA1.h: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register SHA-1.

        * crypto/mac/CryptoAlgorithmSHA1Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA1::digest): Performs the work synchronously, because
        otherwise we'd have to copy the data first, which is crazy for something as simple
        as hashing. We can change to a dispatch queue later if we find that it's actually
        better to copy and do the work asynchronously.

2013-10-31  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        REGRESSION(r158348): Breaks Debug build
        https://bugs.webkit.org/show_bug.cgi?id=123562

        Reviewed by Brady Eidson.

        Remove an unnecessary check that cause compilation failure.

        No new tests since this just fixes the build failure.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        One more speculative buildfix after r158365.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        One more speculative buildfix after r158365.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didAddRemoteStream):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        Speculative buildfix after r158365.

        * Modules/mediastream/VideoStreamTrack.cpp:
        (WebCore::VideoStreamTrack::create):
        (WebCore::VideoStreamTrack::VideoStreamTrack):
        * Modules/mediastream/VideoStreamTrack.h:

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Decorated text sometimes does not draw its decorations
        https://bugs.webkit.org/show_bug.cgi?id=123539

        Reviewed by Antti Koivisto.

        Decorated text should opt-out of the simple line layout, because
        SimpleLineLayout::paintFlow doesn't draw decorations

        Fixes fast/css3-text/css3-text-decoration/text-decoration-color.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove last member variable uses of InspectorState from Agents
        https://bugs.webkit.org/show_bug.cgi?id=123540

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        DOMDebuggerAgentState::eventListenerBreakpoints -> m_eventListenerBreakpoints.
        DOMDebuggerAgentState::xhrBreakpoints -> m_xhrBreakpoints.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        DebuggerAgentState::javaScriptBreakpoints -> m_javaScriptBreakpoints.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        PageAgentState::pageAgentScriptsToEvaluateOnLoad -> m_scriptsToEvaluateOnLoad.
        This is a lazily created InspectorObject member variable.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        ResourceAgentState::extraRequestHeaders -> m_extraRequestHeaders.
        This is a lazily created InspectorObject member variable.

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, one more build fix after r158365.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):

2013-10-31  Beth Dakin  <bdakin@apple.com>

        Repro scrolling crash with scrollbars that use setPresentationValue on the 
        scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=123549
        -and corresponding-
        <rdar://problem/15246606>

        Reviewed by Darin Adler.

        Speculative fix. I think if we retain the ScrollbarPainters, we should avoid this 
        crash.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, MediaStream build fix after r158365.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::clone):

2013-10-31  Sam Weinig  <sam@webkit.org>

        Pass an Element by reference to the PseudoElement constructor
        https://bugs.webkit.org/show_bug.cgi?id=123576

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::createPseudoElementIfNeeded):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement):
        * dom/PseudoElement.h:

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Fix a mis-merge.

        * WebCore.xcodeproj/project.pbxproj: Remove duplicate CryptoAlgorithmRegistryMac.cpp.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Add bindings code for crypto algorithm dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=123476

        Reviewed by Sam Weinig.

        JSCryptoAlgorithmDictionary reads the Algorithm, much like JSDictionary does in
        simpler cases. We should see about bringing them closer together (perhaps replacing
        with autogenerated code).

        * crypto/parameters: Added.
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmHmacParams.h: Added.
        Added a couple specific dictionaries as an example.

        * WebCore.xcodeproj/project.pbxproj: Added JSCryptoAlgorithmDictionary.
        * bindings/js/JSCryptoAlgorithmDictionary.cpp: Added.
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        (WebCore::getHashAlgorithm):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        * bindings/js/JSCryptoAlgorithmDictionary.h: Added.

2013-10-31  Sam Weinig  <sam@webkit.org>

        Pass ScriptExecutionContext by reference to from the bindings constructors
        https://bugs.webkit.org/show_bug.cgi?id=123575

        Reviewed by Andreas Kling.

        Since we null check the ScriptExecutionContext before creating the c++ class,
        we should be passing by reference.

2013-10-31  Zhuang Zhigang  <zhuangzg@cn.fujitsu.com>

        Paint the input tag of range type on WinCE port.
        https://bugs.webkit.org/show_bug.cgi?id=123199

        Reviewed by Brent Fulgham.        

        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSliderTrack):
        (WebCore::RenderThemeWinCE::paintSliderThumb):

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Add a crypto algorithm abstraction
        https://bugs.webkit.org/show_bug.cgi?id=123474

        Reviewed by Sam Weinig.

        This works slightly differently than WebCrypto implies. We have separate classes
        for algorithm and its parameters, while WebCrypto puts them in the same dictionary.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithm.cpp: Added. As most algorithms don't implement most
        operations, default implementations just raise an exception.
        * crypto/CryptoAlgorithm.h: Added.

        * crypto/CryptoAlgorithmParameters.h: Added. Base class for numerous future parameter
        dictionaries, such as HmacParams or HmacKeyParams.

        * crypto/CryptoAlgorithmRegistry.cpp: Added.
        * crypto/CryptoAlgorithmRegistry.h: Added.
        The registry decouples universal bindings code from algorithms that may or may not
        be implemented on each platform.

        * crypto/mac: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp: Added.
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Algorithms implemented
        on Mac will be registered by this function.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION(r158333): http/tests/xmlhttprequest/response-encoding.html and xmlhttprequest-overridemimetype-content-type-header.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=123548

        Reviewed by Brady Eidson.

        We had code that made sure that cached 200 responses weren't used for conditional
        requests. But it didn't work the other way - cached 304 responses got reused for
        subsequent unconditional requests!

        Adding the test uncovered this bug.

        * loader/cache/CachedRawResource.cpp: (WebCore::shouldIgnoreHeaderForCacheReuse):
        Should never ignore conditional headers. Code in determineRevalidationPolicy
        was already undoing this for conditional requests, but we also shouldn't use
        WebCore cache if it holds a 304 response to conditional request.

        * loader/cache/CachedResourceLoader.cpp: (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        Even though the changed code is only for raw resources, I think that we can never
        get a conditional request here any more.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        CryptoAlgorithmDescriptionBuilder should support producing nested algorithms
        https://bugs.webkit.org/show_bug.cgi?id=123461

        Reviewed by Darin Adler.

        To add a nested algorithm, clone a builder with createEmptyClone(), fill it,
        and add it using add().

        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::createEmptyClone):
        (WebCore::JSCryptoAlgorithmBuilder::add): Keep VM in a local variable for marginally
        better performance.

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        [WK2][GTK] enable-media-stream Setting
        https://bugs.webkit.org/show_bug.cgi?id=123145

        Reviewed by Anders Carlsson.

        * page/Settings.in: new mediaStreamEnabled setting.

2013-10-31  Zan Dobersek  <zdobersek@igalia.com>

        Manage SVGPathByteStream through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123467

        Reviewed by Anders Carlsson.

        Manage SVGPathByteStream objects through std::unique_ptr. Constructors for the class are made public
        so std::make_unique can be used with the class.

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createPath):
        * svg/SVGAnimatedType.h:
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::SVGPathByteStream): Takes a const Data object that's then copied.
        (WebCore::SVGPathByteStream::copy): Made const.
        * svg/SVGPathByteStreamBuilder.cpp: Remove an unnecessary include.
        * svg/SVGPathByteStreamBuilder.h: Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPathElement.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        (WebCore::addToSVGPathByteStream):

2013-10-31  Marcin Bychawski  <m.bychawski@samsung.com>

        Removing m_maxDeadCapacity condition in fast path in MemoryCache::prune().
        https://bugs.webkit.org/show_bug.cgi?id=115631

        Reviewed by Brent Fulgham.

        If the m_maxDeadSize and m_deadSize are both 0, the method unnecessairly tries to prune resources.

        No new tests, covered by existing ones.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::prune):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove stale optional native memory instrumentation protocol params
        https://bugs.webkit.org/show_bug.cgi?id=123552

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        * inspector/InspectorTimelineAgent.h:

2013-10-31  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Undefined references to RenderObject::style() when disabling video support
        https://bugs.webkit.org/show_bug.cgi?id=123492

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/RenderThemeGtk2.cpp: Disabling video support removes indirect inclusion of the RenderElement.h
        header, causing undefined references to RenderObject::style(). The RenderElement.h header should be included
        instead of RenderObject.h as the former defines the RenderObject::style() inline and also includes the latter.
        * platform/gtk/RenderThemeGtk3.cpp: Ditto.

2013-10-31  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] accessibility/textbox-role-reports-selection.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=112017

        Reviewed by Mario Sanchez Prada.

        getSelectionOffsetsForObject() now returns proper start/end offsets for
        selections "touching" the object's front border.

        No new tests, covered by existing ones.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject):

2013-10-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][GLES] OpenGL should be optional
        https://bugs.webkit.org/show_bug.cgi?id=123399

        Reviewed by Noam Rosenthal.

        * CMakeLists.txt: Make OpenGL dependencies as optional.
        * PlatformEfl.cmake:
        Move OpenGL macro to OptionsEfl.cmake and make Xcomposite and XRender as optional.
        * platform/graphics/OpenGLESShims.h:
        Removed GL_COLOR_ATTACHMENT0_EXT because it was added to gl2ext.h since r153064
        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        Removed wrong GLX guard.
        (WebCore::GraphicsSurfaceToken::GraphicsSurfaceToken):
        (WebCore::GraphicsSurfaceToken::operator!=):
        (WebCore::GraphicsSurfaceToken::isValid):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        Removed unnecessary OpenGLShims.h

2013-10-30  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/editing] remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123524

        Reviewed by Ryosuke Niwa.

        Removing redundant header files.

        * editing/AlternativeTextController.cpp:
        * editing/ApplyBlockElementCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/DeleteButton.cpp:
        * editing/DeleteButtonController.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/DictationCommand.cpp:
        * editing/EditCommand.cpp:
        * editing/EditingStyle.cpp:
        * editing/EditorCommand.cpp:
        * editing/FrameSelection.cpp:
        * editing/IndentOutdentCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/MarkupAccumulator.h:
        * editing/RemoveFormatCommand.cpp:
        * editing/RenderedPosition.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SpellChecker.cpp:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SurroundingText.cpp:
        * editing/TextCheckingHelper.cpp:
        * editing/TextIterator.cpp:
        * editing/TypingCommand.cpp:
        * editing/VisibleSelection.cpp:
        * editing/VisibleUnits.cpp:
        * editing/WrapContentsInDummySpanCommand.cpp:
        * editing/htmlediting.cpp:

2013-10-30  Brady Eidson  <beidson@apple.com>

        IDB Database versions are uint64_t, not int64_t
        https://bugs.webkit.org/show_bug.cgi?id=123556

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/IDBPendingOpenCall.h:
        (WebCore::IDBPendingOpenCall::create):
        (WebCore::IDBPendingOpenCall::version):
        (WebCore::IDBPendingOpenCall::IDBPendingOpenCall):

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::open):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-10-30  Brendan Long  <b.long@cablelabs.com>

        [Gtk] Build is failing after r158317
        https://bugs.webkit.org/show_bug.cgi?id=123544

        Reviewed by Alexey Proskuryakov.

        No new tests since this just fixes the build.

        * GNUmakefile.list.am: Add JSCryptoKey.cpp and JSCryptoKey.h

2013-10-30  Andreas Kling  <akling@apple.com>

        Manage EllipsisBox objects with unique_ptr.
        <https://webkit.org/b/123554>

        Use smart pointers to store ellipsis boxes instead of new/delete.

        Reviewed by Anders Carlsson.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        [Gtk] Build is failing after r158317
        https://bugs.webkit.org/show_bug.cgi?id=123544

        Use a correct style for JSC includes.

        * ForwardingHeaders/runtime/JSPromise.h: Added.
        * ForwardingHeaders/runtime/JSPromiseResolver.h: Added.
        * bindings/js/JSDOMPromise.h:

2013-10-30  Andreas Kling  <akling@apple.com>

        Replace InlineBox::destroy() with regular virtual destruction.
        <https://webkit.org/b/123550>

        Move logic out of destroy() and its overloads into good ol' virtual
        destructors instead.

        Reviewed by Anders Carlsson.

2013-10-30  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Simplifying MediaStream and MediStreamDescriptor creation
        https://bugs.webkit.org/show_bug.cgi?id=123443

        Reviewed by Eric Carlson.

        The internal process of creating a MediaStream and MediaStreamDescriptor was quite confusing and spread.
        We can take advantage of the platform implementation of MediaStreamTrack (aka MediaStreamTrackPrivate)
        and simplify the whole process.
        A new constructor that receives vectors of MediaStreamTrackPrivate objects were added, then the check
        if a source already exists or if the tracks are all ended are now made in MediaStreamDescriptor.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create): Removed unnecessary variables in one create method and using new
        MediaStreamDescriptor::create method that receives vector of MediaStreamTrackPrivate objects as parameter.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): Removed passing flag to
        MediaStreamDescriptor create.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::create): Removed EndedAtCreationFlag parameter, because this is being
        handled inside constructor by analyzing the tracks or sources passed.
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Adding new constructor that receives vector of
        MediaStreamTrackPrivate as parameter.

        (WebCore::MediaStreamDescriptor::addTrack): Changed to store the track's source in the object.

        (WebCore::MediaStreamDescriptor::removeTrack):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::numberOfAudioTracks):
        (WebCore::MediaStreamDescriptor::audioTracks):
        (WebCore::MediaStreamDescriptor::numberOfVideoTracks):
        (WebCore::MediaStreamDescriptor::videoTracks):
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::createMediaStream): Removing flag that is being passed to
        MediaStreamDescriptor's create method.

2013-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Legible Output callbacks should happen on notification queue
        https://bugs.webkit.org/show_bug.cgi?id=123545

        Reviewed by Eric Carlson.

        Modify the callback creation for Legible Output items so that they
        are made on our notification queue. The use of the main queue was a
        holdover from some temporary code used during earlier development.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::AVFWrapper): Assert this happens on the main thread.
        (WebCore::AVFWrapper::~AVFWrapper): Ditto.
        (WebCore::destroyAVFWrapper): Ditto.
        (WebCore::AVFWrapper::createPlayer): Ditto.
        (WebCore::AVFWrapper::createPlayerItem): Ditto.
        Also, instruct LegibleOutput callbacks to happen on our notification
        queue, rather than the main thread.
        (WebCore::AVFWrapper::createAVCFVideoLayer): Assert this happens on the main thread.
        (WebCore::AVFWrapper::destroyVideoLayer): Ditto.
        (WebCore::AVFWrapper::createImageGenerator): Ditto.
        (WebCore::AVFWrapper::destroyImageGenerator): Ditto.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        XHR.response is null when requesting empty file as arraybuffer
        https://bugs.webkit.org/show_bug.cgi?id=123457

        Reviewed by Sam Weinig.

        Test: http/tests/xmlhttprequest/response-empty-arraybuffer.html

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::responseArrayBuffer): Don't do this.

2013-10-30  Samuel White  <samuel_white@apple.com>

        AX: AXFocused not exposed on ARIA menuitems
        https://bugs.webkit.org/show_bug.cgi?id=123494

        Reviewed by Chris Fleizach.

        ARIA menuitems should expose AXFocused accessibility attribute.

        Test: platform/mac/accessibility/aria-menuitem-focus.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2013-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove basic uses of InspectorState from agents
        https://bugs.webkit.org/show_bug.cgi?id=123534

        Reviewed by Timothy Hatcher.

        * inspector/InspectorAgent.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::disable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::inspect):
        InspectorAgentState::inspectorAgentEnabled -> m_enabled.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::enable):
        Remove unused state.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        (WebCore::InspectorCSSAgent::startSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        Remove unused states. Make CSSAgentState::isSelectorProfiling check profile object exists or not.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        Remove unused state, member variable already existed.

        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        ConsoleAgentState::consoleMessagesEnabled already had m_enabled.
        ConsoleAgentState::monitoringXHR -> m_monitoringXHREnabled.
        
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        DOMAgentState::documentRequested -> m_documentRequested.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        DOMDebuggerAgentState::pauseOnAllXHRs -> m_pauseOnAllXHRsEnabled.

        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        DOMStorageAgentState::domStorageAgentEnabled -> m_enabled.

        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        Remove unused state, m_enabled already existed.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enabled):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsImpl):
        DebuggerAgentState::pauseOnExceptionsState removed, never read.
        DebuggerAgentState::debuggerEnabled -> m_enabled.

        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::clearFrontend):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        HeapProfilerAgentState::profileHeadersRequested -> m_profileHeadersRequested.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::enable):
        (WebCore::InspectorIndexedDBAgent::disable):
        Remove unused state, never read.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::enable):
        (WebCore::InspectorLayerTreeAgent::disable):
        Remove unused state, did not need to be read.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::webViewResized):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setDeviceMetricsOverride):
        (WebCore::InspectorPageAgent::deviceMetricsChanged):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore::InspectorPageAgent::setShowDebugBorders):
        (WebCore::InspectorPageAgent::setShowFPSCounter):
        (WebCore::InspectorPageAgent::setContinuousPaintingEnabled):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        (WebCore::InspectorPageAgent::applyScreenWidthOverride):
        (WebCore::InspectorPageAgent::applyScreenHeightOverride):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::didLayout):
        (WebCore::InspectorPageAgent::updateTouchEventEmulationInPage):
        (WebCore::InspectorPageAgent::setTouchEmulationEnabled):
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        (WebCore::InspectorPageAgent::applyEmulatedMedia):
        PageAgentState::pageAgentScreenWidthOverride -> m_screenWidthOverride.
        PageAgentState::pageAgentScreenHeightOverride -> m_screenHeightOverride.
        PageAgentState::pageAgentFontScaleFactorOverride -> m_fontScaleFactorOverride.
        PageAgentState::pageAgentFitWindow -> m_fitWindowOverride.
        PageAgentState::pageAgentShowPaintRects -> m_showPaintRects.
        PageAgentState::pageAgentEmulatedMedia -> m_emulatedMedia.
        Remove other unused states.

        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        (WebCore::InspectorProfilerAgent::enabled):
        ProfilerAgentState::profileHeadersRequested -> m_profileHeadersRequested.
        Remove other unused states.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::applyUserAgentOverride):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::setUserAgentOverride):
        (WebCore::InspectorResourceAgent::setCacheDisabled):
        (WebCore::InspectorResourceAgent::mainFrameNavigated):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        ResourceAgentState::resourceAgentEnabled -> m_enabled.
        ResourceAgentState::cacheDisabled -> m_cacheDisabled.
        ResourceAgentState::userAgentOverride -> m_userAgentOverride (this already existed and was unused).

        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        TimelineAgentState::timelineAgentEnabled -> m_enabled.
        TimelineAgentState::includeDomCounters -> m_includeDOMCounters.
        Remove other unused states.

        * inspector/InspectorWorkerAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::setAutoconnectToWorkers):
        (WebCore::InspectorWorkerAgent::shouldPauseDedicatedWorkerOnStart):
        (WebCore::InspectorWorkerAgent::didStartWorkerGlobalScope):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        WorkerAgentState::workerInspectionEnabled -> m_enabled.
        WorkerAgentState::autoconnectToWorkers -> m_shouldPauseDedicatedWorkerOnStart.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::disable):
        Remove unused state, not read.

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove code for Mac Lion
        https://bugs.webkit.org/show_bug.cgi?id=123542

        Reviewed by Anders Carlsson.

        Removed the code for Mac OS X 10.7.

        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::flushContext):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollAnimationEnabledForSystem):
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::reboundDeltaForElasticDelta):
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):
        * platform/mac/WebCoreNSCellExtras.h:
        * platform/mac/WebCoreNSCellExtras.m:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::textField):

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        85 inspector tests asserting in DrawingAreaProxyImpl::updateAcceleratedCompositingMode()
        when there is a stale WebKitTestRunner preference
        https://bugs.webkit.org/show_bug.cgi?id=115115

        Reviewed by Darin Adler.

        * page/Settings.cpp:
        (WebCore::Settings::setMockScrollbarsEnabled):
        (WebCore::Settings::setUsesOverlayScrollbars):
        Added FIXMEs.

2013-10-30  Andreas Kling  <akling@apple.com>

        Take line boxes out of the arena.
        <https://webkit.org/b/123533>

        Stop arena-allocating line boxes so we can move forward on improving
        render tree memory management. This will also allow more rendering
        code to take advantage of malloc optimizations.

        This will likely regress performance on some micro-benchmarks, but
        it's something we want to do sooner rather than later so we have time
        to restabilize it. All improvements to the simple line layout's
        coverage will help with recouping whatever is regressed.

        BiDi runs are the only remaining user of the arena now.

        Reviewed by Antti Koivisto

2013-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorAgent::restore functionality
        https://bugs.webkit.org/show_bug.cgi?id=123525

        Reviewed by Timothy Hatcher.

        Remove unused InspectorAgent restore functionality.

        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.cpp:
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:

2013-10-30  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r158288): media/media-can-play-mpeg4-video.html fails
        https://bugs.webkit.org/show_bug.cgi?id=123530

        Reviewed by Eric Carlson.

        Lower case the mime type before passing it along to MediaPlayer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        Add a way to fulfill promises from DOM code
        https://bugs.webkit.org/show_bug.cgi?id=123466

        Reviewed by Sam Weinig.

        This is not perfect, as it strongly ties DOM code to JavaScript. In the future, we
        can make it better e.g. by subclassing, so that only a base interface would be exposed.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSBindingsAllInOne.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        Added JSDOMPromise.

        * bindings/js/JSDOMPromise.cpp: Added.

        * bindings/js/JSDOMPromise.h: Added.
        (WebCore::PromiseWrapper::create):
        (WebCore::PromiseWrapper::fulfill): A random set of specializations that I needed
        in WebCrypto code so far.
        (WebCore::PromiseWrapper::reject): Ditto.

2013-10-30  Santosh Mahto  <santosh.ma@samsung.com>

        contentEditable deleting lists when list items are block level
        https://bugs.webkit.org/show_bug.cgi?id=122602

        Reviewed by Ryosuke Niwa.

        When listitems are styled with display:block/float then inserting paragraph
        twice at end of listitem delete entire list. Generally when listitem is empty
        then we delete the listitem on inserting paragraph. In this issue, on inserting
        first paragraph one empty listitem is created, and on inserting second paragraph
        we try to delete that empty listitem. but it misbehave becasue of incomplete 
        definition of htmlediting::isLisItem() and entire list is deleted.

        htmlediting::isListItem() check only render object to decide whether it is 
        list or not, so if any LI element is block level then isListItem return false.
        Now after this patch if parent of current node is list element then node is
        treated as listItem.

        Test: editing/execCommand/hit-enter-twice-atendof-block-styled-listitem.html

        * editing/htmlediting.cpp:
        (WebCore::isListItem): Modified condition to check if parent node is list;

2013-10-30  Jer Noble  <jer.noble@apple.com>

        Unreviewed EFL build fix; give MediaEngineSupportParameters struct a default constructor.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isTypeSupported):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaEngineSupportParameters::MediaEngineSupportParameters):

2013-10-30  Andreas Kling  <akling@apple.com>

        Let Page::renderTreeSize() be the number of renderers.
        <https://webkit.org/b/123518>
        <rdar://problem/15348679>

        The old metric was "number of bytes allocated in RenderArena" and
        that was heading towards obsolescence, fast.

        Instead, keep a count of RenderObjects instantiated on RenderView.
        While a bit ugly, this lets us move forward with rendering memory
        model improvements without breaking features.

        Reviewed by Beth Dakin.

2013-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        WebKit/win/WebKitGraphics.h:void WebDrawText(WebTextRenderInfo*); is never called
        https://bugs.webkit.org/show_bug.cgi?id=123485

        Reviewed by Brent Fulgham.

        WebDrawText is the only caller of WebCoreDrawTextAtPoint, so we can
        delete that as well.

        Because there is no behavior difference, no new tests are necessary.

        * platform/win/WebCoreTextRenderer.cpp:
        * platform/win/WebCoreTextRenderer.h:

2013-10-30  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r158289.

        * CMakeLists.txt:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):

2013-10-30  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        Build fails with EGLConfigSelector.cpp when OpenGL ES is not used
        https://bugs.webkit.org/show_bug.cgi?id=119037

        Reviewed by Brent Fulgham.

        Build fix for EGLConfigSelector.cpp

        No new tests, no behavior change.

        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp:
        (WebCore::EGLConfigSelector::createConfig):

2013-10-30  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Explicitly initialize base class in MediStreamTrackPrivate copy constructor
        https://bugs.webkit.org/show_bug.cgi?id=123473

        Reviewed by Eric Carlson.

        No new tests needed.

        Ports that enable -Werror=extra must do that to compile.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r158291.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):

2013-10-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158243.
        http://trac.webkit.org/changeset/158243
        https://bugs.webkit.org/show_bug.cgi?id=123520

        Change was wrong (Requested by smfr on #webkit).

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintCompositionUnderline):

2013-10-30  peavo@outlook.com  <peavo@outlook.com>

        Favicons are flipped in vertical direction in WinCairo builds.
        https://bugs.webkit.org/show_bug.cgi?id=102077

        Reviewed by Brent Fulgham.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Add MediaSource compatable loading functions to MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=123353

        Reviewed by Eric Carlson.

        Add methods to MediaPlayer to allow it to select the correct MediaPlayerFactory
        when attempting to load a MediaSource URL.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::isTypeSupported):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/MediaPlayer.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

        Remove the isSupportedMediaSourceMIMEType() method:
        * platform/MIMETypeRegistry.h:
        * platform/efl/MIMETypeRegistryEfl.cpp:
        * platform/mac/MIMETypeRegistryMac.mm:


2013-10-30  Brady Eidson  <beidson@apple.com>

        IDBCursorBackendLevelDB should be made cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=123513

        Rubberstamped by Andreas Kling.

        Because of all the already-done refactoring, this is basically a file-move and global rename.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcxproj/WebCore.vcxproj:

        * Modules/indexeddb/IDBCursorBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp.
        * Modules/indexeddb/IDBCursorBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h.

        * Modules/indexeddb/IDBCursorBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:

2013-10-29  Jer Noble  <jer.noble@apple.com>

        [MSE] Remove legacy Media Source APIs (WebKitMediaSource, WebKitSourceBuffer, WebKitSourceBufferList)
        https://bugs.webkit.org/show_bug.cgi?id=123463

        Reviewed by Eric Carlson.

        No new tests; updated test results.

        Remove all reference to WebKitMediaSource, WebKitSourceBuffer, and WebKitSourceBufferList.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Modules/mediasource/DOMURLMediaSource.idl:
        * Modules/mediasource/WebKitMediaSource.cpp: Removed.
        * Modules/mediasource/WebKitMediaSource.h: Removed.
        * Modules/mediasource/WebKitMediaSource.idl: Removed.
        * Modules/mediasource/WebKitSourceBuffer.cpp: Removed.
        * Modules/mediasource/WebKitSourceBuffer.h: Removed.
        * Modules/mediasource/WebKitSourceBuffer.idl: Removed.
        * Modules/mediasource/WebKitSourceBufferList.cpp: Removed.
        * Modules/mediasource/WebKitSourceBufferList.h: Removed.
        * Modules/mediasource/WebKitSourceBufferList.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventTargetFactory.in:

2013-10-30  Antti Koivisto  <antti@apple.com>

        Unbreak the release build.

        * rendering/SimpleLineLayoutFunctions.cpp:

2013-10-30  Liangjun Zeng  <lizeng@blackberry.com>

        Fix memory leaks in platform/image-encoders/JPEGImageEncoder.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118781

        Reviewed by Brent Fulgham.

        We can find the function "jpeg_finish_compress" call the function "jpeg_abort" at the end.
        And the comments of "jpeg_abort" is "Abort processing of a JPEG compression operation,
        but don't destroy the object itself". (We can find these in the "jcapimin.c" of jpeg)
        So the compression object destroy need be called.
        No new tests because this doesn't change functionality.

        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):

2013-10-30  Antti Koivisto  <antti@apple.com>

        Add debug settings for simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=123514

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/Settings.in:
        
            Add simpleLineLayoutEnabled and simpleLineLayoutDebugBordersEnabled.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        (WebCore::SimpleLineLayout::paintFlow):

2013-10-30  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Cookies are sometimes not set in download request.
        https://bugs.webkit.org/show_bug.cgi?id=123445

        Reviewed by Brent Fulgham.

        Sometimes cookies are not set in the download request because the cookie file cannot be opened,
        it's already been opened by the ResourceHandleManager for writing.
        This can be fixed by getting the cookie list from the share handle in ResourceHandleManager instead.
        This will also improve performance, as there is no need to read and parse the cookie file for each download.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init): Use share handle to get cookie list.

2013-10-30  ChangSeok Oh  <changseok.oh@collabora.com>

        Unguard Element::childShouldCreateRenderer
        https://bugs.webkit.org/show_bug.cgi?id=123496

        Reviewed by Andreas Kling.

        Make Element::childShouldCreateRenderer normally accessible. Guarding it with flags
        just leaves potential build issues.

        No new tests since no functionality changed.

        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Make MediaSourcePrivate, SourceBufferPrivate classes RefCounted.
        https://bugs.webkit.org/show_bug.cgi?id=123350

        Reviewed by Darin Adler.

        Make the MediaSourcePrivate and SourceBufferPrivate classes RefCounted so that
        they can be referenced both by MediaSource/SourceBuffer, and by the MediaPlayerPrivate
        which creates them.

        Change OwnPtr -> RefPtr everywhere:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::setPrivateAndOpen):
        (WebCore::MediaSourceBase::createSourceBufferPrivate):
        * Modules/mediasource/MediaSourceBase.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::create):
        (WebCore::SourceBuffer::SourceBuffer):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/WebKitMediaSource.cpp:
        (WebCore::WebKitMediaSource::addSourceBuffer):
        * Modules/mediasource/WebKitSourceBuffer.cpp:
        (WebCore::WebKitSourceBuffer::create):
        (WebCore::WebKitSourceBuffer::WebKitSourceBuffer):
        * Modules/mediasource/WebKitSourceBuffer.h:
        * html/HTMLMediaSource.h:
        * platform/graphics/MediaSourcePrivate.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::SourceBufferPrivate):

2013-10-30  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Remove unused runtime enabled
        https://bugs.webkit.org/show_bug.cgi?id=123509

        Reviewed by Anders Carlsson.

        Some of the runtime enabled features were only ever used by the V8 bindings
        and can be removed as no WebKit code sets or reads them.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:

2013-10-30  Antti Koivisto  <antti@apple.com>

        Make SimpleLineLayout::Layout a class
        https://bugs.webkit.org/show_bug.cgi?id=123508

        Reviewed by Mario Sanchez Prada.

        Improve encapsulation.

2013-10-30  Antti Koivisto  <antti@apple.com>

        REGRESSION(r158214): It made zillion tests crash on GTK and EFL
        https://bugs.webkit.org/show_bug.cgi?id=123505

        * rendering/SimpleLineLayout.h: Add WTF_MAKE_FAST_ALLOCATED

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Store video-sink in a bin
        https://bugs.webkit.org/show_bug.cgi?id=122831

        Reviewed by Gustavo Noronha Silva.

        For the upcoming mediastream playback support the player will
        handle a non-playbin-based pipeline that will require a slightly
        different video rendering chain. This patch generalizes the
        encapsulation of the video sink in a bin, just like the audio sink
        case.

        No new tests, no change in functionality.

2013-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r154614): Opening and closing a picture on Facebook resets scroll position
        https://bugs.webkit.org/show_bug.cgi?id=122882

        Reviewed by Anders Carlsson.

        scrollLeft and scrollTop have to continue to function in the strict mode for the Web compatiblity.
        In particular, www.facebook.com and build.webkit.org depend on this behavior as of October 29th, 2013.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):

2013-10-29  Brady Eidson  <beidson@apple.com>

        IDBTransactionBackend should be cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123449

        Reviewed by Beth Dakin.

        - Rename IDBTransactionBackendLevelDB to IDBTransactionBackendImpl
        - Rename IDBTransactionBackendLevelDBOperations to IDBTransactionBackendOperations
        - Move their files from the leveldb subdirectory to the indexeddb directory

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp.
        * Modules/indexeddb/IDBTransactionBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h.
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp.
        * Modules/indexeddb/IDBTransactionBackendOperations.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h.

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::maybeCreateTransactionBackend):

2013-10-29  Sam Weinig  <sam@webkit.org>

        Modernize DatasetDOMStringMap and ClassList a bit
        https://bugs.webkit.org/show_bug.cgi?id=123491

        Reviewed by Andreas Kling.

        * dom/DatasetDOMStringMap.cpp:
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        * dom/ElementRareData.h:
        * html/ClassList.cpp:
        * html/ClassList.h:
        Pass the owner Element by reference and store in a std::unique_ptr.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Attempted build-fix after http://trac.webkit.org/changeset/158234

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction): Implement this!

2013-10-29  Andreas Kling  <akling@apple.com>

        ElementData construction helpers should return PassRef.
        <https://webkit.org/b/123487>

        Make functions that create new ElementData objects return appropriate
        PassRef pointers instead of PassRefPtr.

        Reviewed by Anders Carlsson.

2013-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        GTK+ build fix attempt after r158220.

        * GNUmakefile.list.am:

2013-10-29  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackendLevelDB to generic IDBBackingStoreInterface
        https://bugs.webkit.org/show_bug.cgi?id=123483

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBCursorBackendInterface.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        (WebCore::IDBCursorBackendLevelDB::create):

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::registerOpenCursor):
        (WebCore::IDBTransactionBackendLevelDB::unregisterOpenCursor):
        (WebCore::IDBTransactionBackendLevelDB::closeOpenCursors):
        (WebCore::IDBTransactionBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * WebCore.xcodeproj/project.pbxproj: Export a required header.

2013-10-29  Seokju Kwon  <seokju@webkit.org>

        Remove mutable keyword from member variables of XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=123481

        Reviewed by Andreas Kling.

        No new tests, no change in functionality.

        * xml/XMLHttpRequest.h: Remove mutable keyword as these are no longer used in const functions.

2013-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Underline bounds cannot be queried before underline itself is drawn
        https://bugs.webkit.org/show_bug.cgi?id=123310

        Reviewed by Simon Fraser

        GraphicsContext's drawLineForText function is used to draw underlines,
        strikethroughs, and overlines. Before drawing the line, this function
        modifies the bounds given to it in order to make underlines crisp. However,  
        this means that it is impossible to know where an underline will be drawn
        before drawing it. This patch pulls out this adjustment computation into 
        InlineTextBox, then passes the result to drawLineForText.

        Because there should be no observable difference, no tests need to be updated.

        * platform/graphics/GraphicsContext.h: Changing the signature of drawLineForText
        so it can accept bounds from our helper function
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::drawLineForText): Update to work with new
        signature of drawLineForText
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint): Update the last call site of drawLineForText
        * rendering/InlineTextBox.cpp:
        (WebCore::computeBoundsForUnderline): Pure function that computes the adjusted
        bounds of the underline about to be drawn
        (WebCore::drawLineForText): calls computeBoundsForUnderline and then
        GraphicsContext::drawLineForText
        (WebCore::InlineTextBox::paintDecoration): Use new drawLineForText function
        (WebCore::InlineTextBox::paintCompositionUnderline): Ditto

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        Beef up CryptoKey
        https://bugs.webkit.org/show_bug.cgi?id=123462

        Fix a mismerge, remove duplicate CryptoKeyType declaration.

        * crypto/CryptoKey.h:

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        Beef up CryptoKey
        https://bugs.webkit.org/show_bug.cgi?id=123462

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithmIdentifier.h: Added an enum with all registered algorithms
        (they don't have to be all implemented in any port).

        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::CryptoKey): Initialize base class variables.
        (WebCore::CryptoKey::type): Convert internal representation for bindings use.
        (WebCore::CryptoKey::buildAlgorithmDescription): Ditto. This function is supposed
        to be called by derived classes before adding other keyes.
        (WebCore::CryptoKey::usages): Convert internal representation for bindings use.

        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::extractable): Expose for bindings.
        (WebCore::CryptoKey::allows): A faster way to check allowed key usage from C++ code.

        * crypto/CryptoKey.idl: Added SkipVTableValidation, because validation doesn't work
        with derived classes. Corrected "usages" attribute name.

        * crypto/CryptoKeyFormat.h: Added. 
        * crypto/CryptoKeyType.h: Added.
        * crypto/CryptoKeyUsage.h: Added.
        Added enums used by CryptoKey.

2013-10-29  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Adding Nix files in Source/Platform to trunk
        https://bugs.webkit.org/show_bug.cgi?id=118331

        Reviewed by Benjamin Poulain.

        Add Nix WebAudio implementation that just forward some calls to our API.
        This patch is part of the upstream process, tests will be landed by other patches.

        * platform/audio/nix/AudioBusNix.cpp: Added.
        * platform/audio/nix/AudioDestinationNix.cpp: Added.
        * platform/audio/nix/AudioDestinationNix.h: Added.
        * platform/audio/nix/FFTFrameNix.cpp: Added.
        * platform/nix/support/MultiChannelPCMData.cpp: Added.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackendLevelDB to generic IDBBackingStoreInterface::Transaction.
        https://bugs.webkit.org/show_bug.cgi?id=123475

        Reviewed by Tim Horton.

        Currently it's using IDBBackingStoreLevelDB::Transaction, which hinders the goal of:
        https://bugs.webkit.org/show_bug.cgi?id=123449 - IDBTransactionBackend should be cross platform

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBIndexWriter.cpp:
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h:

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseMetaData):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::commit):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

2013-10-29  Dean Jackson  <dino@apple.com>

        Move InlineTextBox's text painting to it's own class
        https://bugs.webkit.org/show_bug.cgi?id=123355

        Reinstate the LGPL license. I incorrectly told Myles to
        use another license on these new files.

        * rendering/TextPainter.cpp:
        * rendering/TextPainter.h:

2013-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Move InlineTextBox's text painting to it's own class
        https://bugs.webkit.org/show_bug.cgi?id=123355

        Reviewed by Dean Jackson.

        Implementing text-decoration-skip: ink requires drawing text
        twice (once regularly, and once with a thick outline into a mask).
        This patch pulls out the relevant text drawing code from
        InlineTextBox into a new class, called TextPainter, which can be re-used
        to draw text multiple times.

        Because there should be no observable difference, no tests need to be updated.

        * CMakeLists.txt: Adding new TextPainter class
        * GNUmakefile.list.am: Adding new TextPainter class
        * WebCore.vcxproj/WebCore.vcxproj: Adding new TextPainter class
        * WebCore.vcxproj/WebCore.vcxproj.filters: Adding new TextPainter
        class
        * WebCore.xcodeproj/project.pbxproj: Adding new TextPainter class
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Moving text drawing code from
        this function
        * rendering/RenderingAllInOne.cpp: Adding new TextPainter class
        * rendering/TextPainter.cpp: Added.
        (WebCore::TextPainter::TextPainter):
        (WebCore::drawTextOrEmphasisMarks):
        (WebCore::paintTextWithShadows):
        (WebCore::rotation):
        (WebCore::TextPainter::paintText): New location for text drawing
        code
        (WebCore::TextPainter::paintTextInContext):
        * rendering/TextPainter.h: Added.
        (WebCore::SavedDrawingStateForMask::SavedDrawingStateForMask):
        (WebCore::TextPainter::boxRect):

2013-10-29  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Build fix after 158223; make TileController use float for scales.

        This matches what we do in other places, and fixes the constant
        issue with exporting symbols that include CGFloat.

        * WebCore.exp.in:
        * platform/graphics/ca/mac/TileController.h:
        (WebCore::TileController::scale):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setScale):

2013-10-29  Antti Koivisto  <antti@apple.com>

        Try to keep MSVC happy.

        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        More correct build fix after 158223.

        Only fails in release because it's inline.

        * WebCore.exp.in:

2013-10-29  Antti Koivisto  <antti@apple.com>

        Use left/right instead of left/width for simple text runs
        https://bugs.webkit.org/show_bug.cgi?id=123465

        Reviewed by Andreas Kling.

        This simplifies the code a bit.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::adjustRunOffsets):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Try fixing the Mac build (though I have no idea why
        this wouldn't fail locally)...

        * WebCore.exp.in:

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Support tiled drawing and use it for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=123422

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2013-10-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac MediaStream] implement AVFoundation backed MediaStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=123316

        Reviewed by Jer Noble

        No new tests, existing tests updated.

        * CMakeLists.txt: Add MediaStreamSourceStates.cpp.

        * Modules/mediastream/MediaSourceStates.cpp:
        (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates.
        (WebCore::MediaSourceStates::sourceType): Ditto.
        (WebCore::MediaSourceStates::facingMode): Ditto.
        * Modules/mediastream/MediaSourceStates.h: Ditto.
        * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::addRemoteSource):
        (WebCore::MediaStream::removeRemoteSource):

        * Modules/mediastream/MediaStreamCapabilities.cpp:
        (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates
        (WebCore::MediaStreamCapabilities::facingMode): Ditto.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the
            private track do that. Change private track parameter to ref because it can't be NULL.
        (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto.
        (WebCore::MediaStreamTrack::setSource): Pass through to private track.
        (WebCore::MediaStreamTrack::stopped): Ditto.
        (WebCore::MediaStreamTrack::states): Ditto.
        (WebCore::MediaStreamTrack::capabilities): Ditto.
        (WebCore::MediaStreamTrack::applyConstraints): Ditto.
        (WebCore::MediaStreamTrack::stopProducingData): Ditto.
        (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't
            schedule an 'ended' event if called as a side effect of the stop() method having been
            called as per spec.
        (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged.
        (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged.
        (WebCore::MediaStreamTrack::stop): Pass through to private track.
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints.

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * bindings/js/JSMediaSourceStatesCustom.cpp:
        (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode
            is Unknown.

        * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and
            undefined method prototype.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None.
        (WebCore::MediaStreamDescriptor::removeSource): Ditto.
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

        * platform/mediastream/MediaStreamSource.cpp:
        (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes
            to Live, stopProducingData when it changes to Ended.
        (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers.
        (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers
            are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled.
        (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have
            stopped, the spec says that track.stop() should permanently stop the track's source.
        * platform/mediastream/MediaStreamSource.h:
        (WebCore::MediaStreamSource::name): Make virtual so derived classes can override.
        (WebCore::MediaStreamSource::setName): Ditto.
        (WebCore::MediaStreamSource::readyState): Ditto.
        (WebCore::MediaStreamSource::enabled): Ditto.
        (WebCore::MediaStreamSource::muted): Ditto.
        (WebCore::MediaStreamSource::setReadonly): Ditto.
        (WebCore::MediaStreamSource::remote): Ditto.
        (WebCore::MediaStreamSource::setRemote): Ditto.
        (WebCore::MediaStreamSource::startProducingData): Added.
        (WebCore::MediaStreamSource::stopProducingData): Added.

        * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to
            its own file.

        * platform/mediastream/MediaStreamSourceStates.cpp: Added.
        (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the 
            strings are available to platform code.
        (WebCore::MediaStreamSourceStates::sourceType): Ditto.
        * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr.
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables.
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer.
        (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer.
        (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client.
        (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source.
        (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged.
        (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source.
        (WebCore::MediaStreamTrackPrivate::states): Ditto.
        (WebCore::MediaStreamTrackPrivate::type): Ditto.
        (WebCore::MediaStreamTrackPrivate::capabilities): Ditto.
        (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto.
        (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes.
        (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto.
        (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto.
        (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query.
        (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/mac/AVAudioCaptureSource.h: Added.
        * platform/mediastream/mac/AVAudioCaptureSource.mm: Added.

        * platform/mediastream/mac/AVCaptureDeviceManager.h: Added.
        * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added.

        * platform/mediastream/mac/AVMediaCaptureSource.h: Added.
        * platform/mediastream/mac/AVMediaCaptureSource.mm: Added.

        * platform/mediastream/mac/AVVideoCaptureSource.h: Added.
        * platform/mediastream/mac/AVVideoCaptureSource.mm: Added.

        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement.
        (WebCore::MediaStreamCenterMac::createMediaStream): Ditto.
        (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto.

        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes.
        (WebCore::MockMediaStreamCenter::createMediaStream):

2013-10-29  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Layout error when the shape has negative top coordinate and it's applied on the second region
        <https://webkit.org/b/123346>

        Reviewed by David Hyatt.

        We have a layout error when there is a shape applied on the second region, and it has a negative 'top' coordinate.
        Since shapeInsideInfo::shapeLogicalTop() can return negative numbers, we need to check for it, when we're positioning
        the first line in the region.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-regions-with-negative-shape-top.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-29  Brady Eidson  <beidson@apple.com>

        Get IDBTransactionBackendLevelDBOperations *almost* ready to go cross platform.
        https://bugs.webkit.org/show_bug.cgi?id=123451

        Reviewed by NOBODY (My bad, non-reviewed, non-building code got in there)

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls): Remove the auto line I was trying from review feedback.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Get IDBTransactionBackendLevelDBOperations *almost* ready to go cross platform.
        https://bugs.webkit.org/show_bug.cgi?id=123451

        Reviewed by Andreas Kling.

        This involves:
        - Splitting out IDBTransactionBackendLevelDB::Operation into its own header
        - Splitting out IDBDatabaseBackendImpl::PendingOpenCall into its own header
        - Reworking the LevelDB Operations to handle the base class IDBTransactionBackendInterface
        - Adding virtual methods in a few of the *Interface classes to support the above

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCallbacks.h:

        * Modules/indexeddb/IDBCursorBackendInterface.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:

        * Modules/indexeddb/IDBOperation.h: Added.
        (WebCore::IDBOperation::~IDBOperation):

        * Modules/indexeddb/IDBPendingOpenCall.h: Added.
        (WebCore::IDBPendingOpenCall::create):
        (WebCore::IDBPendingOpenCall::callbacks):
        (WebCore::IDBPendingOpenCall::databaseCallbacks):
        (WebCore::IDBPendingOpenCall::version):
        (WebCore::IDBPendingOpenCall::transactionId):
        (WebCore::IDBPendingOpenCall::IDBPendingOpenCall):

        * Modules/indexeddb/IDBRequest.h:

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::CursorIterationOperation::create):
        (WebCore::IDBCursorBackendLevelDB::CursorAdvanceOperation::create):
        (WebCore::IDBCursorBackendLevelDB::CursorPrefetchIterationOperation::create):
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::scheduleTask):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCountOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleClearOperation):
        (WebCore::IDBTransactionBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::create):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::VersionChangeAbortOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-29  Antti Koivisto  <antti@apple.com>

        Make SimpleLineLayout::Layout a variable size object
        https://bugs.webkit.org/show_bug.cgi?id=123459

        Reviewed by Andreas Kling.

        Less memory, less indirection.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        * rendering/SimpleLineLayout.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::computeFlowFirstLineBaseline):
        (WebCore::SimpleLineLayout::computeFlowLastLineBaseline):
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::end):

2013-10-29  Andreas Kling  <akling@apple.com>

        RenderObject::outlineStyleForRepaint() should return a reference.
        <https://webkit.org/b/123453>

        Kill a FIXME and make outlineStyleForRepaint() return a RenderStyle&.

        Reviewed by Antti Koivisto.

2013-10-29  Andreas Kling  <akling@apple.com>

        Move more of SVG resources cache to using RenderElement.
        <https://webkit.org/b/123452>

        Make some more RenderSVGResourcesCache methods take RenderElement&
        instead of RenderObject*.

        Also removed a double hash lookup in removeResourcesFromRenderer().

        Reviewed by Antti Koivisto.

2013-10-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove old Inspector.json version files and generators
        https://bugs.webkit.org/show_bug.cgi?id=123426

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector-0.1.json: Removed.
        * inspector/Inspector-1.0.json: Removed.
        * inspector/generate-inspector-protocol-version: Removed.

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GTK] DOM bindings documentation errors
        https://bugs.webkit.org/show_bug.cgi?id=123448

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/WebKitDOMCustom.h: Basic documentation for
        return types.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Generate Returns documentation tag for
        non-void return types and provide basic documentation.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        Reset tests results.
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:

2013-10-24  Brent Fulgham  <bfulgham@apple.com>

        Invalid cast in WebCore::toRenderMathMLBlock
        https://bugs.webkit.org/show_bug.cgi?id=121728
        rdar://problem/15046151

        Reviewed by Dean Jackson.

        Tested by: mathml/arbitrary-markup.html

        * dom/Element.h: Expose childShouldCreateRenderer for
        MathML as well as SVG builds.
        * dom/Node.h: 
        (WebCore::Node::isMathMLElement): Added.
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::create): Create as MathML Element.
        (WebCore::MathMLElement::childShouldCreateRenderer):
        Only allow the child to emit a renderer if it is a
        MathML element.
        * mathml/MathMLElement.h:

2013-10-29  Andreas Kling  <akling@apple.com>

        SVG: applyStrokeStyleToContext should take a RenderElement&.
        <https://webkit.org/b/123447>

        ..and a RenderStyle& too, for that matter.

        Reviewed by Anders Carlsson.

        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):

            Have this take a RenderElement& and RenderStyle& instead of
            raw pointers. Tweaked a silly-looking loop.

        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGShape.cpp:

            Moved BoundingRectStrokeStyleApplier helper class into the
            cpp file since it wasn't being used anywhere else.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):

            Remove ampersands.

2013-10-29  Antti Koivisto  <antti@apple.com>

        Multiple runs per line on simple line path
        https://bugs.webkit.org/show_bug.cgi?id=123446

        Reviewed by Andreas Kling.

        By allowing multiple runs per line we can support text flows with consecutive whitespaces in the middle.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Remove space test.
            The improved test coverage found a few more cases that we need to disallow.

        (WebCore::SimpleLineLayout::adjustRunOffsets):
            
            Round the run positions and widths so they match line boxes.
            Adjust for text-align.

        (WebCore::SimpleLineLayout::create):
        
            Split lines with consecutive spaces into runs.

        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::resolver):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::lineIndex):
        (WebCore::SimpleLineLayout::RunResolver::Run::Run):
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::Run::lineIndex):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator++):
        
            Removed unnecessary operators.

        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::simpleRun):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::begin):
        (WebCore::SimpleLineLayout::RunResolver::end):
        
            Resolver -> RunResolver

        (WebCore::SimpleLineLayout::LineResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::LineResolver::LineResolver):
        (WebCore::SimpleLineLayout::LineResolver::begin):
        (WebCore::SimpleLineLayout::LineResolver::end):
        
            Add LineResolver around RunResolver. It resolves the line rectangles.

        (WebCore::SimpleLineLayout::runResolver):
        (WebCore::SimpleLineLayout::lineResolver):

2013-10-29  Chris Fleizach  <cfleizach@apple.com>

        AX: elements with explicit tabindex should expose AXFocused as writable, since mouse clicks can focus it
        https://bugs.webkit.org/show_bug.cgi?id=121335

        Reviewed by Mario Sanchez Prada.

        Re-order logic that determines if a <span> should appear as an accessible element. 
        The change is that if an element canSetFocus() it should always be in the AX tree.

        Test: accessibility/tabindex-elements-are-accessible.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GTK] enable media-stream in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=123144

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Add new MediaStream files to the GTK port build.

2013-10-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Webkit does not expose AXRequired on input type=file
        https://bugs.webkit.org/show_bug.cgi?id=123376

        Reviewed by Mario Sanchez Prada.

        File upload buttons should expose AXRequired, since they take an input state.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::supportsRequiredAttribute):
        (WebCore::AccessibilityNodeObject::alternativeText):

2013-10-29  Jinwoo Song  <jinwoo7.song@samsung.com>

        Re-enable simple line layout for EFL
        https://bugs.webkit.org/show_bug.cgi?id=123402

        Reviewed by Antti Koivisto.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): 8-bit TextRun support is now enabled for EFL port, so the port
        can use the simple line layout.

2013-10-29  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, follow-up to r158185. Export the required symbol.
        This should fix the Mac debug build.

        * WebCore.exp.in:

2013-10-29  Santosh Mahto  <santosh.ma@samsung.com>

        Text selected with double-click gets unselected after DOM modification
        https://bugs.webkit.org/show_bug.cgi?id=114227

        Reviewed by Ryosuke Niwa.

        Before this patch when selection is done by double-click (start and base remain
        same) and DOM is modified then selection gets vanished. This does not
        happen when selection is done by dragging mouse. This happens because
        on double-click base and extent remain the same and on DOM
        modification we update the selection with base and extent, so we loose
        the selection. Since in double-click case start/end contain the
        correct selection, same should be used after dom modification to
        update selection.

        Test: editing/selection/double-click-selection-with-dom-mutation.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWasReplaced): use start/end to update
        selection in case double click selection. Added a check for base !=
        extent, if base != extent use base/extent to update the selection
        otherwise use start/end with directionality check.

2013-10-29  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Display anonymous regions in DRT
        https://bugs.webkit.org/show_bug.cgi?id=122963

        Reviewed by Alexandru Chiculita.

        After https://bugs.webkit.org/show_bug.cgi?id=119135, css regions are modelled using an anonymous
        RenderNamedFlowFragment object inside the block having a valid -webkit-flow-from.
        This patch changes the way elements | pseudo-elements with -webkit-flow-from are displayed
        in test dumps.

        Before:
            RenderRegion {DIV} at (200,200) size 52x52 [border: (1px solid #000000)]
        After:
            RenderBlock (positioned) {DIV} at (200,200) size 52x52 [border: (1px solid #000000)]
                RenderNamedFlowFragment at (1,1) size 50x50

        Before:
            Flow Threads
                Thread with flow-name 'article'
                Regions for flow 'article'
                    RenderRegion {DIV} #region_1
                    RenderRegion {DIV} #region_2
        After:
            Named flows
                Named flow 'article'
                Regions for named flow 'article'
                    RenderNamedFlowFragment (anonymous child of {DIV::before} #region_1)
                    RenderNamedFlowFragment (anonymous child of {DIV} #region_2)

        Changed existing tests based on the new dumps.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::renderName):
        * rendering/RenderNamedFlowFragment.h: Add a comment explaining the purpose of the class.
        * rendering/RenderRegion.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeRenderRegionList): Adjust function to display info for anonymous regions too.
        (WebCore::writeRenderNamedFlowThreads): Separate dump of valid and invalid regions for a named flow.

2013-10-29  Zan Dobersek  <zdobersek@igalia.com>

        Move writeIndent, overloaded << operators from RenderTreeAsText to TextStream
        https://bugs.webkit.org/show_bug.cgi?id=116012

        Reviewed by Simon Fraser.

        The writeIndent method and overloaded << operators for writing out vectors and points and rectangles
        of various types are not specific to the render tree nor do they depend on any rendering-specific interface.

        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        (ScrollingStateNode): Remove the writeIndent declaration, it's functionally the same as the TextStream method.
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer): Ditto.
        * platform/graphics/filters/DistantLightSource.cpp: Remove the RenderTreeAsText.h inclusion or replace it with
        the inclusion of the TextStream.h header where required. The writeIndent method is now declared there.
        * platform/graphics/filters/FEBlend.cpp: Ditto.
        * platform/graphics/filters/FEColorMatrix.cpp: Ditto.
        * platform/graphics/filters/FEComponentTransfer.cpp: Ditto.
        * platform/graphics/filters/FEComposite.cpp: Ditto.
        * platform/graphics/filters/FEConvolveMatrix.cpp: Ditto.
        * platform/graphics/filters/FECustomFilter.cpp: Ditto.
        * platform/graphics/filters/FEDiffuseLighting.cpp: Ditto.
        * platform/graphics/filters/FEDisplacementMap.cpp: Ditto.
        * platform/graphics/filters/FEDropShadow.cpp: Ditto.
        * platform/graphics/filters/FEFlood.cpp: Ditto.
        * platform/graphics/filters/FEGaussianBlur.cpp: Ditto.
        * platform/graphics/filters/FEMerge.cpp: Ditto.
        * platform/graphics/filters/FEMorphology.cpp: Ditto.
        * platform/graphics/filters/FEOffset.cpp: Ditto.
        * platform/graphics/filters/FESpecularLighting.cpp: Ditto.
        * platform/graphics/filters/FETurbulence.cpp: Ditto.
        * platform/graphics/filters/SourceAlpha.cpp: Ditto.
        * platform/graphics/filters/SourceGraphic.cpp: Ditto.
        * platform/text/TextStream.cpp: Move the writeIndent and operators' definitions here.
        (WebCore::operator<<):
        (WebCore):
        (WebCore::writeIndent):
        * platform/text/TextStream.h: Move the writeIndent and operators' declarations here.
        (WebCore):
        (TextStream):
        (WebCore::TextStream::operator<<):
        * rendering/RenderTreeAsText.cpp: Move the writeIndent and operators' definitions into TextStream.
        (WebCore):
        * rendering/RenderTreeAsText.h: Move the writeIndent and operators' declarations into TextStream.
        (WebCore):

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        Clean up ScopedEventQueue
        https://bugs.webkit.org/show_bug.cgi?id=123408

        Reviewed by Darin Adler.

        Clean up the ScopedEventQueue implementation. ScopedEventQueue::instance() should return a reference to a
        NeverDestroyed<ScopedEventQueue> object. The static ScopedEventQueue::s_instance pointer is removed.

        The ScopedEventQueue destructor, the dispatchAllEvents method and the scope level incrementation/decrementation
        methods are made private. NeverDestroyed<ScopedEventQueue> and EventQueueScope are made friends of the
        ScopedEventQueue class so they can access the constructor and the incrementation/decrementation methods, respectively.

        ScopedEventQueue method definitions are reordered to follow the order of their declarations in the header file.
        ScopedEventQueue::dispatchAllEvents() now uses std::move to efficiently dispatch and clear all currently queued events.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchScopedEvent):
        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::instance):
        (WebCore::ScopedEventQueue::dispatchAllEvents):
        * dom/ScopedEventQueue.h:
        (WebCore::EventQueueScope::EventQueueScope):
        (WebCore::EventQueueScope::~EventQueueScope):

2013-10-28  Andreas Kling  <akling@apple.com>

        applyTextTransform() should take a const RenderStyle&.
        <https://webkit.org/b/123434>

        This function is always called with an existing RenderStyle object.

        Reviewed by Anders Carlsson.

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderSVGResource::applyResource() should take a const RenderStyle&.
        <https://webkit.org/b/123433>

        These functions are always called with an existing RenderStyle object
        so let them take a const reference instead of a raw pointer.
        Also sprinkled some missing OVERRIDEs.

        Reviewed by Anders Carlsson.

2013-10-28  Andreas Kling  <akling@apple.com>

        Remove unused RenderTextControl::textBaseStyle().
        <https://webkit.org/b/123432>

        Reviewed by Anders Carlsson.

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        HTML input type objects should be managed through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123160

        Reviewed by Darin Adler.

        Make the constructors of the InputType subclasses public. This makes it possible to use std::make_unique on these classes
        and makes the T::create() helpers redundant. New instances of these classes are now managed through std::unique_ptr.

        InputType::create() now uses a NeverDestroyed InputTypeFactoryMap that maps type names to InputTypeFactoryFunctions and
        gets populated when the method is first called and the map is still empty. Certain types are not added to the factory map
        if they're disabled at runtime.

        The factory is used to create the new InputType object if the requested type was found in the map, and TextInputType is used otherwise.

        * html/ButtonInputType.cpp:
        * html/ButtonInputType.h:
        (WebCore::ButtonInputType::ButtonInputType):
        * html/CheckboxInputType.cpp:
        * html/CheckboxInputType.h:
        (WebCore::CheckboxInputType::CheckboxInputType):
        * html/ColorInputType.cpp:
        * html/ColorInputType.h:
        (WebCore::ColorInputType::ColorInputType):
        * html/DateInputType.cpp:
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        (WebCore::DateTimeInputType::DateTimeInputType):
        * html/DateTimeLocalInputType.cpp:
        * html/DateTimeLocalInputType.h:
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * html/EmailInputType.cpp:
        * html/EmailInputType.h:
        (WebCore::EmailInputType::EmailInputType):
        * html/FileInputType.cpp:
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLInputElement.h:
        * html/HiddenInputType.cpp:
        * html/HiddenInputType.h:
        (WebCore::HiddenInputType::HiddenInputType):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::ImageInputType):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::createInputType): A templated helper that constructs a new InputType subclass object through std::make_unique.
        (WebCore::populateInputTypeFactoryMap): Populates the passed-in map with type-createInputType<T> pairs.
        (WebCore::InputType::create): Get the InputTypeFactoryFunction for the specified type, or fall back to TextInputType.
        (WebCore::InputType::createText):
        * html/InputType.h:
        * html/MonthInputType.cpp:
        * html/MonthInputType.h:
        (WebCore::MonthInputType::MonthInputType):
        * html/NumberInputType.cpp:
        * html/NumberInputType.h:
        (WebCore::NumberInputType::NumberInputType):
        * html/PasswordInputType.cpp:
        * html/PasswordInputType.h:
        (WebCore::PasswordInputType::PasswordInputType):
        * html/RadioInputType.cpp:
        * html/RadioInputType.h:
        (WebCore::RadioInputType::RadioInputType):
        * html/RangeInputType.cpp:
        * html/RangeInputType.h:
        * html/ResetInputType.cpp:
        * html/ResetInputType.h:
        (WebCore::ResetInputType::ResetInputType):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType):
        * html/SearchInputType.h:
        * html/SubmitInputType.cpp:
        * html/SubmitInputType.h:
        (WebCore::SubmitInputType::SubmitInputType):
        * html/TelephoneInputType.cpp:
        * html/TelephoneInputType.h:
        (WebCore::TelephoneInputType::TelephoneInputType):
        * html/TextInputType.cpp:
        * html/TextInputType.h:
        (WebCore::TextInputType::TextInputType):
        * html/TimeInputType.cpp:
        * html/TimeInputType.h:
        * html/URLInputType.cpp:
        * html/URLInputType.h:
        (WebCore::URLInputType::URLInputType):
        * html/WeekInputType.cpp:
        * html/WeekInputType.h:
        (WebCore::WeekInputType::WeekInputType):

2013-10-28  Brady Eidson  <beidson@apple.com>

        Refactor IDB factory creation.
        https://bugs.webkit.org/show_bug.cgi?id=123347

        Reviewed by Andreas Kling.

        - Rework how database directory location is passed around.
        - Make (some) SecurityOrigin arguments be references instead of pointers.
        - Add two SecurityOrigin arguments to opening databases for future use.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):

        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::create):
        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/PageGroupIndexedDatabase.cpp:
        (WebCore::PageGroupIndexedDatabase::PageGroupIndexedDatabase):
        (WebCore::PageGroupIndexedDatabase::from):
        (WebCore::PageGroupIndexedDatabase::factoryBackend):
        * Modules/indexeddb/PageGroupIndexedDatabase.h:

        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        (WebCore::WorkerGlobalScopeIndexedDatabase::WorkerGlobalScopeIndexedDatabase):
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        (WebCore::WorkerGlobalScopeIndexedDatabase::indexedDB):
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::open):
        (WebCore::IDBBackingStoreLevelDB::openInMemory):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::computeFileIdentifier):
        (WebCore::computeUniqueIdentifier):
        (WebCore::IDBFactoryBackendLevelDB::IDBFactoryBackendLevelDB):
        (WebCore::IDBFactoryBackendLevelDB::getDatabaseNames):
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::openBackingStore):
        (WebCore::IDBFactoryBackendLevelDB::open):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        (WebCore::IDBFactoryBackendLevelDB::create):

        * WebCore.exp.in:

        * platform/DatabaseStrategy.cpp:
        (WebCore::DatabaseStrategy::createIDBFactoryBackend):
        * platform/DatabaseStrategy.h:

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderElement::style() should return a reference.
        <https://webkit.org/b/123414>

        Now that renderers always have style, go ahead and make style()
        return a RenderStyle&.

        There are countless opportunities for further cleanup enabled by
        this change. I'm simply passing &style() in many cases where we
        can really do something nicer instead.

        Reviewed by Anders Carlsson.

2013-10-28  Tim Horton  <timothy_horton@apple.com>

        Make TileController create the appropriate PlatformCALayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=123418

        Reviewed by Simon Fraser.

        Add PlatformCALayer::createCompatibleLayer, which is overridden in
        each of the subclasses to create a PlatformCALayer instance of the same
        subclass. This is used in TileController to make bare PlatformCALayers
        of the correct type (Mac, Win, or Remote).

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Add createCompatibleLayer and implement it in the subclasses.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tiledScrollingIndicatorLayer):
        (WebCore::TileController::createTileLayer):
        Make use of createCompatibleLayer when creating PlatformCALayers.

2013-10-28  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Add protocol API to expose content nodes addition/removal
        https://bugs.webkit.org/show_bug.cgi?id=123424

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/model/content-flow-content-nodes.html

        Adding two new inspector-protocol APIs to handle the cases when new elements are
        added or removed from a named flow. These APIs will trigger even though there
        is no region associated with the named flow.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElementImpl):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElement):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElement):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentElement):

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused inspector/inline-javascript-imports.py
        https://bugs.webkit.org/show_bug.cgi?id=123425

        Reviewed by Timothy Hatcher.

        * inspector/inline-javascript-imports.py: Removed.

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused "externs" files and generators
        https://bugs.webkit.org/show_bug.cgi?id=123427

        Reviewed by Timothy Hatcher.

        * inspector/InjectedScriptExterns.js: Removed.
        * inspector/generate_protocol_externs.py: Removed.

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream remaining PLATFORM(IOS) and ENABLE(REMOTE_INSPECTOR) pieces
        https://bugs.webkit.org/show_bug.cgi?id=123411

        Reviewed by Timothy Hatcher.

        Include an InspectorClient hook for when node searching is enabled / disabled.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::didSetSearchingForNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::didSetSearchingForNode):
        * inspector/InspectorOverlay.h:

2013-10-28  Benjamin Poulain  <benjamin@webkit.org>

        Rename applyPageScaleFactorInCompositor to delegatesPageScaling
        https://bugs.webkit.org/show_bug.cgi?id=123417

        Reviewed by Simon Fraser.

        * page/Frame.cpp:
        (WebCore::Frame::frameScaleFactor):
        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentScaleFactor):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * page/Settings.in:
        * platform/ScrollView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):

2013-10-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for -webkit-text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=123358

        Reviewed by Dean Jackson.

        Adds initial parsing support for parsing -webkit-text-decoration-skip with
        values of "none" and "ink". This work is behind the new
        ENABLE(CSS3_TEXT_DECORATION) compile-time flag.

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

        * Configurations/FeatureDefines.xcconfig: Adding ENABLE(CSS3_TEXT_DECORATION)
        * css/CSSComputedStyleDeclaration.cpp: Mapping internal representation of text-decoration-skip
        to a CSSValue
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp: Actually parsing tokens
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextDecorationSkip):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in: adding -webkit-text-decoration-skip
        * css/CSSValueKeywords.in: adding ink
        * css/DeprecatedStyleBuilder.cpp: Mapping from CSSValue to internal representation
        (WebCore::ApplyPropertyTextDecorationSkip::valueToDecorationSkip):
        (WebCore::ApplyPropertyTextDecorationSkip::applyValue):
        (WebCore::ApplyPropertyTextDecorationSkip::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp: decoration-skip uses DeprecatedStyleBuilder
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h: Adding functions for modifying and accessing decoration-skip properties
        * rendering/style/RenderStyleConstants.h: Definition of internal representation
        * rendering/style/StyleRareInheritedData.cpp: Setting up constructors and comparators
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h: Holds actual value of internal representation

2013-10-28  Anders Carlsson  <andersca@apple.com>

        RunLoop::dispatch should take an std::function
        https://bugs.webkit.org/show_bug.cgi?id=123407

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * platform/RunLoop.cpp:
        (WebCore::RunLoop::performWork):
        (WebCore::RunLoop::dispatch):
        * platform/RunLoop.h:

2013-10-28  Tim Horton  <timothy_horton@apple.com>

        Make TileController manipulate PlatformCALayers instead of CALayers
        https://bugs.webkit.org/show_bug.cgi?id=123279

        Reviewed by Simon Fraser.

        In the interest of making TileController more platform-independent
        (so that it can be used with the remote layer tree, and maybe Windows),
        move TileController onto our PlatformCALayer abstraction instead of
        direct manipulation of CALayers.

        Some fallout from this includes getting rid of special Mac-specific
        TileController-specific CALayer subclasses, and reworking tile
        painting to work in a more generic way.

        This is a first step, and doesn't get us all the way to a platform independent
        TileController, but more patches are forthcoming.

        No new tests, just a (largeish) refactor.

        * WebCore.exp.in:
        The signature of some methods has changed.

        * WebCore.xcodeproj/project.pbxproj:
        Remove WebTileLayer.*

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):
        Use the "isTile" key on the CALayer dictionary instead of the layer's
        class to determine if it's a tile. TileController will set this on a tile
        when it is created, for now.

        * platform/graphics/TiledBacking.h:
        tiledScrollingIndicatorLayer() should return a PlatformCALayer.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::platformCALayerIncrementRepaintCount):
        * platform/graphics/ca/PlatformCALayerClient.h:
        The PlatformCALayerClient paintContents and incrementRepaintCount callbacks
        should include the platformCALayer that caused the callback.

        * platform/graphics/ca/PlatformCALayer.h:
        Add LayerTypeSimpleLayer, which is similar to LayerTypeWebLayer
        except it just calls back its client to paint, instead of doing
        complicated things with repaint rects. This is so that TileController
        doesn't re-enter drawLayerContents when asking its GraphicsLayer
        to paint for each PlatformCALayer (it will be entering drawLayerContents
        for the first time for each layer). It also happens to be useful
        for things like the tile controller overlay, which don't need
        all that complication.

        Add LayerTypeTiledBackingTileLayer, which is used simply to distinguish
        TileController Tile layers from other LayerTypeSimpleLayers.

        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/LayerPool.mm:
        (WebCore::LayerPool::addLayer):
        (WebCore::LayerPool::takeLayerWithSize):
        LayerPool should operate on PlatformCALayers now.

        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        Set the "isTile" key on the CALayer to true for TiledBackingTileLayers,
        so that the scrolling performance logging can tell a tile apart from
        any other layer, on the scrolling thread, without touching PlatformCALayers
        or the TileController or any other main-thread data structures.

        (PlatformCALayerMac::setEdgeAntialiasingMask): Added.
        * platform/graphics/ca/mac/TileController.h:
        Remove references to Objective-C classes; instead use PlatformCALayer everywhere.
        TileController is now a PlatformCALayerClient, and the layers it owns are
        all PlatformCALayers (and it is constructed with a PlatformCALayer, etc.).
        Hand in the tile debug border color as a WebCore color, instead of a CGColorRef.
        blankPixelCountForTiles() now operates on a list of PlatformLayers instead of
        WebTileLayers specifically, since WebTileLayer is gone.
        Make drawTileMapContents private because WebTileCacheMapLayer no longer exists.

        (WebCore::TileController::platformCALayerDrawsContent):
        All of the layers who have TileController as their client paint their contents.

        (WebCore::TileController::platformCALayerContentsOpaque):
        This will only be called for layers which paint via drawLayerContents,
        so it's OK that we don't special-case the debugging overlay here.

        (WebCore::TileController::owningGraphicsLayer):
        Return the GraphicsLayer that owns the TileController's main
        layer, via its conformance to PlatformCALayerClient. This is
        a bit strange (because it's not strictly a GraphicsLayer, despite
        always being so at the moment), but is done for clarity inside
        TileController itself.

        * platform/graphics/ca/mac/TileController.mm:
        Remove CALayer (WebCALayerDetails), WebTiledScrollingIndicatorLayer,
        and a bunch of includes that we don't need anymore.

        (WebCore::TileController::create):
        (WebCore::TileController::TileController):
        TileController is passed a PlatformCALayer for the tile cache root layer,
        instead of a WebTiledBackingLayer. It also creates a PlatformCALayer with
        LayerTypeLayer instead of a bare CALayer for the container layer.
        It's OK to remove the transaction because it was only used to stop
        the implicit animation, which PlatformCALayer will do for us.

        (WebCore::TileController::~TileController):
        Clear the owner of the PlatformCALayers which the TileController previously owned,
        so they don't try to call back a destroyed TileController.

        (WebCore::TileController::tileCacheLayerBoundsChanged):
        (WebCore::TileController::setNeedsDisplay):
        Straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::setTileNeedsDisplayInRect):
        Adjustments towards use of PlatformCALayer; we need FloatRects so we can
        pass pointers to PlatformCALayer::setNeedsDisplay.

        (WebCore::TileController::platformCALayerPaintContents):
        Replace drawLayer with platformCALayerPaintContents, which will be called
        back from our various WebSimpleLayers. If the PlatformCALayer is our
        tiled scrolling debug indicator, paint that. Otherwise, it's a tile.
        Make use of drawLayerContents() to paint the tile contents.
        Make use of drawRepaintIndicator() to paint the repaint indicator if needed.
        Move scrolling performance logging code that used to be in WebTileLayer here.

        (WebCore::TileController::platformCALayerDeviceScaleFactor):
        (WebCore::TileController::platformCALayerShowDebugBorders):
        (WebCore::TileController::platformCALayerShowRepaintCounter):
        Forward these to the owning GraphicsLayerCA, because it will have the right answers.

        (WebCore::TileController::setScale):
        Adjustments towards use of PlatformCALayer; remove some code that Simon
        caused to be unused in 156291 but did not remove.

        (WebCore::TileController::setAcceleratesDrawing):
        (WebCore::TileController::setTilesOpaque):
        (WebCore::TileController::setVisibleRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::setTileDebugBorderWidth):
        (WebCore::TileController::setTileDebugBorderColor):
        (WebCore::TileController::bounds):
        (WebCore::TileController::blankPixelCount):
        (WebCore::TileController::blankPixelCountForTiles):
        (WebCore::queueTileForRemoval):
        (WebCore::TileController::setNeedsRevalidateTiles):
        (WebCore::TileController::ensureTilesForRect):
        (WebCore::TileController::retainedTileBackingStoreMemory):
        Straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::updateTileCoverageMap):
        Adjustments towards use of PlatformCALayer; rename backgroundColor
        to visibleRectIndicatorColor, since it's actually a border, not a background.

        (WebCore::TileController::tiledScrollingIndicatorLayer):
        Create a LayerTypeSimpleLayer PlatformCALayer for the tiled scrolling indicator.
        It will be asked to paint straightforwardly, like a CALayer would.
        Create a LayerTypeLayer PlatformCALayer for the visible rect indicator.
        It doesn't need to paint anything, so it doesn't get an owner.

        (WebCore::TileController::createTileLayer):
        When creating a new tile layer, adopt it by setting its owner.
        Otherwise, straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::platformCALayerIncrementRepaintCount):
        Manage repaint counts for tiles in TileController now.

        (WebCore::TileController::drawTileMapContents):
        Adjustments towards use of PlatformCALayer.

        * platform/graphics/ca/mac/WebTileLayer.h: Removed.
        * platform/graphics/ca/mac/WebTileLayer.mm: Removed.
        We don't need WebTileLayer anymore, tiles are now just WebSimpleLayers
        owned by TileController. Its behavior has been moved into TileController.

        * platform/graphics/ca/mac/WebTiledBackingLayer.h:
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer createTileController:]):
        Add createTileController: so that the WebTiledBackingLayer's owner can
        hand the TileController the PlatformCALayer for the WebTiledBackingLayer
        without propagating additional usage of PlatformCALayer::platformCALayer(),
        which we need to remove in light of the remote layer tree work.

        (-[WebTiledBackingLayer setBorderColor:]):

        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Add an empty implementation of setEdgeAntialiasingMask.
        We'll probably want to implement it before adopting TileController on Windows.

        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerPaintContents):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerIncrementRepaintCount):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerPaintContents):
        (WebCore::LayerClient::platformCALayerIncrementRepaintCount):
        Adjust for new parameters on PlatformCALayerClient callbacks.

        * platform/graphics/mac/WebLayer.h:
        Add WebSimpleLayer, which inherits directly from CALayer, and make
        our standard WebLayer (which is used for compositing layers in web content)
        inherit from that.

        * platform/graphics/mac/WebLayer.mm:
        Move most of the behavior of WebLayer onto WebSimpleLayer, except for its
        complex painting code. That stays as an override on WebLayer.

        (WebCore::drawLayerContents):
        Use the PlatformCALayer's PlatformLayer - if it exists - to extract
        fine-grained repaint rects. If it doesn't, we'll just use the CGContext's
        clip rect as our single repaint rect.
        Rename platformLayer to platformCALayer for accuracy.
        Remove special code for CATiledLayer since we ought not use it on Mac anymore.

        (WebCore::drawRepaintIndicator):
        Factor repaint indicator code out into its own function so that TileController
        can use it. It can't be called from drawLayerContents for TileController, since
        the PlatformCALayer that TileController passes in to drawLayerContents is actually
        that of the tile cache's root layer, not the tile itself.
        Also, add a custom background color parameter so TileController can override
        the default green color with its own standard purple.

        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer drawInContext:]):
        Removed a param from drawLayerContents because it's trivially acquirable
        from the PlatformCALayer.

2013-10-24  Sam Weinig  <sam@webkit.org>

        Move RenderBlock functions only used by RenderBlockFlow to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=123318

        Reviewed by David Hyatt.

        * rendering/LineLayoutState.h:
        Move FloatWithRect from RenderBlock.

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        Move pagination and float functions.

2013-10-28  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add support for order inside grid items
        https://bugs.webkit.org/show_bug.cgi?id=123208

        Reviewed by Antti Koivisto.

        Based on Blink r153457 and r153536 by <jchaffraix@chromium.org>

        Added support for sorting grid items by using -webkit-order
        property. Used OrderIterator to implement it so it had to be moved
        out of RenderFlexibleBox to be shared with RenderGrid.

        Tests: fast/css-grid-layout/grid-item-order-auto-flow-resolution.html
               fast/css-grid-layout/grid-item-order-paint-order.html

        * CMakeLists.txt: Added new file.
        * GNUmakefile.list.am: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/OrderIterator.cpp: Added. Ripped out of RenderFlexibleBox.
        (WebCore::OrderIterator::OrderIterator):
        (WebCore::OrderIterator::setOrderValues): Use std::move semantics.
        (WebCore::OrderIterator::first): Use an integer as iterator.
        (WebCore::OrderIterator::next): Ditto.
        (WebCore::OrderIterator::reset): Ditto.
        * rendering/OrderIterator.h: Added.
        (WebCore::OrderIterator::currentChild):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::paintChildren):
        * rendering/RenderGrid.h:

2013-10-28  Afonso R. Costa Jr.  <afonso.costa@samsung.com>

        Methods on window.internals shouldn't pass a document.
        https://bugs.webkit.org/show_bug.cgi?id=107301

        Reviewed by Alexey Proskuryakov.

        Each 'Internals' instance is associated with a 'Document'. So, it
        is not necessary to pass a document as argument. Only nodesFromRect and
        layerTreeAsText methods were kept because, in some Layout Tests, the
        'Document' object is not the same used by Internals::contextDocument.

        * testing/Internals.cpp: Removed 'document' parameter.
        (WebCore::Internals::animationsAreSuspended):
        (WebCore::Internals::suspendAnimations):
        (WebCore::Internals::resumeAnimations):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):
        (WebCore::Internals::setScrollViewPosition):
        (WebCore::Internals::setPagination):
        (WebCore::Internals::configurationForViewport):
        (WebCore::Internals::paintControlTints):
        (WebCore::Internals::setDelegatesScrolling):
        (WebCore::Internals::touchPositionAdjustedToBestClickableNode):
        (WebCore::Internals::touchNodeAdjustedToBestClickableNode):
        (WebCore::Internals::touchPositionAdjustedToBestContextMenuNode):
        (WebCore::Internals::touchNodeAdjustedToBestContextMenuNode):
        (WebCore::Internals::bestZoomableAreaForTouchPoint):
        (WebCore::Internals::lastSpellCheckRequestSequence):
        (WebCore::Internals::lastSpellCheckProcessedSequence):
        (WebCore::Internals::wheelEventHandlerCount):
        (WebCore::Internals::touchEventHandlerCount):
        (WebCore::Internals::setBatteryStatus):
        (WebCore::Internals::setNetworkInformation):
        (WebCore::Internals::setDeviceProximity):
        (WebCore::Internals::hasSpellingMarker):
        (WebCore::Internals::hasAutocorrectedMarker):
        (WebCore::Internals::isOverwriteModeEnabled):
        (WebCore::Internals::toggleOverwriteModeEnabled):
        (WebCore::Internals::consoleMessageArgumentCounts):
        (WebCore::Internals::hasGrammarMarker):
        (WebCore::Internals::numberOfScrollableAreas):
        (WebCore::Internals::isPageBoxVisible):
        (WebCore::Internals::repaintRectsAsText):
        (WebCore::Internals::scrollingStateTreeAsText):
        (WebCore::Internals::mainThreadScrollingReasons):
        (WebCore::Internals::nonFastScrollableRects):
        (WebCore::Internals::garbageCollectDocumentResources):
        (WebCore::Internals::insertAuthorCSS):
        (WebCore::Internals::insertUserCSS):
        (WebCore::Internals::shortcutIconURLs):
        (WebCore::Internals::allIconURLs):
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setFooterHeight):
        (WebCore::Internals::webkitWillEnterFullScreenForElement):
        (WebCore::Internals::webkitDidEnterFullScreenForElement):
        (WebCore::Internals::webkitWillExitFullScreenForElement):
        (WebCore::Internals::webkitDidExitFullScreenForElement):
        (WebCore::Internals::startTrackingRepaints):
        (WebCore::Internals::stopTrackingRepaints):
        (WebCore::Internals::getCurrentCursorInfo):
        * testing/Internals.h:
        (WebCore::Internals::setPagination):
        * testing/Internals.idl:

2013-10-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Remove HTMLMediaElement.startTime
        https://bugs.webkit.org/show_bug.cgi?id=123264

        Reviewed by Eric Carlson.

        Patch based on one by: philipj@opera.com
        Blink review URL: https://codereview.chromium.org/32583003

        startTime has been removed from the HTMLMediaElement and its use
        in the rest of components.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleRewindButtonClicked):
        (Controller.prototype.handleTimelineMouseMove):
        (Controller.prototype.updateDuration):
        (Controller.prototype.updateTime): Removed used of startTime().
        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_get_start_time):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Added phony function.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::isBlockedOnMediaController): Removed
        use of startTime()
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Removed startTime()
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSliderThumb): Removed use of
        startTime()

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderElement::m_style should be a Ref.
        <https://webkit.org/b/123401>

        Made RenderElement::m_style a Ref. This codifies the fact that it
        can never be null after construction.

        Removed a couple of unnecessary null checks that were exposed as
        compilation failures.

        Reviewed by Antti Koivisto.

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Name all the GLib timeout sources
        https://bugs.webkit.org/show_bug.cgi?id=123229

        Reviewed by Anders Carlsson.

        Give a name to GLib timeout sources, this is helpful when
        profiling WebKitGTK applications.

        No new tests, no change in functionality.

2013-10-28  Philippe Normand  <pnormand@igalia.com>

        MediaStreamTrackPrivate's m_client uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=123403

        Reviewed by Eric Carlson.

        No new tests, no change in functionality.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        Initialize the m_client member variable.

2013-10-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add crypto idl files to EXTRA_DIST and remove
        css/fullscreenQuickTime.css that was removed.

2013-10-28  Antti Koivisto  <antti@apple.com>

        Prepare simple line layout to support multiple runs per line
        https://bugs.webkit.org/show_bug.cgi?id=123400

        Reviewed by Andreas Kling.

        Bunch of renaming and some refactoring for future support for text runs.

        SimpleLineLayout::Lines -> SimpleLineLayout::Layout and becomes a class instead of a typedef.
        SimpleLineLayout::Resolver::Line -> SimpleLineLayout::Resolver::Run
        SimpleLineLayout::createLines() -> SimpleLineLayout::create()
        RenderBlockFlow::simpleLines() -> RenderBlockFlow::simpleLineLayout()
        RenderText::simpleLines() -> RenderText::simpleLineLayout()
        
        Added resolver construction functions:
        
        SimpleLineLayout::runResolver()
        SimpleLineLayout::lineResolver()

2013-10-28  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Expose title and alternative text for links in image maps
        https://bugs.webkit.org/show_bug.cgi?id=84045

        Reviewed by Chris Fleizach.

        Change the way we decide when the title attribute should be
        used for the accessible description, by not relying in the
        titleTagShouldBeUsedInDescriptionField() helper function but
        in whether we have found a visible text for it or not.

        This actually mimics what the Mac port does and so makes possible
        to share both the layout test and its expected results.

        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (accessibilityDescription): Update the method to determine
        whether the title attribute should be used for the description.

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Replace 0 timeouts g_timeout_add() by g_idle_add()
        https://bugs.webkit.org/show_bug.cgi?id=123260

        Reviewed by Carlos Garcia Campos.

        A zero timeout should be equivalent to using g_idle_add_full(G_PRIORITY_DEFAULT, ...)
        without the nagging feeling that the wrong API was used.

        No new tests, no change in functionality.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Use g_idle_add() instead
        of 0-timer.
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        * platform/gtk/GtkDragAndDropHelper.cpp: Ditto.
        (WebCore::GtkDragAndDropHelper::handleDragLeave):

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        Re-enable simple line layout for GTK
        https://bugs.webkit.org/show_bug.cgi?id=123388

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): 8-bit TextRun support is now enabled for the GTK port, so the port
        can use the simple line layout.

2013-10-27  Andreas Kling  <akling@apple.com>

        Fix 4 asserting SVG tests after r158097.

        RenderElement::setStyle() is, quite surprisingly, a virtual function
        with a single override in RenderSVGBlock.
        To match the old behavior, we have to rewrite the display type from
        any inline type to block instead.

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

2013-10-27  Andreas Kling  <akling@apple.com>

        Tone down overzealous assertion from r158097.

        RenderElement::initializeStyle() really only cares that there are no
        text renderers that we should be calling styleDidChange() on.

        Tweak the code to only check that there are no text children.

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

2013-10-27  Antti Koivisto  <antti@apple.com>

        Enable center and right text alignment for simple lines
        https://bugs.webkit.org/show_bug.cgi?id=123398

        Reviewed by Andreas Kling.

        Support text-align:center and text-align:right on simple line layout path.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            text-align:justify is still not supported.

        (WebCore::SimpleLineLayout::computeLineLeft):
        (WebCore::SimpleLineLayout::createLines):
        
            Do a rounding dance that matches the line boxes.

        * rendering/SimpleLineLayout.h:
        
            Add left position to lines.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::Resolver::Line::rect):
        
            We now do rounding during layout.

        (WebCore::SimpleLineLayout::Resolver::Line::baseline):

2013-10-27  Andreas Kling  <akling@apple.com>

        Renderers should receive their style at construction.
        <https://webkit.org/b/123396>

        Pass the RenderStyle to all non-text renderer constructors.
        After construction, initializeStyle() must be called (as a stopgap
        measure) until we are able to do style-derived initialization
        without virtual function calls.

        With this change, RenderElement::m_style is never null. Subsequent
        patches will add enforcement for this and also make style() return
        a RenderStyle&.

        I'm adding three FIXME's in this patch:

            - createRendererIfNeeded() calls AnimationController to set up
              the initial style manually instead of asking RenderElement's
              setAnimatedStyle() to do it. This can probably be done in a
              nicer way, but it's not clear yet how.

            - ImageContentData::createRenderer() does a bit of unnecessary
              work. This should be easy to clean up but got too distracting
              to be part of this patch.

            - Document::createRenderTree() creates the RenderView with an
              initial dummy RenderStyle. I've done this because resolving
              the document style assumes we already have a RenderView.

        For styleWillChange() implementations to detect that they are
        reacting to the initial style, I've added a hasInitializedStyle()
        function on RenderElement. This will return false until you've
        called initializeStyle() on the renderer. This should go away
        along with initializeStyle() eventually.

        Reviewed by Antti Koivisto.

2013-10-26  Tim Horton  <timothy_horton@apple.com>

        [mac] Remove WebTiledLayer
        https://bugs.webkit.org/show_bug.cgi?id=123395

        Reviewed by Anders Carlsson.

        Mac doesn't use CATiledLayer at all anymore. We have to keep
        LayerTypeTiledLayer around for Windows, for now, but we can
        get rid of WebTiledLayer and some related Mac-specific code.

        No new tests, just removing dead code.

        * WebCore.xcodeproj/project.pbxproj:
        Remove WebTiledLayer.*

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        Remove synchronouslyDisplayTilesInRect, which was only used for WebTiledLayer on Mac.
        Remove WebTiledLayer instantiation and setup code.

        * platform/graphics/mac/WebTiledLayer.h: Removed.
        * platform/graphics/mac/WebTiledLayer.mm: Removed.

2013-10-26  Andreas Kling  <akling@apple.com>

        CTTE: RenderImageResourceStyleImage always has a StyleImage.
        <https://webkit.org/b/123390>

        Codify the fact that RenderImageResourceStyleImage always wraps an
        existing StyleImage object.

        Reviewed by Antti Koivisto.

2013-10-26  Antti Koivisto  <antti@apple.com>

        Revert some accidental changes.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        * css/CSSFontSelector.h:

2013-10-26  Mark Lam  <mark.lam@apple.com>

        Gardening: fixed broken build.
        https://bugs.webkit.org/show_bug.cgi?id=123354.

        * css/CSSFontSelector.h:

2013-10-26  Antti Koivisto  <antti@apple.com>

        fast/frames/seamless/seamless-nested-crash.html asserts on wk2 only
        https://bugs.webkit.org/show_bug.cgi?id=123354

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Don't enable simple line layout if the primary font is loading. The code expects
            to use the primary font metrics for all lines but those won't match the fallbacks
            when font is not loaded.

2013-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Deprecate public dispatch_event method in objects implementing EventTarget interface
        https://bugs.webkit.org/show_bug.cgi?id=123261

        Reviewed by Gustavo Noronha Silva.

        The interface function should be used instead.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetFunctionDeprecationInformation): Helper function to return the
        version when the function was deprecated and the function
        replacing the deprecated one.
        (GenerateFunction): Check if the function is deprecated to mark it
        as such in the header and API docs.
        * bindings/scripts/gobject-generate-headers.pl: Replace the unused
        WEBKIT_OBSOLETE_API macro with new macros to mark function as
        deprecated, using the glib macros so that we don't need checks for
        the platform.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:

2013-10-25  Mark Lam  <mark.lam@apple.com>

        DatabaseManager's ProposedDatabases need to be thread-safe.
        https://bugs.webkit.org/show_bug.cgi?id=123313.

        Reviewed by Geoffrey Garen.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::didConstructDatabaseContext):
        (WebCore::DatabaseManager::didDestructDatabaseContext):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:

2013-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream ENABLE(REMOTE_INSPECTOR) and enable on iOS and Mac
        https://bugs.webkit.org/show_bug.cgi?id=123111

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:

2013-10-25  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] CORS-enabled fetch for shape image values
        https://bugs.webkit.org/show_bug.cgi?id=123114

        Reviewed by Andreas Kling.

        Access to shape images is now controlled by CORS CSS shape per
        http://dev.w3.org/csswg/css-shapes/#shape-outside-property.
        Previously shape images had to be same-origin.

        Shape image URL access is defined by the same logic that defines
        canvas tainting: same-origin and data URLs are allowed and images
        with a "Access-Control-Allow-Origin:" header that's either "*" or
        that matches the document's origin.

        A PotentiallyCrossOriginEnabled RequestOriginPolicy was added to
        ResourceLoaderOptions, to indicate that a "potentially CORS-enabled fetch"
        was to be undertaken. The CSSImageValue::cachedImage() method handles this
        option by effectively setting the "Origin:" request header (see
        updateRequestForAccessControl() in CrossOriginAccessControl.cpp).
        StyleResolver::loadPendingShapeImage() uses the new ResourceLoaderOption.

        The static ShapeInsideInfo and ShapeOutsideInfo isEnabledFor() method
        now performs the CORS check for image valued shapes. The private
        isOriginClean() method from CanvasRenderingContext2D has been moved to
        the CachedImage class so that it can be shared by the Canvas and Shape
        implementations. It checks the response headers per the CORS spec.

        Test: http/tests/security/shape-image-cors.html

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage): Handle the new ResourceLoaderOption.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingShapeImage): Set the new ResourceLoaderOption.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern): Use the CachedImage::isOriginClean().
        * loader/ResourceLoaderOptions.h: Added PotentiallyCrossOriginEnabled to RequestOriginPolicy.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::isOriginClean): Migrated from CanvasRenderingContext2D.
        * loader/cache/CachedImage.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::checkImageOrigin): Do the CORS check and log an error message if neccessary.
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Call checkImageOrigin() for images.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::isEnabledFor): Ditto.

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Fix runtime errors caused by mediasource IDL attributes.
        https://bugs.webkit.org/show_bug.cgi?id=123352

        Reviewed by Eric Carlson.

        Due to http://webkit.org/b/123178, MediaSource classes must add a GenerateIsReachable
        (and also a JSGenerateToJSObject) attribute to avoid runtime asserts and crashes.

        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediasource/WebKitMediaSource.idl:
        * Modules/mediasource/WebKitSourceBufferList.idl:

2013-10-25  Jacky Jiang  <zhajiang@blackberry.com>

        [BlackBerry] Browser crashed at PlatformGraphicsContext::addDrawLineForText() when trying to upload a video to youtube
        https://bugs.webkit.org/show_bug.cgi?id=123349

        Reviewed by George Staikos.
        Internally reviewed by George Staikos, Konrad Piascik, Eli Fidler and Arvid Nilsson.

        Browser crashed when dereferencing null PlatformGraphicsContext*.
        In FrameView::paintControlTints(), we intentionally constructed GraphicsContext
        with null PlatformGraphicsContext* and disabled painting by doing
        context.setUpdatingControlTints(true). So we should not go further in
        GraphicsContext::drawLineForText() if painting is disabled.
        Check paintingDisabled() for the other functions in PathBlackBerry.cpp
        as well; otherwise, it is likely we will crash at those places.

        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):

2013-10-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding platform implementation of MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=123301

        Reviewed by Eric Carlson.

        No new tests needed.

        * CMakeLists.txt:
        * Modules/mediastream/AudioStreamTrack.cpp:
        (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter.

        (WebCore::AudioStreamTrack::AudioStreamTrack):
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate
        instances to create each MediaStreamTrack of MediaStream.

        (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with
        MediaStreamTrackPrivate as parameter.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a
        MediaStreamSource.

        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate.

        (WebCore::MediaStreamTrack::setSource): Ditto.

        (WebCore::MediaStreamTrack::id): Ditto.

        (WebCore::MediaStreamTrack::label): Ditto.

        (WebCore::MediaStreamTrack::enabled): Ditto.

        (WebCore::MediaStreamTrack::setEnabled): Ditto.

        (WebCore::MediaStreamTrack::muted): Ditto.

        (WebCore::MediaStreamTrack::readonly): Ditto.

        (WebCore::MediaStreamTrack::remote): Ditto.

        (WebCore::MediaStreamTrack::readyState): Ditto.

        (WebCore::MediaStreamTrack::states):
        (WebCore::MediaStreamTrack::capabilities):
        (WebCore::MediaStreamTrack::clone):
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::ended): Ditto.

        (WebCore::MediaStreamTrack::sourceStateChanged): Ditto.

        (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto.

        (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto.
        (WebCore::MediaStreamTrack::configureTrackRendering):
        (WebCore::MediaStreamTrack::stopped): Ditto.

        (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate.

        (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event.

        (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event.

        * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient.

        (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate.
        (WebCore::MediaStreamTrack::privateTrack):
        * Modules/mediastream/VideoStreamTrack.cpp:
        (WebCore::VideoStreamTrack::create):
        (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter.
        * Modules/mediastream/VideoStreamTrack.h:
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of
        MediaStreamDescriptor class).

        (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector

        (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector

        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams.

        (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams.

        (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams.

        (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams.

        (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor
        has.

        (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index

        (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor
        has.
        (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index
        * platform/mediastream/MediaStreamTrackPrivate.cpp: Added.
        * platform/mediastream/MediaStreamTrackPrivate.h: Added.

2013-10-25  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Update updateShapeAndSegmentsForCurrentLineInFlowThread to deal better with multiple regions
        <https://webkit.org/b/123210>

        Reviewed by David Hyatt.

        I simplified the determination of the next region part of updateShapeAndSegmentsForCurrentLineInFlowThread's implementation
        in order to make the code more straightforward. I also tried to avoid using regionAtBlockOffset(...) function where it's possible,
        since it's not always that reliable, what I'll will report in a separate bug.

        No new tests, covered by existing tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-25  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Update updateShapeAndSegmentsForCurrentLineInFlowThread to deal better with the first lines
        <https://bugs.webkit.org/show_bug.cgi?id=123275>

        Reviewed by David Hyatt.

        We have a complex condition in updateShapeAndSegmentsForCurrentLineInFlowThread, which is
        adjusting the first line to the shape's top. This patch adds two boolean to make that clear.

        No new tests, no behavior change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-25  Antti Koivisto  <antti@apple.com>

        Faster way for simple line layout to check if text has fallback fonts
        https://bugs.webkit.org/show_bug.cgi?id=123342

        Reviewed by Andreas Kling.
        
        Don't use RenderText::knownToHaveNoOverflowAndNoFallbackFonts as it is slow.

        Simple text code path test already guarantees there is no overflow. Test for fallback
        fonts explicitly.

        * platform/graphics/SimpleFontData.h:
        
            Make FINAL.

        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        
            Remove knownToHaveNoOverflowAndNoFallbackFonts() as it has no clients.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Check if all characters can be found from the primary font.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientDestroyed() should take a RenderElement&.
        <https://webkit.org/b/123339>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientLayoutChanged() should take a RenderElement&.
        <https://webkit.org/b/123336>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientStyleChanged() should take a RenderElement&.
        <https://webkit.org/b/123335>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVG: postApplyResource() should take a RenderElement&.
        <https://webkit.org/b/123334>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Antti Koivisto  <antti@apple.com>

        REGRESSION(r157950): It made many tests assert on Windows, EFL, GTK
        https://bugs.webkit.org/show_bug.cgi?id=123309

        Reviewed by Andreas Kling.

        Disable simple line layout on non-Mac plaforms for now.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Andreas Kling  <akling@apple.com>

        SVG: applyResource() should take a RenderElement&.
        <https://webkit.org/b/123286>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        RenderElement::styleWillChange() should pass newStyle as reference.
        <https://webkit.org/b/123332>

        When styleWillChange() is called, there is always a new style getting
        set so there's no need to handle the null style case.
        This flushed out a couple of unnecessary checks.

        Reviewed by Antti Koivisto.

2013-10-25  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fixes.
        https://bugs.webkit.org/show_bug.cgi?id=123269

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/win/ImageCairoWin.cpp: Added new parameter to BitmapImage::draw() calls.
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        Turns out that order is extremelly uncommon so using a Vector is
        much less expensive. This also special-cases the much common case
        of only having order of value 0 by using Vectors with just one
        preallocated member.

        Also added the performance test that shows a ~1% win when using a
        vector instead of the HashSet.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Non-SVG build broken after r157950
        https://bugs.webkit.org/show_bug.cgi?id=123328

        Reviewed by Xan Lopez.

        The isSVGInlineTest() check should be done only if SVG is enabled.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Jer Noble  <jer.noble@apple.com>

        [Mac] Add helper methods to convert CMTime <--> MediaTime
        https://bugs.webkit.org/show_bug.cgi?id=123285

        Reviewed by Eric Carlson.

        Add utility methods to convert between CMTime (a rational time class) and MediaTime.
        Once there, PlatformClockCM can now vend and accept MediaTimes for currentTime.

        * platform/mac/MediaTimeMac.h:
        * platform/mac/MediaTimeMac.cpp:
        (WebCore::toMediaTime): Added conversion utility method.
        (WebCore::toCMTime): Ditto.

        * platform/mac/PlatformClockCM.h:
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::setCurrentMediaTime): Added.
        (PlatformClockCM::currentMediaTime): Added.

        * WebCore.xcodeproj/project.pbxproj: Add new files to project.

2013-10-24  Mark Rowe  <mrowe@apple.com>

        Remove references to OS X 10.7 from Xcode configuration settings.

        Now that we're not building for OS X 10.7 they're no longer needed.

        Reviewed by Anders Carlsson.


        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Antti Koivisto  <antti@apple.com>

        Cache line layout path
        https://bugs.webkit.org/show_bug.cgi?id=123298

        Reviewed by Sam Weinig.
        
        Determining the path can be non-trivial. Avoid computing it repeatedly on relayouts.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::invalidateLineLayoutPath):
        (WebCore::RenderBlock::removeChild):
        
            Invalidate the path when children change.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::styleDidChange):
        
            Invalidate the path when style changes.

        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):
        
            Invalidate the path when text changes.

2013-10-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/15312643> Prepare for the mysterious future.

        Reviewed by David Kilzer.


        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Andreas Kling  <akling@apple.com>

        DocumentLoader::cachedResourceLoader() should return a reference.
        <https://webkit.org/b/123303>

        ..and while we're at it, make DocumentLoader::m_cachedResourceLoader
        a Ref, and have CachedResourceLoader::create return a PassRef.

        Reviewed by Sam Weinig.

2013-10-24  Anders Carlsson  <andersca@apple.com>

        Stop bringing in the std namespace
        https://bugs.webkit.org/show_bug.cgi?id=123273

        Reviewed by Andreas Kling.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        (WebCore::AudioBufferSourceNode::startGrain):
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::numberOfChannels):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
        (WebCore::AudioScheduledSourceNode::stop):
        * Modules/webaudio/AudioSummingJunction.cpp:
        * Modules/webaudio/DelayDSPKernel.cpp:
        (WebCore::DelayDSPKernel::process):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::offlineRender):
        * Modules/webaudio/OscillatorNode.cpp:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::dopplerRate):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::processCurve):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::saturateAdd):
        * Modules/websockets/WebSocketChannel.cpp:
        * Modules/websockets/WebSocketFrame.cpp:
        (WebCore::WebSocketFrame::parseFrame):
        * accessibility/AccessibilityARIAGrid.cpp:
        * accessibility/AccessibilityARIAGridCell.cpp:
        * accessibility/AccessibilityARIAGridRow.cpp:
        * accessibility/AccessibilityList.cpp:
        * accessibility/AccessibilityListBox.cpp:
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableCell.cpp:
        * accessibility/AccessibilityTableColumn.cpp:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        * accessibility/AccessibilityTableRow.cpp:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::setTimeout):
        (WebCore::setMaximumAge):
        * bindings/js/ScriptController.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::readString):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::getFontFace):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColorParameters):
        (WebCore::CSSParser::parseHSLParameters):
        * css/CSSReflectValue.cpp:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontSize::applyValue):
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/SVGCSSParser.cpp:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::viewportPercentageValue):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        (WebCore::Document::minimumLayoutDelay):
        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * dom/Range.cpp:
        (WebCore::Range::toString):
        (WebCore::Range::textRects):
        (WebCore::Range::textQuads):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::makePresentationAttributeCacheKey):
        * dom/Text.cpp:
        * dom/ViewportArguments.cpp:
        (WebCore::clampLengthValue):
        (WebCore::clampScaleValue):
        (WebCore::ViewportArguments::resolve):
        (WebCore::computeMinimumScaleFactorForContentContained):
        (WebCore::restrictMinimumScaleFactorToViewportSize):
        * editing/AlternativeTextController.cpp:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        (WebCore::Editor::compositionRange):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::CharacterIterator::string):
        (WebCore::SearchBuffer::SearchBuffer):
        (WebCore::SearchBuffer::append):
        (WebCore::SearchBuffer::prependContext):
        (WebCore::SearchBuffer::search):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveResponse):
        (WebCore::FileReaderLoader::didReceiveData):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::backListWithLimit):
        (WebCore::BackForwardList::forwardListWithLimit):
        * history/PageCache.cpp:
        (WebCore::PageCache::setCapacity):
        * html/BaseDateAndTimeInputType.cpp:
        * html/FTPDirectoryDocument.cpp:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        (WebCore::parseColorStringWithCrazyLegacyRules):
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getTextFieldValues):
        * html/HTMLImageElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLMapElement.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::textTrackAddCue):
        (WebCore::HTMLMediaElement::textTrackRemoveCue):
        (WebCore::HTMLMediaElement::rewind):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::duration):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        * html/HTMLSourceElement.cpp:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::colSpan):
        (WebCore::HTMLTableCellElement::rowSpan):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionStart):
        (WebCore::HTMLTextFormControlElement::setSelectionEnd):
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        * html/HTMLTrackElement.cpp:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::scale):
        * html/InputType.cpp:
        (WebCore::InputType::valueAsDouble):
        * html/MediaController.cpp:
        (MediaController::duration):
        (MediaController::currentTime):
        (MediaController::setCurrentTime):
        (MediaController::updateReadyState):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::setValueAsDouble):
        (WebCore::NumberInputType::setValueAsDecimal):
        (WebCore::NumberInputType::createStepRange):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::startSearchEventTimer):
        * html/StepRange.cpp:
        (WebCore::StepRange::clampValue):
        (WebCore::StepRange::parseStep):
        * html/TimeRanges.cpp:
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::adjustBubblePosition):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeRect):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        * inspector/ContentSearchUtils.cpp:
        * inspector/DOMEditor.cpp:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        * inspector/InjectedScriptHost.cpp:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/cache/CachedImage.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect):
        * page/EventHandler.cpp:
        (WebCore::MaximumDurationTracker::~MaximumDurationTracker):
        * page/FrameTree.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustedDeferredRepaintDelay):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computeAutomaticScaleFactor):
        * page/SpatialNavigation.cpp:
        (WebCore::entryAndExitPointsForDirection):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilterOperations):
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists):
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::intersect):
        (WebCore::FloatRect::uniteEvenIfEmpty):
        (WebCore::FloatRect::extend):
        (WebCore::FloatRect::fitToPoints):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        (WebCore::GlyphPageTreeNode::getChild):
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::intersect):
        (WebCore::IntRect::unite):
        (WebCore::IntRect::uniteIfNonZero):
        * platform/graphics/LayoutRect.cpp:
        (WebCore::LayoutRect::intersect):
        (WebCore::LayoutRect::unite):
        (WebCore::LayoutRect::uniteIfNonZero):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyGeneric):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        * platform/text/TextCodecICU.cpp:
        * rendering/LineWidth.cpp:
        (WebCore::LineWidth::fitBelowFloats):
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        (WebCore::RenderBlock::availableLogicalWidthForContent):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        (WebCore::RenderFieldset::layoutSpecialExcludedChild):
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderTableCell.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::selectionHeight):
        (WebCore::RootInlineBox::selectionHeightAdjustedForPrecedingBlock):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::layout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::imageSize):
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::fontSizeForKeyword):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTime):

2013-10-24  Andreas Kling  <akling@apple.com>

        Uncomplicate some of SVGTextRunRenderingContext.
        <https://webkit.org/b/123294>

        This class was weird about a few things, so I've taken these steps
        to clear things up:

        - FINAL and OVERRIDE all the things.
        - Constructor now takes a RenderObject&.
        - renderer() now returns a RenderObject&.
        - drawSVGGlyphs() no longer takes a TextRun.
        - glyphDataForCharacter() no longer takes a TextRun.

        To expand on the last two, there was also some awkward hoop-jumping
        where we'd go through the TextRun passed by argument to find its
        rendering context, which was really just |this| all along.

        Reviewed by Antti Koivisto.

2013-10-24  Roger Fong  <roger_fong@apple.com>

        Add texture level dependent size checks to textureImage2D calls.
        https://bugs.webkit.org/show_bug.cgi?id=123290
        <rdar://problem/15201382>

        Reviewed by Dean Jackson

        Test covered by WebGL Conformance suite 1.0.2 test, textures/texture-size-limit.html.

        There are different size limits when calling textureImage2D on different texture levels.
        We should be throwing an error if our texture size exceeds these limits.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):

2013-10-24  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [MediaStream API] allow a stream source to be shared
        https://bugs.webkit.org/show_bug.cgi?id=121954

        Reviewed by Eric Carlson.

        Now, the MediaStreamSource don't know about the MediaStream that owns it,
        since there can be more than one MediaStream that has it as source for some track.
        MediaStreamTrack classes now have observers registered, in case there are more than
        one MediaStream owning that track

        No new tests, no change in functionality.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Adding the MediaStream as an observer for each track it owns.

        (WebCore::MediaStream::addTrack): Now adding the MediaStream as an observer the new added track
        and adding the source to the MediaStreamDescriptor.

        (WebCore::MediaStream::removeTrack): Instead of removing the source right away, we first check if
        there isn't any other track using that source, if not we remove the source.

        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::addRemoteSource): MediaStreamSource has no information about the MediaStream
        that uses it, so now we don't set the stream in the source anymore.

        (WebCore::MediaStream::removeRemoteSource): There can be more than on track using the source. So we
        get each track that is using the source and then remove it and fire the ended event.

        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::addObserver):
        (WebCore::MediaStreamTrack::removeObserver):
        (WebCore::MediaStreamTrack::trackDidEnd): Does not get the client from the MediaStreamDescriptor, it now
        notify each of its observers that the track ended.

        * Modules/mediastream/MediaStreamTrack.h: Adding Observer class.

        * platform/mediastream/MediaStreamDescriptor.cpp: Destructor now does nothing. Previously it was setting
        each MediaStreamSource's descriptor to null.

        (WebCore::MediaStreamDescriptor::removeSource): Not setting the stream in source anymore.

        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Ditto.

        (WebCore::MediaStreamDescriptor::setEnded): Not setting the state of the source to Ended

        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::~MediaStreamDescriptor):
        * platform/mediastream/MediaStreamSource.cpp: Removing references to MediaStream object
        (WebCore::MediaStreamSource::MediaStreamSource):
        (WebCore::MediaStreamSource::reset):
        * platform/mediastream/MediaStreamSource.h:

2013-10-24  Daniel Bates  <dabates@apple.com>

        Crash in WebCore::NavigationScheduler::startTimer()
        https://bugs.webkit.org/show_bug.cgi?id=123288
        <rdar://problem/14055644>

        Reviewed by Alexey Proskuryakov.

        Currently NavigationScheduler::startTimer() synchronously notifies the client
        before the Web Inspector of a scheduled redirect. If a client cancels this
        redirect then NavigationScheduler::m_redirect will become null and we'll
        subsequently crash when informing the Web Inspector of this formerly scheduled
        redirect. Instead, NavigationScheduler::startTimer() should notify the Web
        Inspector before it notifies the client of a scheduled redirect.

        As a side benefit of this change, the Web Inspector is notified of a scheduled
        redirect before being notified of it being canceled when a client chooses to cancel
        a scheduled redirect.

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::startTimer):

2013-10-24  Antti Koivisto  <antti@apple.com>

        Try to fix build without CSS_SHAPES.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Antti Koivisto  <antti@apple.com>

        Simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=122458

        Reviewed by Darin Adler.

        Line box based inline layout is powerful but also rather slow and memory intensive. Simple line layout
        is a compact alternative data structure and fast code path to cover common cases without requiring line
        boxes.
        
        This patch handles a case single left-aligned text renderer inside flow with no floats. Even this very basic
        case is sufficiently common to handle up to 25% of all text lines on some popular new sites. The decision
        which path to use is made per block flow (paragraph).
        
        Simple line layout aims to produce pixel-exact rendering result when compared to the line box layout.
        
        The goal is to handle everything that requires line level access in cases that allow use of simple lines.
        This is not quite the case yet. For example selections and outline painting are not supported. In these
        cases we seamlessly switch to the line boxes.

        The simple line data structure currently uses 12 bytes per line. Lineboxes take ~160 bytes minimum per line.
        Laying out the lines is also several times faster as is iterating over them.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::getInlineBoxAndOffset):
        
            Creating positions within a simple line flow causes switch to line boxes.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        
            TextIterator traverses line boxes if available. In case simple line case we need to replicate the
            same results (for compatibility but especially to avoid changing test results). This is done here
            by just traversing the string without actually using the layout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        
            Select the layout path to use.

        (WebCore::RenderBlockFlow::deleteLines):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::firstLineBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::RenderBlockFlow::clearTruncation):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::hasLines):
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        
            Do simple layout.

        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        
            This function switches from simple lines to line boxes. The switching can be done outside normal layout.
            This is used to cover some cases that are not yet supported by simple lines (like selections).

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::simpleLines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        
            Rename the line box layout function.

        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::knownToHaveNoOverflowAndNoFallbackFonts):
        (WebCore::RenderText::setSelectionState):
        (WebCore::RenderText::setTextWithOffset):
        (WebCore::RenderText::ensureLineBoxes):
        (WebCore::RenderText::simpleLines):
        (WebCore::RenderText::linesBoundingBox):
        (WebCore::RenderText::linesVisualOverflowBoundingBox):
        (WebCore::RenderText::selectionRectForRepaint):
        (WebCore::RenderText::caretMinOffset):
        (WebCore::RenderText::caretMaxOffset):
        (WebCore::RenderText::countRenderedCharacterOffsetsUntil):
        (WebCore::RenderText::containsRenderedCharacterOffset):
        (WebCore::RenderText::containsCaretOffset):
        (WebCore::RenderText::hasRenderedText):
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeSimpleLine):
        (WebCore::write):
        * rendering/SimpleLineLayout.cpp: Added.
        (WebCore::SimpleLineLayout::canUseFor):
        
            This check for the cases supported by the simple line layout path.

        (WebCore::SimpleLineLayout::isWhitespace):
        (WebCore::SimpleLineLayout::skipWhitespaces):
        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::createLines):
        
            The main layout functions that breaks text to lines. It only handles the cases allowed by 
            SimpleLineLayout::canUseFor. What it handles it aims to break exactly as line box layout does.

        * rendering/SimpleLineLayout.h: Added.
        * rendering/SimpleLineLayoutFunctions.cpp: Added.
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        * rendering/SimpleLineLayoutFunctions.h: Added.
        (WebCore::SimpleLineLayout::computeFlowHeight):
        (WebCore::SimpleLineLayout::computeFlowFirstLineBaseline):
        (WebCore::SimpleLineLayout::computeFlowLastLineBaseline):
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        (WebCore::SimpleLineLayout::lineHeightFromFlow):
        
            Support functions called from RenderBlockFlow and RenderText. They are equivalent to
            similar line box functions.

        (WebCore::SimpleLineLayout::baselineFromFlow):
        * rendering/SimpleLineLayoutResolver.h: Added.
        (WebCore::SimpleLineLayout::Resolver::Line::Line):
        (WebCore::SimpleLineLayout::Resolver::Line::rect):
        (WebCore::SimpleLineLayout::Resolver::Line::baseline):
        (WebCore::SimpleLineLayout::Resolver::Line::text):
        (WebCore::SimpleLineLayout::Resolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator--):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator*):
        
            Lazy iterator for deriving line metrics. This keeps the line data structure small as
            we don't need to keep easily derived values around.

        (WebCore::SimpleLineLayout::Resolver::Resolver):
        (WebCore::SimpleLineLayout::Resolver::size):
        (WebCore::SimpleLineLayout::Resolver::begin):
        (WebCore::SimpleLineLayout::Resolver::end):
        (WebCore::SimpleLineLayout::Resolver::last):
        (WebCore::SimpleLineLayout::Resolver::operator[]):

2013-10-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Gaps between underlines in adjacent underlined text runs
        https://bugs.webkit.org/show_bug.cgi?id=123236

        Reviewed by Simon Fraser and Darin Adler.

        There are two pieces to this change. The first piece is in
        InlineTextBox::paint(). We were putting floating-point
        extents into a LayoutSize, which simply uses ints (for now),
        and then immediately converting this back to a FloatSize.
        Instead, we should be using floats throughout all of
        this code.

        In addition, inside GraphicsContext::drawLineForText(), we are
        rounding the underline to pixel boundaries so that it appears
        very crisp on the screen. However, we should round once after
        performing computations, rather than rounding twice and then
        performing computations on the rounded numbers.

        Test: fast/css3-text/css3-text-decoration/no-gap-between-two-rounded-textboxes.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Change rounding mode
            to perform computations before rounding
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Don't convert to a LayoutSize
            just to convert to a FloatSize

2013-10-24  Andreas Kling  <akling@apple.com>

        SVGRenderingContext should wrap a RenderElement.
        <https://webkit.org/b/123283>

        The SVG rendering context class is never used with text renderers
        so we can have it wrap a RenderElement for tighter code.

        Also renamed SVGRenderingContext::m_object to m_renderer.

        Reviewed by Antti Koivisto.

2013-10-24  Santosh Mahto  <santosh.ma@samsung.com>

        [contenteditable] Content after non-editable element disappears when merging lines using backspace
        https://bugs.webkit.org/show_bug.cgi?id=122748

        Reviewed by Ryosuke Niwa.

        In case of paragraph merging after deletion if second paragraph
        contains non-editable element, then content after the non-editable
        element(including non-editable element) will be removed while the
        content before the element will be merged with the first paragraph.
        This happens becasue endOfParagraphToMove calculation in merging function
        stop at editing boundary so endOfParagraphToMove becomes position just
        before non-editable content.
        With this patch now endOfParagraphToMove is calculated by skipping
        over the non-editable element.

        Test: editing/deleting/merge-paragraph-contatining-noneditable.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): use CanSkipOverEditingBoundary
        condition while calculating endOfParagraphToMove.

2013-10-24  Antoine Quint  <graouts@apple.com>

        Web Inspector: Inspector doesn't show webkitTransitionEnd events in the timeline
        https://bugs.webkit.org/show_bug.cgi?id=123263

        Reviewed by Timothy Hatcher.

        A legacy event type is only set on an event in EventTarget::fireEventListeners(Event*)
        which is called after we used to call InspectorInstrumentation::willDispatchEvent(), the method
        that would ultimately yield the creation of a TimelineRecord for the event in the Web Inspector
        frontend, and as a result we would try to dispatch an event with an unprefixed event type to
        the frontend, which wouldn't even happen because most likely it wouldn't have listeners for this
        unprefixed type.

        We now move the call to InspectorInstrumentation::willDispatchEvent() in
        EventTarget::fireEventListeners(Event*, EventTargetData*, EventListenerVector&) such that the
        correct event type and list of listeners is used to determine what event to dispatch to the frontend.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        Remove calls to InspectorInstrumentation::willDispatchEvent() and InspectorInstrumentation::didDispatchEvent().

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        Add call to InspectorInstrumentation::willDispatchEvent() before we go through each listener and
        call InspectorInstrumentation::willHandleEvent(). Additionally, we refactor some code since we're
        getting references to the ScriptExecutionContext and Document upfront now.

2013-10-24  Andreas Kling  <akling@apple.com>

        SVG: RenderElement-ize intersectRepaintRectWithResources().
        <https://webkit.org/b/123278>

        SVGRenderSupport::intersectRepaintRectWithResources() is only ever
        called with non-text renderers so make it take RenderElement&.

        Had to tweak RenderSVGResource::resourceBoundingBox() to take the
        renderer by reference.

        Reviewed by Antti Koivisto.

2013-10-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoints in sourceURL named scripts do not work
        https://bugs.webkit.org/show_bug.cgi?id=123231

        Reviewed by Timothy Hatcher.

        Remember a Script's sourceURL and sourceMappingURL. When setting a
        breakpoint by URL, check it against the sourceURL or original URL.
        If a script had a sourceURL that would have been the only URL sent
        to the frontend, so that receives priority.

        Test: inspector-protocol/debugger/setBreakpointByUrl-sourceURL.html

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-10-23  Alexey Proskuryakov  <ap@apple.com>

        Add CryptoKey base class and bindings
        https://bugs.webkit.org/show_bug.cgi?id=123216

        Reviewed by Sam Weinig.

        * crypto/CryptoKey.idl: Added.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        Process the IDL.

        * WebCore.xcodeproj/project.pbxproj: Added files.

        * bindings/js/JSCryptoKeyCustom.cpp: Added.
        (WebCore::JSCryptoKey::algorithm): Use a visitor to build algorithm dictionary
        for the key.

        * crypto/CryptoAlgorithmDescriptionBuilder.cpp: Added.
        * crypto/CryptoAlgorithmDescriptionBuilder.h: Added.
        An interface for a visitor we'll use to expose CrytoKey.algorithm in bindings,
        and possibly also for storage serialization. Not complete yet, we'll need support
        for a few more simple types, and less trivially, for nested algorithms.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp: Added.
        * bindings/js/JSCryptoAlgorithmBuilder.h: Added.
        An implementation that builds an algorithm description dictionary for JS bindings.

        * crypto/CryptoKey.cpp: Added.
        (WebCore::CryptoKey::~CryptoKey):
        (WebCore::CryptoKey::buildAlgorithmDescription):
        * crypto/CryptoKey.h: Added.
        Added an almost empty implementation. Some of the functions that are currently
        marked as pure virtual will likely be implemented in this base class.

2013-10-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157916.
        http://trac.webkit.org/changeset/157916
        https://bugs.webkit.org/show_bug.cgi?id=123274

        Broke Layout/flexbox-lots-of-data.html on perfbot (Requested
        by ap on #webkit).

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderHashTraits::emptyValue):
        (WebCore::RenderFlexibleBox::OrderHashTraits::constructDeletedValue):
        (WebCore::RenderFlexibleBox::OrderHashTraits::isDeletedValue):
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-24  Zan Dobersek  <zdobersek@igalia.com>

        Comment in ScopedEventQueue::dispatchEvent is unnecessarily verbose
        https://bugs.webkit.org/show_bug.cgi?id=123252

        Reviewed by Darin Adler.

        Shorten the comment about the crash avoidance in ScopedEventQueue::dispatchEvent due to
        the calling convention in C++ is left unspecified. The problem was already fixed in r157219
        and later adjusted in r157401, but the comment could have been shorter and simpler in both cases.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent):

2013-10-24  Alex Christensen  <achristensen@webkit.org>

        Removed unused ThreadSafeCoordinatedSurface and CertificateInfoCurl files.
        https://bugs.webkit.org/show_bug.cgi?id=123246

        Reviewed by Noam Rosenthal.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Removed references to ThreadSafeCoordinatedSurface and CertificateInfoCurl.
        * platform/graphics/texmap/coordinated/ThreadSafeCoordinatedSurface.cpp: Removed.
        * platform/graphics/texmap/coordinated/ThreadSafeCoordinatedSurface.h: Removed.
        * platform/network/curl/CertificateInfoCurl.cpp: Removed.

2013-10-24  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Removed Qt workaround.
        https://bugs.webkit.org/show_bug.cgi?id=123258

        Reviewed by Csaba Osztrogonác.

        No change of functionality, no new tests needed.

        !$defines case can be removed, because Qt and Android aren't in WebKit trunk,
        all ports (Mac,EFL,GTK,Windows) call this script with --defines option now

        * css/make-css-file-arrays.pl:

2013-10-24  Antti Koivisto  <antti@apple.com>

        Remove a stray space.
        
        Not reviewed.

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

2013-10-24  Antti Koivisto  <antti@apple.com>

        Element iterator functions should take reference
        https://bugs.webkit.org/show_bug.cgi?id=123267

        Reviewed by Andreas Kling.

        The argument has to be non-null.

2013-10-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL 1.8 libraries.
        https://bugs.webkit.org/show_bug.cgi?id=123245

        Reviewed by Gyuyoung Kim.

        After fixed build break on EFL 1.8 at r138326, EFL libraries are changed
        Eo typedef and splitted header files which contain version macro.

        * platform/Widget.h: Changed Eo typedef.
        * platform/efl/EflScreenUtilities.h: Ditto.
        * platform/graphics/Image.h: Ditto.

2013-10-24  Andreas Kling  <akling@apple.com>

        RenderSVGResource: Pass RenderElement to fill/strokePaintingResource.
        <https://webkit.org/b/123242>

        We never pass text renderers to these functions, so make them take
        RenderElement instead.

        Reviewed by Anders Carlsson.

2013-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GObject bindings] Make EventTarget interface introspectable
        https://bugs.webkit.org/show_bug.cgi?id=77835

        Reviewed by Gustavo Noronha Silva.

        Add webkit_dom_event_target_add_event_listener_with_closure and
        webkit_dom_event_target_remove_event_listener_with_closure to be
        used by GObject instrospection bindings. Instead of receving a
        GCallback, which makes the function not introspectable, they
        receive a GClosure.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::GObjectEventListener):
        (WebCore::GObjectEventListener::~GObjectEventListener):
        (WebCore::GObjectEventListener::gobjectDestroyed):
        (WebCore::GObjectEventListener::handleEvent):
        (WebCore::GObjectEventListener::operator==):
        * bindings/gobject/GObjectEventListener.h:
        (WebCore::GObjectEventListener::addEventListener):
        (WebCore::GObjectEventListener::removeEventListener):
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (webkit_dom_event_target_dispatch_event):
        (webkit_dom_event_target_add_event_listener):
        (webkit_dom_event_target_remove_event_listener):
        (webkit_dom_event_target_add_event_listener_with_closure):
        (webkit_dom_event_target_remove_event_listener_with_closure):
        * bindings/gobject/WebKitDOMEventTarget.h:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateEventTargetIface):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event):
        (webkit_dom_test_event_target_add_event_listener):
        (webkit_dom_test_event_target_remove_event_listener):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (webkit_dom_test_node_dispatch_event):
        (webkit_dom_test_node_add_event_listener):
        (webkit_dom_test_node_remove_event_listener):

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        Turns out that order is extremelly uncommon so using a Vector is
        much less expensive. This also special-cases the much common case
        of only having order of value 0 by using Vectors with just one
        preallocated member.

        Also added the performance test that shows a ~1% win when using a
        vector instead of the HashSet.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix since r157823.
        FilterOperation::getOperationType() is renamed FilterOperation::type().

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawUsingCustomFilter):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::injectCachedCustomFilterPrograms):

2013-10-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on CMake based ports when CMAKE_BUILD_TYPE is not given.

        When CMAKE_BUILD_TYPE is empty, FIND command will be failed.

        * CMakeLists.txt:

2013-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Integrate css3-images image-orientation with existing EXIF support
        https://bugs.webkit.org/show_bug.cgi?id=91566

        Reviewed by Beth Dakin.

        Original patch by David Barr(davidbarr@chromium.org).

        This patch passes an information of image orientation into existing EXIF support functions
        (draw() functions of image classes mainly). We need to let the functions to know the information
        in order to meet the image-orientation requirement.

        Spec: http://dev.w3.org/csswg/css-images-3/#the-image-orientation
        The css3-images module specification is at last call.

        Test: fast/css/image-orientation/image-orientation.html
        Image orientation test is to check if incorrect rotation value can be fixed with correct orientation.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateSize):
        (WebCore::BitmapImage::sizeRespectingOrientation):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        * platform/graphics/GradientImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/BitmapImageCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::BufferedImage::draw):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::draw):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleDidChange):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        * svg/graphics/SVGImageForContainer.h:

2013-10-23  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGInlineTextBox a bit.
        <https://webkit.org/b/123238>

        Use RenderBoxModelObject& instead of generic RenderObject* in some
        places where it happens as a natural consequence of keeping the
        original return type from InlineBox::parent()->renderer().

        Reviewed by Anders Carlsson.

2013-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce RENDER_OBJECT_TYPE_CASTS to replace manual toFoo() in child render object
        https://bugs.webkit.org/show_bug.cgi?id=123150

        Reviewed by Andreas Kling.

        As a step to let toFoo use TYPE_CASTS_BASE, toRenderFoo() can use it for child render object.
        So, this patch introduces RENDER_OBJECT_TYPE_CASTS based on the TYPE_CASTS_BASE. This will
        generate plenty more helper functions for render object type cast.

        Some unnecessary type casts are fixed by this change.

        No new tests, no behavior changes.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderCounter.h:
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):

2013-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Include misspelling dot gap width when centering misspelling dots
        https://bugs.webkit.org/show_bug.cgi?id=122365

        Reviewed by Simon Fraser.

        When calculating where to place the misspelling dots, we find the
        maximum number of full dots that can fit under the misspelled word,
        and then center a run of that many dots. However, when we're
        centering the run, we are only considering the size of the extra
        fractional dot that we cut off. However, the dot image has a "gap"
        of transparent pixels (which visually provide tracking for the dots)
        which visually appears to be empty space. We should take this gap
        space into consideration when centering the run of dots. We also
        should make sure that our dots start on integral pixel boundaries
        because otherwise we can't set the phase of the dot run properly.

        Test: editing/spelling/centering-misspelling-dots.html

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):

2013-10-23  Andreas Kling  <akling@apple.com>

        SVGFilterBuilder should not be ref-counted.
        <https://webkit.org/b/123222>

        These objects are singly-owned and do not need ref counting.

        Reviewed by Anders Carlsson.

2013-10-23  Brady Eidson  <beidson@apple.com>

        Remove unused IDBBackingStoreLevelDB default constructor.

        Rubberstamped by Anders Carlsson.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Added Texture Mapper and Coordinated Graphics to Windows build for WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=123215

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Added source files for Texture Mapper to Windows build.
        * WebCore.vcxproj/WebCoreCairo.props:
        Added Texture Mapper include directories for WinCairo.

2013-10-23  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding mock class to test RTCDataChannelHandler
        https://bugs.webkit.org/show_bug.cgi?id=123205

        Reviewed by Eric Carlson.

        Now RTCPeerConnectionHandler-datachannel LayouTest can run properly.
        Also updated the expected file, removing the reliable property check (which was removed in the spec)

        Existing tests updated.

        * CMakeLists.txt:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp: Added.
        * platform/mock/RTCDataChannelHandlerMock.h: Added.
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::RemoteDataChannelNotifier::RemoteDataChannelNotifier):
        (WebCore::RemoteDataChannelNotifier::fire):
        (WebCore::DataChannelStateNotifier::DataChannelStateNotifier):
        (WebCore::DataChannelStateNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createDataChannel):

2013-10-23  Andreas Kling  <akling@apple.com>

        Clock should not be ref-counted.
        <https://webkit.org/b/123217>

        The Clock object is only ever owned by the MediaController,
        so remove the ref counting and store it in a std::unique_ptr.

        Also slapped the Clock subclasses with FINAL and OVERRIDE.

        Reviewed by Anders Carlsson.

2013-10-23  Mark Lam  <mark.lam@apple.com>

        Fix assertion in DatabaseManager::detailsForNameAndOrigin() to be iOS friendly.
        https://bugs.webkit.org/show_bug.cgi?id=123218.

        Reviewed by Joseph Pecoraro.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::detailsForNameAndOrigin):

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Separated USE(CA) from USE(ACCELERATED_COMPOSITING) to prepare WinCairo for accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=123214

        Reviewed by Brent Fulgham.

        * platform/graphics/PlatformLayer.h:
        Added TextureMapperPlatformLayer PlatformLayer declaration for WinCairo.
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        Added USE(CA) where necessary to compile WinCairo with accelerated compositing.

2013-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Antialias underlines if they're not axis-aligned
        https://bugs.webkit.org/show_bug.cgi?id=123004

        Reviewed by Simon Fraser.

        In order to make underlines crisp, GraphicsContext:drawLineForText
        modifies the bounds of the underline rect in order to make the rect
        device-pixel-aligned, and then turns off antialiasing when drawing
        the line. This makes sense when the underline is axis-aligned, but
        doesn't when the rect is rotated or skewed. Therefore, we should
        only opt-in to this behavior if the underline we're about to draw
        is axis-aligned. This requires figuring out whether or not the
        current transformation is axis-aligned every time
        GraphicsContext::drawLineForText is called, which will incur a small
        performance hit. However, this is justified by underlines looking
        much better (antialiased) when the context is rotated or skewed.

        Tests: svg/custom/foreign-object-skew.html
               svg/zoom/page/zoom-foreignObject.html
               svg/zoom/text/zoom-foreignObject.html:

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):

2013-10-23  Mark Lam  <mark.lam@apple.com>

        Re-instate ProposedDatabases needed by detailsForNameAndOrigin().
        https://bugs.webkit.org/show_bug.cgi?id=123131.

        Reviewed by Geoffrey Garen.

        Test: storage/websql/open-database-expand-quota.html

        If a webpage tries to create a database that exceeds the database size
        quota for that security origin, the WebKit1 quota request mechanism
        uses detailsForNameAndOrigin() to get the requested size of the database
        (that the webpage is attempting to open) in order to determine whether
        to increase the quota or not.

        Previously, detailsForNameAndOrigin() relies on the ProposedDatabase
        mechanism to provide this size information. This change re-instates the
        ProposedDatabase mechanism so that WebKit1 client code that relies on
        this behavior will continue to work.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase):
        (WebCore::DatabaseManager::ProposedDatabase::~ProposedDatabase):
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:
        (WebCore::DatabaseManager::ProposedDatabase::origin):
        (WebCore::DatabaseManager::ProposedDatabase::details):

2013-10-23  Tim Horton  <timothy_horton@apple.com>

        [cg] Fix the capitalization of kCGImageSourceSkipMetaData (-> Metadata)
        https://bugs.webkit.org/show_bug.cgi?id=122918

        Reviewed by Anders Carlsson.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        The capitalization of kCGImageSourceSkipMetaData changed to
        kCGImageSourceSkipMetadata in Mountain Lion.

2013-10-23  Brady Eidson  <beidson@apple.com>

        Make IDBDatabaseBackendLevelDB.cpp be cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123027

        Attentively reviewed by Dean Jackson.

        Move it out of the indexeddb/leveldb directory, and rename it to IDBDatabaseBackendImpl.

        Project files:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h.

        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore::IDBDatabaseBackendInterface::isIDBDatabaseBackendImpl): Add to support a required cast in LevelDB code.

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):
        (WebCore::IDBFactoryBackendLevelDB::maybeCreateTransactionBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::scheduleVersionChangeOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:

2013-10-23  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream more ARMv7s bits
        https://bugs.webkit.org/show_bug.cgi?id=123052

        Reviewed by Joseph Pecoraro.

        Define exported symbol file for armv7s and arm64.

        * Configurations/WebCore.xcconfig:

2013-10-23  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [GTK] accessibility/self-referencing-aria-labelledby.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=121594

        Reviewed by Mario Sanchez Prada.

        According to http://www.w3.org/TR/REC-html40/struct/objects.html#edef-IMG
        description of image element should be determined by alt attribute, then
        if it is empty by title attributte.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetDescription):

2013-10-15  Andreas Kling  <akling@apple.com>

        Tighten animation-driven restyle to operate on Element only.
        <https://webkit.org/b/122820>

        Text nodes are never directly animated, so we can tighten this code
        to work on Element only. This happens naturally since the code was
        already working with RenderElement everywhere.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Even more PassRef<RenderStyle>!
        <https://webkit.org/b/123147>

        Convert more of the WebCore code to use PassRef for RenderStyle
        in places where they are known to be non-null.

        Re-landing this without region styling since that caused some
        assertions last time.

        Reviewed by Antti Koivisto.

2013-10-22  Zoltan Horvath  <zoltan@webkit.org>

        Refactor LineBreaker::nextSegmentBreak, add BreakingContext that holds all its state
        https://bugs.webkit.org/show_bug.cgi?id=123038

        Reviewed by David Hyatt.

        I followed Levi's logic on Blink's nextSegmentBreak refactoring (https://chromiumcodereview.appspot.com/25054004). 
        I mostly did the same changes, but the code is too diverged at this point to just apply that patch on our trunk. The patch
        introduces BreakingContext as a separate class. I added new methods for each condition, which were originally located in
        nextSegmentBreak. I also removed the goto-s from the code. All the new methods are inline in order to avoid introducing any
        performance regression. The change makes the code so much cleaner and understandable.

        This change would be the first step of the nextSegmentBreak refactoring, I wanted to keep things in place in RenderBlockLineLayout.cpp
        for now, but I'm planning to separate BreakingContext into a new file and do additional changes to make things nicer. I'm tracking
        the entire progress under http://webkit.org/b/121261 meta bug.

        No new tests, covered by existing tests.
        - I updated 1 expected result, because there was a 1 pixel difference on the result, which I believe comes from a rounding situation.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::lineBreakRef):
        (WebCore::BreakingContext::lineWidth):
        (WebCore::BreakingContext::atEnd):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::increment):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::nextCharacter):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::BreakingContext::handleEndOfLine):
        (WebCore::LineBreaker::nextSegmentBreak):

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157826.
        http://trac.webkit.org/changeset/157826
        https://bugs.webkit.org/show_bug.cgi?id=123197

        Caused some regions tests to assert (Requested by smfr on
        #webkit).

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setComputedStyle):
        (WebCore::ElementRareData::resetComputedStyle):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::textWithDirection):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setStyleInternal):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):
        (WebCore::RenderRegion::setObjectStyleInRegion):
        * rendering/RenderRegion.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveLocal):

2013-10-22  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove HAVE_GLX macro
        https://bugs.webkit.org/show_bug.cgi?id=123191

        Reviewed by Gyuyoung Kim.

        Since r138313, HAVE(GLX) was replaced to USE(GLX) except in GraphicsSurfaceToken.h.

        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        Replace HAVE(GLX) to USE(GLX)

2013-10-22  Mark Lam  <mark.lam@apple.com>

        Gardening: fix broken build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=123174.

        Not reviewed.

        No new tests.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-10-22  Brady Eidson  <beidson@apple.com>

        Get rid of IDBObjectStoreBackendLevelDB
        https://bugs.webkit.org/show_bug.cgi?id=123174

        Reviewed by Tim Horton.

        This file was kind of a dumping ground.
        Its contents can be merged into IDBBackingStoreInterface and a new IDBIndexWriter class.

        Also took the opportunity to do a little bit of RefPtr<> and pointer-vs-reference cleanup.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h: Removed.

        * Modules/indexeddb/IDBIndexWriter.cpp: Added.
        (WebCore::IDBIndexWriter::IDBIndexWriter):
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h: Added.
        (WebCore::IDBIndexWriter::create):

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:

        * Modules/indexeddb/IDBMetadata.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::generateKey):
        (WebCore::IDBBackingStoreLevelDB::updateKeyGenerator):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::PutOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):

2013-10-22  Dean Jackson  <dino@apple.com>

        [WebGL] Implement a software rendering option on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123177

        Reviewed by Tim Horton.

        Implement a way to force software OpenGL rendering
        for WebGL, via a Setting/Preference.

        No new tests. We intentionally hide the capabilities of
        the renderer from the content, so you can't test for
        this setting. However, manual inspection is pretty
        obvious. Just go to a page with a complex shader
        such as https://www.shadertoy.com/view/lss3WS.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): If we're forcing software
        rendering, mark the context attributes as such.
        * page/Settings.in: New setting key.
        * platform/graphics/GraphicsContext3D.h: New flag in Attributes.
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): Slight update to the
        algorithm that sets a pixel format. If we're forcing software rendering,
        obviously we never want to create an accelerated pixel format.
        * platform/graphics/filters/CustomFilterGlobalContext.cpp:
        (WebCore::CustomFilterGlobalContext::prepareContextIfNeeded): Set the attribute
        here before trying to create the context.
        * platform/graphics/filters/CustomFilterGlobalContext.h: Add a forceSoftwareRendering
        flag to prepareContextIfNeeded.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect): Check the Setting before creating a custom
        filter context.

2013-10-22  Anders Carlsson  <andersca@apple.com>

        Revert r157445 since it broke certificates on Mac.
        <rdar://problem/15246926&15254017&15269117>

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/CertificateInfoCFNet.cpp: Removed.
        * platform/network/cf/ResourceResponse.h:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::setCertificateChain):
        (WebCore::ResourceResponse::certificateChain):
        * platform/network/soup/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::tlsErrors):
        (WebCore::ResourceError::setTLSErrors):
        (WebCore::ResourceError::certificate):
        (WebCore::ResourceError::setCertificate):
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::tlsError):
        (WebCore::ResourceError::platformCopy):
        (WebCore::ResourceError::platformCompare):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::soupMessageCertificate):
        (WebCore::ResourceResponse::setSoupMessageCertificate):
        (WebCore::ResourceResponse::soupMessageTLSErrors):
        (WebCore::ResourceResponse::setSoupMessageTLSErrors):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::toSoupMessage):
        (WebCore::ResourceResponse::updateFromSoupMessage):

2013-10-22  Jer Noble  <jer.noble@apple.com>

        [Media] Refactor supportsType() factory method to take a parameters object.
        https://bugs.webkit.org/show_bug.cgi?id=122489

        Reviewed by Eric Carlson.

        In order to support adding new conditional properties with which to decide
        what MediaPlayerPrivate subclass to create, replace the two versions of the
        supportsType() factory method with a single one taking a parameters object.

        At the same time, add a 'isMediaSource' parameter to that object, allowing
        MediaPlayerPrivate subclasses which support the same type and codecs but
        which do not both support MediaSource to be distinguised.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::bestMediaEngineForSupportParameters): Renamed from
            bestMediaEngineForTypeAndCodecs.
        (WebCore::MediaPlayer::nextBestMediaEngine): Added convenience function.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Call nextBestMediaEngine()
        (WebCore::MediaPlayer::supportsType): Pass parameter object.
        (WebCore::MediaPlayer::networkStateChanged): Call nextBestMediaEngine().
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsType): Handle parameter object.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine): Remove extraneous
            extendedSupportsType method.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Handle parameter object.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::supportsType): Ditto.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Remove extraneous
            extendedSupportsType method.
        (WebCore::MediaPlayerPrivateQTKit::supportsType): Handle parameter object.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::supportsType): Ditto.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/wince/MediaPlayerPrivateWinCE.h:

2013-10-22  Andreas Kling  <akling@apple.com>

        Merge SVGRenderBlock::styleWillChange() into styleDidChange().
        <https://webkit.org/b/123181>

        I meant to do this one in r157787, but better late than never.

        Reviewed by Geoffrey Garen.

2013-10-22  Sam Weinig  <sam@webkit.org>

        CTTE: Modernize RenderBlock a bit
        https://bugs.webkit.org/show_bug.cgi?id=123162

        Reviewed by Andreas Kling.

        Start threading references through RenderBlock. While we 
        are here, do some selective modernization as well.

2013-10-22  Andreas Kling  <akling@apple.com>

        Even more PassRef<RenderStyle>!
        <https://webkit.org/b/123147>

        Convert the remaining WebCore code to use PassRef for RenderStyle
        wherever they are known to be non-null.

        Reviewed by Antti Koivisto.

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157819.
        http://trac.webkit.org/changeset/157819
        https://bugs.webkit.org/show_bug.cgi?id=123180

        Broke 32-bit builds (Requested by smfr on #webkit).

        * Configurations/WebCore.xcconfig:

2013-10-22  Antti Koivisto  <antti@apple.com>

        Rename deleteLineBoxTree to deleteLines
        https://bugs.webkit.org/show_bug.cgi?id=123176

        Reviewed by Andreas Kling.

        RenderBlock::deleteLineBoxTree -> RenderBlock::deleteLines
        RenderInline::deleteLineBoxTree -> RenderInline::deleteLines

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        {ClipPathOperation, FilterOperation}::getOperationType() should not include 'get'
        https://bugs.webkit.org/show_bug.cgi?id=123172

        Reviewed by Simon Fraser.

        No new tests, just a rename.

        "get" in WebCore tends to mean that the function has out arguments; these have no arguments.
        Rename FilterOperation::getOperationType() to FilterOperation::type().
        I noticed that ClipPathOperation had the same mistake, so I fixed it there too.

        Removed long and useless list of files.

2013-10-22  Samuel White  <samuel_white@apple.com>

        AX: Add paramAttrs to fetch start and end text markers in a given rect.
        https://bugs.webkit.org/show_bug.cgi?id=122164

        Reviewed by Chris Fleizach.

        Added ability to fetch end and start text markers inside a given bounds. This gives ScreenReaders
        like VoiceOver a way to retrieve the text markers for a specified column of page text.

        Test: platform/mac/accessibility/text-marker-for-bounds.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::mainFrame):
        (WebCore::AccessibilityObject::topDocument):
        (WebCore::AccessibilityObject::visiblePositionForBounds):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper screenToContents:]):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-10-22  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Match adjustLogicalLineTopAndLogicalHeightIfNeeded's implementation with Blink's
        https://bugs.webkit.org/show_bug.cgi?id=123033

        Reviewed by David Hyatt.

        In Blink I made this function in a bit different way. This change modifies it
        to be identical, which helps a lot in the future cross-merging patches.

        No new tests, covered by existing texts.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::adjustLogicalLineTopAndLogicalHeightIfNeeded):

2013-10-22  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream more ARMv7s bits
        https://bugs.webkit.org/show_bug.cgi?id=123052

        Reviewed by Joseph Pecoraro.

        * Configurations/WebCore.xcconfig:

2013-10-22  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Mavericks build; use <> for framework include.

        * page/CaptionUserPreferencesMediaAF.cpp:

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        GammaFilterOperation seems to be dead code
        https://bugs.webkit.org/show_bug.cgi?id=123173

        Reviewed by Simon Fraser.

        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        Remove dead code.

2013-10-22  Antti Koivisto  <antti@apple.com>

        Rename some line box functions to be just about lines
        https://bugs.webkit.org/show_bug.cgi?id=123168

        Reviewed by Dave Hyatt.

        firstLineBoxBaseline -> firstLineBaseline
        hasInlineBoxChildren -> hasLines
        
        Also use hasLines in a bunch of places where firstLineBox() was used.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        
            Also use hasRenderedText() instead of firstTextBox()

        * rendering/RenderFullScreen.cpp:
        
            Fix namespace.

2013-10-22  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding Mock class to test RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=122848

        Reviewed by Eric Carlson.

        The following tests can be run:

            RTCPeerConnection-createAnswer.html
            RTCPeerConnection-createOffer.html
            RTCPeerConnection-ice.html
            RTCPeerConnection-localDescription.html
            RTCPeerConnection-remoteDescription.html
            RTCPeerConnection-state.html

        Tests that require a MediaStream object, by invoking getUserMedia,
        are not ready to run yet.

        No new tests needed.

        * CMakeLists.txt:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (WebCore::createHandler):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mock/RTCNotifiersMock.cpp: Added.
        * platform/mock/RTCNotifiersMock.h: Added.
        * platform/mock/RTCPeerConnectionHandlerMock.cpp: Added.
        * platform/mock/RTCPeerConnectionHandlerMock.h: Copied from Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h.
        * platform/mock/TimerEventBasedMock.h: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::enableMockRTCPeerConnectionHandler):
        * testing/Internals.h:

2013-10-22  Zan Dobersek  <zdobersek@igalia.com>

        WebCore::fillWithEmptyClients adopts new empty clients before leaking their pointers
        https://bugs.webkit.org/show_bug.cgi?id=122945

        Reviewed by Anders Carlsson.

        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients): Store the static empty clients as NeverDestroyed, rather than
        adopting the pointer of each heap-allocated object and then immediately leaking that pointer.

2013-10-22  Zan Dobersek  <zdobersek@igalia.com>

        Simplify HRTFDatabaseLoader's load map
        https://bugs.webkit.org/show_bug.cgi?id=122944

        Reviewed by Eric Carlson.

        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::loaderMap): Return a reference to a NeverDestroyed HashMap that maps sample rates to loaders.
        (WebCore::HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary):
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        * platform/audio/HRTFDatabaseLoader.h: Remove the LoaderMap type definition, the private singleton of that type
        and the singleton's unused getter.

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Support hardware accelerated filters
        https://bugs.webkit.org/show_bug.cgi?id=123139

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export a variety of filter-related things.

        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setFilters):
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        (PlatformCAFilters::setFiltersOnLayer):
        setFiltersOnLayer should take a PlatformLayer instead of a PlatformCALayer
        as its argument, because it doesn't need a PlatformCALayer, and this way
        we can share code with the RemoteLayerTreeHost, which only has PlatformLayers
        and not PlatformCALayers.

2013-10-22  Brendan Long  <b.long@cablelabs.com>

        cue.text fails for some track element cues
        https://bugs.webkit.org/show_bug.cgi?id=81123

        Reviewed by Eric Carlson.

        Test: media/track/track-long-captions-file.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseBytes): Use buffer when we don't have full lines.
        (WebCore::WebVTTParser::fileFinished): Force file to finish parsing.
        (WebCore::WebVTTParser::hasRequiredFileIdentifier): Simplify due to using String.
        (WebCore::WebVTTParser::collectCueText): Don't automatically create cues when we run out of data.
        (WebCore::WebVTTParser::collectNextLine): Use buffer.
        * html/track/WebVTTParser.h: Add m_buffer and Finished state.
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::notifyFinished): Call m_parser->fileFinished() when done.

2013-10-22  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=123161

        Reviewed by Brent Fulgham.

        * rendering/RenderFlowThread.h: Move USE(ACCELERATED_COMPOSITING) guard to expose needed type.

2013-10-21  Brady Eidson  <beidson@apple.com>

        Add a cross-platform IDBRecordIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=123138

        Reviewed by Andreas Kling.

        Add the cross-platform header:
        * Modules/indexeddb/IDBRecordIdentifier.h: Added.
        (WebCore::IDBRecordIdentifier::create):
        (WebCore::IDBRecordIdentifier::encodedPrimaryKey):
        (WebCore::IDBRecordIdentifier::version):
        (WebCore::IDBRecordIdentifier::reset):
        (WebCore::IDBRecordIdentifier::IDBRecordIdentifier):
        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

        Remove the old abstract and LevelDB classes:
        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        Use the cross-platform one everywhere:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::PutOperation::perform):

2013-10-22  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Possible performance regression after r157567
        https://bugs.webkit.org/show_bug.cgi?id=123016

        Reviewed by Andreas Kling.

        The revision 157567 http://trac.webkit.org/changeset/157567 may have regressed
        Parser/html5-full-render by ~1.1% and Parser/html-parser by ~2%. These changes
        try to optimize the initial patch, based on Andreas Kling's review.

        The patch also adds a couple of refactorings that should make the code easier to read:
        - the CSS Shapes functions are now wrapped in a single #if clause
        - the CSS Shapes and CSS Regions pre-layout preparations are wrapped in a helper function

        The RenderFlowThread::logicalWidthChangedInRegionsForBlock function is optimized by passing
        it information about the state of the relayout children flag. If the flag is true already,
        some of the steps are skipped.

        Tests: no new tests.

        * dom/Element.cpp:
        (WebCore::Element::webkitGetRegionFlowRanges):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::shapeInfoRequiresRelayout):
        (WebCore::RenderBlock::updateShapesBeforeBlockLayout):
        (WebCore::RenderBlock::computeShapeSize):
        (WebCore::RenderBlock::prepareShapesAndPaginationBeforeBlockLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded):
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        (WebCore::RenderBlockFlow::ensureRareData):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderElement::isRenderNamedFlowFragmentContainer):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):

2013-10-22  Andreas Kling  <akling@apple.com>

        CSSStyleSheet constructor functions should return PassRef.
        <https://webkit.org/b/123156>

        Make CSSStyleSheet::create*() return PassRef and tighten some call
        sites that were using them. Most callers didn't need any tweaks to
        take advantage of PassRef.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLFraction always has a MathMLInlineContainerElement.
        <https://webkit.org/b/123154>

        This renderer is never anonymous and always has a corresponding
        MathMLInlineContainerElement. Overload element() with a tighter
        return type.

        Also marked the class FINAL and made most member functions private.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        FontGlyphs constructor functions should return PassRef.
        <https://webkit.org/b/123159>

        Made the two FontGlyphs creator functions return PassRef and tweaked
        the FontGlyphsCache in Font.cpp to make more efficient use of it.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Fix some more code to use RenderElement instead of RenderObject.
        <https://webkit.org/b/123149>

        Using RenderElement where possible lets us skip the isRenderElement()
        branch in RenderObject::style() and generates much tighter code.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Merge SVG renderers' styleWillChange() into styleDidChange().
        <https://webkit.org/b/123108>

        This work can just as well be done after setting the style.
        Three more styleWillChange() overloads gone.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        CSSValueList constructor functions should return PassRef.
        <https://webkit.org/b/123151>

        These functions always return objects, and thus can return PassRef.
        Also made CSSValueList::createFromParserValueList() take a reference
        since that function is only ever called with a non-null value.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Avoid parent style ref churn in createTextRendererIfNeeded().
        <https://webkit.org/b/123148>

        There's no need to take a temporary ref on the parent's RenderStyle
        while creating a text renderer. It's not going away, and the text
        renderer is not going to participate in ownership afterwards.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Remove some unnecessary null checks in RenderElement::setStyle().
        <https://webkit.org/b/123146>

        After assigning the new style to RenderElement::m_style, we know that
        it'll be non-null, so remove all the checking for this.

        Reviewed by Antti Koivisto.

2013-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce ACCESSIBILITY_OBJECT_TYPE_CASTS to replace manual toFoo() in accessibility child class
        https://bugs.webkit.org/show_bug.cgi?id=123140

        Reviewed by Andreas Kling.

        As a step to let toFoo use TYPE_CASTS_BASE, DEFINE_TYPE_CASTS can be used for toFoo() in accessibility
        child class. The DEFINE_TYPE_CASTS will generate plenty more helper functions for accessibility type cast.

        No new tests, no behavior changes.

        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.h:

2013-10-22  Brian Holt  <brian.holt@samsung.com>

        [GTK] Add WebKit2 API for TLS errors
        https://bugs.webkit.org/show_bug.cgi?id=120160

        Reviewed by Carlos Garcia Campos.

        Added a new constructor for CertificateInfo under Soup.

        * platform/network/CertificateInfo.h:
        * platform/network/soup/CertificateInfoSoup.cpp:
        (WebCore::CertificateInfo::CertificateInfo): New constructor using
        GTlsCertificateFlags and GTlsCertificate.

2013-10-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use RenderStyle::hasFlowFrom when needed
        https://bugs.webkit.org/show_bug.cgi?id=122543

        Reviewed by David Hyatt.

        Rename RenderStyle::hasStyleRegion -> RenderStyle::hasFlowFrom.
        Use RenderStyle::hasFlowFrom() helper function instead of directly
        checking the value of RenderStyle::regionThread().

        No change of functionality, covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didAttachRenderers):
        * dom/PseudoElement.h:
        (WebCore::pseudoElementRendererIsNeeded):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        * rendering/style/RenderStyle.h:

2013-10-21  Brent Fulgham  <bfulgham@apple.com>

        [WIN] Properly support reverse animations without needing software fallback.
        https://bugs.webkit.org/show_bug.cgi?id=85121

        Reviewed by Dean Jackson.

        Testing is provided by existing animation tests.

        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::createReversed): Added.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addAnimation): The early return when performing a reverse or
        autoreverse animation is no longer needed.
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction): Use new reversed function.
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFTimingFunction): Ditto.
        (PlatformCAAnimation::setTimingFunction): Pass 'reverse' flag.
        (PlatformCAAnimation::setTimingFunctions): Ditto.

2013-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use TYPE_CASTS_BASE for CSS_VALUE_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=123126

        Reviewed by Andreas Kling.

        TYPE_CASTS_BASE was moved to common place to be used by all toFoo().
        CSS_VALUE_TYPE_CASTS starts to use it for CSS child value. This change
        generates plenty more helper functions for toCSSFooValue().

        Additionally, this use support that toWebKitCSSFooValue, which couldn't
        use CSS_VALUE_TYPE_CASTS macro.

        No new tests, no behavior change.

        * css/CSSAspectRatioValue.h:
        * css/CSSBorderImageSliceValue.h:
        * css/CSSCalculationValue.h:
        * css/CSSCanvasValue.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSCursorImageValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontFeatureValue.h:
        * css/CSSFontValue.h:
        * css/CSSFunctionValue.h:
        * css/CSSGradientValue.h:
        * css/CSSGridTemplateValue.h:
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.h:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.h:
        * css/CSSLineBoxContainValue.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSReflectValue.h:
        * css/CSSShadowValue.h:
        * css/CSSTimingFunctionValue.h:
        * css/CSSUnicodeRangeValue.h:
        * css/CSSValue.h:
        * css/CSSValueList.h:
        * css/CSSVariableValue.h:
        * css/WebKitCSSArrayFunctionValue.h:
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSMatFunctionValue.h:
        * css/WebKitCSSMixFunctionValue.h:
        * css/WebKitCSSSVGDocumentValue.h:
        * css/WebKitCSSShaderValue.h:

2013-10-21  Joone Hur  <joone.hur@intel.com>

        Bad cast with toRenderBoxModelObject in RenderBlock::updateFirstLetter()
        https://bugs.webkit.org/show_bug.cgi?id=123013

        Reviewed by Andreas Kling.

        No new tests because this was reported by Google ClusterFuzz.
        https://codereview.chromium.org/25713009/

        There is a case that toRenderBoxModelObject causes a crash in RenderBlock::updateFirstLetter() 
        due to bad cast, so we need to check whether the RenderObject is a RenderBoxModelObject 
        by running isBoxModelObject() before calling toRenderBoxModelObject.  

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

2013-10-21  Brady Eidson  <beidson@apple.com>

        Make IDBTransactionCoordinatorLevelDB cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123124

        Enthusiastically reviewed by Tim Horton.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        Make more methods pure virtual in the interface:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        Update the name of the class, and use IDBTransactionBackendInterface instead of IDBTransactionBackendLeveDB:
        * Modules/indexeddb/IDBTransactionCoordinator.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp.
        (WebCore::IDBTransactionCoordinator::create):
        (WebCore::IDBTransactionCoordinator::IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::~IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::didCreateTransaction):
        (WebCore::IDBTransactionCoordinator::didStartTransaction):
        (WebCore::IDBTransactionCoordinator::didFinishTransaction):
        (WebCore::IDBTransactionCoordinator::isActive):
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        (WebCore::doScopesOverlap):
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        * Modules/indexeddb/IDBTransactionCoordinator.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.h.

        Update the name of the class elsewhere:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:
        (WebCore::IDBDatabaseBackendLevelDB::transactionCoordinator):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:

2013-10-21  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream JSGlobalObject::shouldInterruptScriptBeforeTimeout()
        https://bugs.webkit.org/show_bug.cgi?id=123045

        Reviewed by Joseph Pecoraro.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage): Added.
        (WebCore::JSDOMWindowBase::shouldInterruptScript): Extracted comment and assertion
        about null Page object into WebCore::shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage()
        so that it can be shared by both this function and JSDOMWindowBase::shouldInterruptScriptBeforeTimeout().
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::shouldInterruptScriptBeforeTimeout): Added.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * loader/EmptyClients.h: Added isStopping(). We'll land the iOS chrome client implementation
        in a subsequent patch.
        * page/ChromeClient.h: Added isStopping().

2013-10-21  Anders Carlsson  <andersca@apple.com>

        Navigation policy callback not called when performing the same fragment navigation twice
        https://bugs.webkit.org/show_bug.cgi?id=123121
        <rdar://problem/15230466>

        Reviewed by Beth Dakin.

        There's code in PolicyChecker::checkNavigationPolicy that will call the decision function right away 
        if the requests are equal, without consulting any policy client. Because of this, make sure to empty out
        the last checked request of the document loader when doing a fragment navigation.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):

2013-10-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; unprotect the declaration of updateSleepDisabling();

        * html/HTMLMediaElement.h:

2013-10-20  Mark Lam  <mark.lam@apple.com>

        Avoid JSC debugger overhead unless needed.
        https://bugs.webkit.org/show_bug.cgi?id=123084.

        Reviewed by Geoffrey Garen.

        No new tests.

        - If no breakpoints are set, we now avoid calling the debug hook callbacks.
        - If no break on exception is set, we also avoid exception event debug callbacks.
        - When we return from the ScriptDebugServer to the JSC::Debugger, we may no
          longer call the debug hook callbacks if not needed. Hence, the m_currentCallFrame
          pointer in the ScriptDebugServer may become stale. To avoid this issue, before
          returning, the ScriptDebugServer will clear its m_currentCallFrame if
          needsOpDebugCallbacks() is false.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::dispatchDidContinue):
        (WebCore::ScriptDebugServer::exception):
        (WebCore::ScriptDebugServer::didReachBreakpoint):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::reset):

2013-10-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Grammar markers are not updated when switching between 1x and 2x
        https://bugs.webkit.org/show_bug.cgi?id=122146

        Reviewed by Dean Jackson.

        When running editing/spelling/grammar-markers-hidpi.html, the 2x
        grammar/spelling dot resources are cached. If you then run
        editing/spelling/grammar-markers.html without tearing down WebKit,
        it re-uses the 2x dots. The difference between the two tests is a call
        to testRunner.setBackingScaleFactor().

        We create a NSColor from an NSImage, and remember it in a static
        variable. However, NSColor inspects the current graphics context to
        determine which resolution to use, and then remembers that decision.
        Therefore, we want to recreate the NSColor whenever the device pixel
        ratio changes. This patch adds a new static function to GraphicsContext
        which recreates this NSColor every time the ratio changes.

        Tests: editing/spelling/grammar-markers.html
               editing/spelling/inline_spelling_markers.html

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::makePattern):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):

2013-10-21  Simon Fraser  <simon.fraser@apple.com>

        Use pink layer borders for compositing layers with a contents layer
        https://bugs.webkit.org/show_bug.cgi?id=123118

        Reviewed by Dean Jackson.

        With the existing layer border colors, it's not possible to distinguish an empty
        layer from one with solid color, image or video contents. So use a pink color
        for those. This makes it easier to diagnose bugs like 122784.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo):

2013-10-21  Jer Noble  <jer.noble@apple.com>

        Limit use of display sleep assertion when <video> element is off-screen.
        https://bugs.webkit.org/show_bug.cgi?id=123041

        Reviewed by Darin Adler.

        Use page visibility changes to suspend and resume the use of sleep assertions in
        HTMLMediaElement.

        Page will propogate the page visibility change notifications to its Documents, which
        will further propogate those notifications to registered elements.  Upon receiving
        these notifications, HTMLMediaElement will release or take a DisplaySleepDisabler
        token if necessary.

        Also, rename HTMLMediaElement's updateDisableSleep() to updateSleepDisabling() and wrap
        the implementation in a PLATFORM(MAC) guard rather than at each call site.

        * dom/Document.cpp:
        (WebCore::Document::registerForVisibilityStateCallbacks): Added registration method.
        (WebCore::Document::unregisterForVisibilityStateCallbacks): Added unregistration method.
        (WebCore::Document::visibilityStateChanged): Call all registered clients.
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::visibilityStateChanged): Added default virtual method to be overridden
            by subclasses.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Register for the notification, and check the
            current status of Document::hidden().
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Unregister for the notification.
        (WebCore::HTMLMediaElement::visibilityStateChanged): Set m_displaySleepDisablingSuspended
            and call updateSleepDisabling().
        (WebCore::HTMLMediaElement::shouldDisableSleep): Add a check for m_displaySleepDisablingSuspended.
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::setVisibilityState): Pass to every child document.

        Rename updateDisableSleep() -> updateSleepDisabling():
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::stop):

2013-10-21  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        MediaStreamTrack now tracks its own state
        https://bugs.webkit.org/show_bug.cgi?id=123025

        Reviewed by Jer Noble.

        The spec says that a MediaStreamSource can be shared by different tracks,
        so a track must have its own state tracking, synchronizing with its MediaStreamSource when
        the underlying MediaStreamSource changes the readyState.
        In the old implementation if a user invoked the stop method, its readyState method was still
        returning the MediaStreamSource state, which was wrong.
        This also adds a setEnabled method, which can be used to set the state of a track when a
        remote peer ends it, for instance.

        No new tests needed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::readyState):
        (WebCore::MediaStreamTrack::setState):
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::ended):
        (WebCore::MediaStreamTrack::sourceStateChanged):
        (WebCore::MediaStreamTrack::trackDidEnd):
        * Modules/mediastream/MediaStreamTrack.h:

2013-10-21  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Clean up transaction logging
        https://bugs.webkit.org/show_bug.cgi?id=123116

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export some TextStream functions.

2013-10-21  Brady Eidson  <beidson@apple.com>

        Transition most use of IDBBackingStoreLevelDB to IDBBackingStoreInterface
        https://bugs.webkit.org/show_bug.cgi?id=123105

        Reviewed by Anders Carlsson.

        Export more required headers:
        * WebCore.xcodeproj/project.pbxproj:

        Flesh out many of the pure virtual methods on IDBBackingStoreInterface, as well as
        the RecordIdentifier and Cursor classes:

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        (WebCore::IDBBackingStoreInterface::RecordIdentifier::~RecordIdentifier):
        (WebCore::IDBBackingStoreInterface::Cursor::~Cursor):

        Use IDBBackingStoreInterface, IDBBackingStoreInterface::RecordIdentifier, and
        IDBBackingStoreInterface::Cursor wherever possible:

        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::IndexKeyCursorImpl::clone):
        (WebCore::IndexCursorImpl::clone):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        (WebCore::IDBBackingStoreLevelDB::Transaction::Transaction):
        (WebCore::IDBBackingStoreLevelDB::Transaction::begin):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        (WebCore::IDBBackingStoreLevelDB::RecordIdentifier::RecordIdentifier):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        (WebCore::IDBCursorBackendLevelDB::create):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::create):
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        (WebCore::IDBDatabaseBackendLevelDB::backingStore):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::createTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createTransactionBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::verifyIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::addingKeyAllowed):
        (WebCore::IDBObjectStoreBackendLevelDB::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendLevelDB::generateKey):
        (WebCore::IDBObjectStoreBackendLevelDB::updateKeyGenerator):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::GetOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-21  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes][CSS Regions] Don't apply shape-inside when we have multiple auto-height regions and the height is not resolved
        https://bugs.webkit.org/show_bug.cgi?id=123103

        Reviewed by David Hyatt.

        When we have multiple regions with auto-height, the region's height is not resolved from other elements we can't apply the
        the shape on the region. This patch prevents to apply the shape and fixes the behavior for these cases.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-autoheight-regions.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-21  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Backing store should take contentsScale into account
        https://bugs.webkit.org/show_bug.cgi?id=123106

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export FloatRect::scale.

2013-10-21  Andreas Kling  <akling@apple.com>

        RenderScrollbarPart doesn't need styleWillChange().
        <https://webkit.org/b/123113>

        We will call setInline(false) in styleDidChange(), there's no need
        to override styleWillChange() just to do it twice.

        Reviewed by Darin Adler.

2013-10-21  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] The layers from the flow thread should be collected under the regions' layers.
        https://bugs.webkit.org/show_bug.cgi?id=120457

        Reviewed by David Hyatt.

        This patch is based on the work of Alexandru Chiculita at https://bugs.webkit.org/attachment.cgi?id=203872&action=review

        The composited layers inside the named flow threads are collected as part of the regions (as children of the
        GraphicsLayer of the layer that corresponds to the region (which is attached to the parent renderer of
        RenderNameFlowFragment)).
        When a region displays a layer that needs accelerated compositing we activate the accelerated compositing for
        that region too (inside RenderLayerCompositor::computeRegionCompositingRequirements).

        This patch has landed before (as http://trac.webkit.org/changeset/156451), but was reverted because
        fast/multicol/mixed-positioning-stacking-order.html failed. The fix is inside RenderLayerCompositor::canBeComposited
        that only enables compositing for layers inside flow threads that collect the graphics layers under the regions.

        Another change from changeset #156451 is that now the region renderers are created as anonymous renderers under
        the element that has the flow-from property. When a composited layer is needed for the region, it sits in it's
        parent renderer, not in the region renderer (RenderNamedFlowFragment).

        Tests: compositing/regions/crash-transform-inside-region.html
               compositing/regions/floated-region-with-transformed-child.html
               compositing/regions/move-layer-from-one-region-to-another.html
               compositing/regions/propagate-region-box-shadow-border-padding-for-video.html
               compositing/regions/propagate-region-box-shadow-border-padding.html
               compositing/regions/region-as-layer-in-another-flowthread.html
               compositing/regions/transform-transparent-positioned-video-inside-region.html
               compositing/regions/transformed-layer-inside-transformed-layer.html
               compositing/regions/z-index-update.html
               compositing/regions/z-index.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::propagateStyleToAnonymousChildren): Not for RenderFlowThreads, as they are updated
        through the RenderView::styleDidChange function.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout): When the layout of the flow thread is over (including the 2 phase layout),
        we update all the mappings between the layers inside the flow thread and the regions where those layers will be
        painted.
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant): Whether any of the regions has a compositing descendant.
        (WebCore::RenderFlowThread::getLayerListForRegion):
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        (WebCore::RenderFlowThread::cachedRegionForCompositedLayer):
        (WebCore::RenderFlowThread::collectsGraphicsLayersUnderRegions):
        (WebCore::RenderFlowThread::updateLayerToRegionMappings): Triggers an update of the layers if a layer has moved
        from a region to another since the last update.
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::pushRenderFlowThread):
        * rendering/RenderGeometryMap.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::enclosingFlowThreadAncestor):
        (WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::calculateLayerBounds): When we calculate the bounds of the RenderView, we ignore those
        flow threads that collect the graphics layers under the regions.
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds): Not if it's a flow thread that collects the graphics
        layers under the regions
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Now adjusts the ancestorCompositingBounds for the FlowThread.
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): Make sure that the region propagates
        its borders, paddings, outlines or box-shadows to layers inside it.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Now calls computeRegionCompositingRequirements.
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Do not iterate the RenderFlowThread directly if
        we are going to collect the composited layers as part of regions.
        (WebCore::RenderLayerCompositor::rebuildRegionCompositingLayerTree):
        (WebCore::RenderLayerCompositor::canBeComposited): CSS Regions flow threads do not need to be composited as we
        use composited RenderRegions to render the background of the RenderFlowThread.
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason): If it's a container of a css region.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        (WebCore::RenderNamedFlowFragment::layerOwner): When the content inside the region requires the region to have a
        layer, the layer will be created on the region's parent renderer instead. This method returns that renderer
        holding the layer. The return value may be null.
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::addFlowChild):
        (WebCore::RenderNamedFlowThread::removeFlowChild):
        (WebCore::RenderNamedFlowThread::collectsGraphicsLayersUnderRegions):
        * rendering/RenderNamedFlowThread.h: m_flowThreadChildList is now allocated through an OwnPtr to keep the render
        arena under the size limit.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderRegion.h:
        (WebCore::toRenderRegion):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * WebCore.exp.in: WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions

2013-10-21  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing mediastream debug build
        https://bugs.webkit.org/show_bug.cgi?id=123104

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):

2013-10-21  Andreas Kling  <akling@apple.com>

        Merge RenderListMarker::styleWillChange() into styleDidChange().
        <https://webkit.org/b/123098>

        If the marker's list-style-type or list-style-position changed, we
        need to dirty the layout. Move this logic to styleDidChange() so we
        can get rid of one styleWillChange() overload.

        Reviewed by Antti Koivisto.

2013-10-21  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix WHITESPACE issues in the CSS grammar.
        https://bugs.webkit.org/show_bug.cgi?id=123082

        Reviewed by Andreas Kling.

        This is a port of Rune Lillesveen's patch from https://codereview.chromium.org/25607005

        Fix WHITESPACE issues in the CSS grammar.

        A single WHITESPACE token consumes consecutive spaces, but does not consume
        spaces separated by comments. That means S* and S+ in CSS grammars need to
        accept multiple WHITESPACE tokens. Additionally, white spaces are not
        mandatory to separate an @-symbol and the rest of the prelude.

        Use space non-terminal instead of WHITESPACE for S+ in calc expressions.

        Use maybe_space non-terminal instead of WHITESPACE for S* after @-webkit-filter
        and @-webkit-region.

        Tests: fast/css/calc-comments-allowed.html
               fast/regions/webkit-region-syntax-space.html

        * css/CSSGrammar.y.in:

2013-10-21  Anton Obzhirov  <a.obzhirov@samsung.com>

        [ATK] Use atk_object_notify_state_change instead of manually emitting signals
        https://bugs.webkit.org/show_bug.cgi?id=122968

        Reviewed by Mario Sanchez Prada.

        Refactor emitting "state-change" event to use atk_object_notify_state_change
        instead of using g_signal_emit_by_name.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleDetach):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::maybeEmitTextFocusChange):

2013-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Make TYPE_CASTS_BASE more flexible
        https://bugs.webkit.org/show_bug.cgi?id=122951

        Reviewed by Andreas Kling.

        TYPE_CASTS_BASE is being used by node|element type casts. However, it is difficult
        to be used by other type casts. For instance, CSSValue, Accessibility and so on.
        This patch modifies TYPE_CASTS_BASE which can support other type casts.

        Besides TYPE_CASTS_BASE body is moved from node.h to Assertions.h.

        No new tests, no behavior changes.

        * dom/Document.h:
        * dom/Node.h:

2013-10-21  Santosh Mahto  <santosh.ma@samsung.com>

        ASSERTION FAILED: !style->propertyIsImportant(propertyID) in WebCore::setTextDecorationProperty
        https://bugs.webkit.org/show_bug.cgi?id=122097

        Reviewed by Ryosuke Niwa.

        When remove format command is called we pushdown the ancestor style
        down to its children. Currently applying inline style to iframe
        while pushing down style which causes iframe to be reinserted in tree and
        triggres again subframe loading which repeats everytime and finally
        crash happens. So we should avoid applying inline style to iframe
        element as it doesnot reflect in its content while pushing down style
        on it.

        And ASSERT call has been removed from setTextDecoration property as
        the scenario is perfectly valid case.

        Test: editing/execCommand/remove-format-textdecoration-in-iframe.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Return if
        element is iframe.
        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::setTextDecorationProperty): Remove ASSERT.

2013-10-20  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 5)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Antti Koivisto.

        - Move m_lineBoxes to RenderBlockFlow.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::innerTextIfTruncated):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::deleteLineBoxTree):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::removeFromDelayedUpdateScrollInfoSet):
        (WebCore::RenderBlock::paintContents):
        (WebCore::blockDirectionOffset):
        (WebCore::inlineDirectionOffset):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::inlineBlockBaseline):
        (WebCore::RenderBlock::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlock::addFocusRingRects):
        (WebCore::RenderBlock::showLineTreeAndMark):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        (WebCore::RenderBlock::hasInlineBoxChildren):
        (WebCore::RenderBlock::paintInlineChildren):
        (WebCore::RenderBlock::hitTestInlineChildren):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::deleteLineBoxTree):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        (WebCore::RenderBlockFlow::markLinesDirtyInBlockRange):
        (WebCore::RenderBlockFlow::firstLineBoxBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::RenderBlockFlow::positionForBox):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::showLineTreeAndMark):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::lineBoxes):
        (WebCore::RenderBlockFlow::firstLineBox):
        (WebCore::RenderBlockFlow::lastLineBox):
        (WebCore::RenderBlockFlow::firstRootBox):
        (WebCore::RenderBlockFlow::lastRootBox):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):

2013-10-20  Andreas Kling  <akling@apple.com>

        Avoid unnecessary vector copy in AnimationController event dispatch.
        <https://webkit.org/b/122994>

        Use Vector's move constructor instead of making a copy of the pending
        events queue and then clearing it.

        Reviewed by Simon Fraser.

2013-10-19  Brady Eidson  <beidson@apple.com>

        Add abstract IDBBackingStoreInterface, use it to get IDBDatabaseBackendLevelDB closer to going cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=123074

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBBackingStoreInterface.h: Added.
        (WebCore::IDBBackingStoreInterface::~IDBBackingStoreInterface):
        (WebCore::IDBBackingStoreInterface::Transaction::~Transaction):

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        (WebCore::IDBBackingStoreLevelDB::Transaction::reset):
        (WebCore::IDBBackingStoreLevelDB::Transaction::levelDBTransactionFrom):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::deleteFunction):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::verifyIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:
        (WebCore::IDBTransactionBackendLevelDB::backingStoreTransaction):

        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

2013-10-20  Andreas Kling  <akling@apple.com>

        Use PassRef for StyleSheetContents.
        <https://webkit.org/b/123083>

        Let functions that return newly-constructed StyleSheetContents
        objects vend PassRef<StyleSheetContents> instead of PassRefPtr.

        Updated functions that take StyleSheetContents in arguments
        accordingly. And CSSStyleSheet now has a Ref internally. Woo!

        Reviewed by Antti Koivisto.

2013-10-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing "unused parameter" compiling warnings from WebKit2 and WebCore
        https://bugs.webkit.org/show_bug.cgi?id=123075

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (lineAtPositionForAtkBoundary):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry):

2013-10-19  Andreas Kling  <akling@apple.com>

        Use PassRef for constructing StyleRules.
        <https://webkit.org/b/123072>

        Let functions that return newly-constructed StyleRuleFoo objects
        vend PassRef<StyleRuleFoo> instead of PassRefPtr.

        Since StyleRuleBase::copy() has to return something, we can't rely
        on ASSERT_NOT_REACHED() + return nullptr anymore, so I've replaced
        those with CRASH(). No call sites actually handled null anyway.

        Reviewed by Sam Weinig.

2013-10-19  Jer Noble  <jer.noble@apple.com>

        Unreviewed roll out of r157695; broke Mac builds.

        * Configurations/FeatureDefines.xcconfig:

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

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-19  Sam Weinig  <sam@webkit.org>

        CTTE: Tighten up type usage around InputType::innerTextElement()
        https://bugs.webkit.org/show_bug.cgi?id=123078

        Reviewed by Anders Carlsson.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isTextControlInnerTextElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::innerTextElement):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::innerTextElement):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::hasVisibleTextArea):
        (WebCore::HTMLTextFormControlElement::selection):
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        * html/HTMLTextFormControlElement.h:
        * html/InputType.h:
        (WebCore::InputType::innerTextElement):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::innerTextElement):
        * html/TextFieldInputType.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::renderer):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::isTextControlInnerTextElement):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isTextControlInnerBlock):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::innerTextElement):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::textBlockLogicalWidth):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::computeLogicalHeight):
        (WebCore::RenderTextControl::hitInnerTextElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::autoscroll):
        (WebCore::RenderTextControlSingleLine::scroll):
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::toRenderTextControlInnerBlock):

2013-10-19  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 4)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Andreas Kling.

        - Fix classes derived from RenderBlockFlow that were still calling
          up to RenderBlock rather than RenderBlockFlow.

        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::styleDidChange):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::nodeAtPoint):
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreenPlaceholder::willBeDestroyed):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::styleDidChange):
        (WebCore::RenderMultiColumnBlock::updateLogicalWidthAndColumnWidth):
        (WebCore::RenderMultiColumnBlock::addChild):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsBlock::styleDidChange):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::removeChild):
        (WebCore::RenderRubyRun::layout):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::textAlignmentForLine):
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds):
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::willBeRemovedFromTree):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::willBeRemovedFromTree):
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        (WebCore::RenderTableCell::offsetFromContainer):
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        (WebCore::RenderTableCell::styleDidChange):
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        (WebCore::RenderTableCell::paint):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scrollWidth):
        (WebCore::RenderTextControlSingleLine::scrollHeight):
        (WebCore::RenderTextControlSingleLine::scrollLeft):
        (WebCore::RenderTextControlSingleLine::scrollTop):
        (WebCore::RenderTextControlSingleLine::scroll):
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layoutContent):
        (WebCore::RenderView::addChild):
        (WebCore::RenderView::visualOverflowRect):
        (WebCore::RenderView::styleDidChange):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle):
        (WebCore::RenderSVGBlock::updateFromStyle):
        (WebCore::RenderSVGBlock::willBeDestroyed):
        (WebCore::RenderSVGBlock::styleWillChange):
        (WebCore::RenderSVGBlock::styleDidChange):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::flowBoxForRenderer):

2013-10-19  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Andreas Kling.

        - Move containsNonZeroBidiLevel to RenderBlockFlow.

        * editing/Editor.cpp:
        (WebCore::Editor::hasBidiSelection):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::containsNonZeroBidiLevel):
        * rendering/RenderBlockFlow.h:

2013-10-18  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Antti Koivisto.

        - Move truncation (e.g. line clamp and ellipse) support to RenderBlockFlow.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::markupBox):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::shouldCheckLines):
        (WebCore::RenderBlockFlow::lineAtIndex):
        (WebCore::RenderBlockFlow::lineCount):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlockFlow::heightForLineCount):
        (WebCore::RenderBlockFlow::clearTruncation):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):

2013-10-19  Andreas Kling  <akling@apple.com>

        StyleResolver should deal in PassRef<RenderStyle> where possible.
        <https://webkit.org/b/123061>

        Make StyleResolver functions that returned or took RenderStyles
        by PassRefPtr use PassRef instead where possible.

        Reviewed by Anders Carlsson.

2013-10-19  Brady Eidson  <beidson@apple.com>

        Global rename of the class "IDBBackingStore" to "IDBBackingStoreLevelDB"

        Rubberstamped by Anders Carlsson (And Andreas Kling wanted to, but he wasn’t around)

        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:

2013-10-19  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Link fails.
        https://bugs.webkit.org/show_bug.cgi?id=123019

        Reviewed by Darin Adler.

        Added empty CertificateInfo implementation for Curl.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/curl/CertificateInfoCurl.cpp: Added.
        (WebCore::CertificateInfo::CertificateInfo):
        (WebCore::CertificateInfo::~CertificateInfo):

2013-10-19  Filip Pizlo  <fpizlo@apple.com>

        libWebCoreTestSupport should have explicit exports
        https://bugs.webkit.org/show_bug.cgi?id=123053

        Reviewed by Oliver Hunt.

        No new tests because there is no change in behavior.

        * Configurations/WebCoreTestSupport.xcconfig:
        * testing/js/WebCoreTestSupport.h:

2013-10-18  Andreas Kling  <akling@apple.com>

        Start passing RenderStyle around with PassRef.
        <https://webkit.org/b/123051>

        Made the RenderStyle::create methods return PassRef<RenderStyle>
        and RenderElement::setStyle take a PassRef<RenderStyle>.

        Reviewed by Darin Adler.

2013-10-18  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Dan Bernstein.

        - Make the RootInlineBox constructor take a RenderBlockFlow.
        - Move createRootInlineBox, and createAndAppendRootInlineBox to RenderBlockFlow.

        * editing/VisibleUnits.cpp:
        (WebCore::absoluteLineDirectionPointToLocalPointInBlock):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::locationIncludingFlipping):
        (WebCore::InlineBox::flipForWritingMode):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createRootInlineBox):
        (WebCore::RenderBlockFlow::createAndAppendRootInlineBox):
        (WebCore::createInlineBoxForRenderer):
        (WebCore::RenderBlockFlow::createLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::localSelectionRect):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::rendererLineBoxes):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::setContainingRegion):
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::lineSnapAdjustment):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::computeCaretRect):
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::blockDirectionPointInLine):
        (WebCore::RootInlineBox::blockFlow):
        (WebCore::RootInlineBox::closestLeafChildForPoint):
        (WebCore::RootInlineBox::removeLineBoxFromRenderObject):
        (WebCore::RootInlineBox::extractLineBoxFromRenderObject):
        (WebCore::RootInlineBox::attachLineBoxToRenderObject):
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/svg/RenderSVGText.h:
        (WebCore::toRenderSVGText):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        (WebCore::SVGRootInlineBox::renderSVGText):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutRootBox):
        * rendering/svg/SVGRootInlineBox.h:

2013-10-18  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Double-buffering and minimization of repaints
        https://bugs.webkit.org/show_bug.cgi?id=123043

        Reviewed by Simon Fraser.

        No new tests, not yet testable.

        * WebCore.exp.in:
        Export one version of drawLayerContents and Region::contains.

        * WebCore.xcodeproj/project.pbxproj:
        Expose WebLayer.h as a private header.

        * platform/graphics/mac/WebLayer.h:
        Clean up this header, and add a new drawLayerContents that can operate without a CALayer.

        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        Split drawLayerContents into one method that acquires properties CALayer,
        and one that just does the painting.

2013-10-18  Anders Carlsson  <andersca@apple.com>

        Try to fix the Lion build.

        * bindings/objc/ObjCNodeFilterCondition.h:

2013-10-18  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebSafe{GCActivityCallback, IncrementalSweeper}IOS
        https://bugs.webkit.org/show_bug.cgi?id=123049

        Reviewed by Mark Hahnenberg.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebSafeGCActivityCallbackIOS.h: Added.
        * platform/ios/WebSafeIncrementalSweeperIOS.h: Added.

2013-10-18  Anders Carlsson  <andersca@apple.com>

        Remove spaces between template angle brackets
        https://bugs.webkit.org/show_bug.cgi?id=123040

        Reviewed by Andreas Kling.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::errorOccurred):
        * Modules/geolocation/GeolocationController.h:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        * Modules/indexeddb/IDBEventDispatcher.cpp:
        (WebCore::IDBEventDispatcher::dispatch):
        * Modules/indexeddb/IDBEventDispatcher.h:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::onSuccessWithPrefetch):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::dispatchEvent):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::activeRanges):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::buffered):
        * Modules/mediasource/MediaSourceBase.h:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediasource/WebKitMediaSource.cpp:
        (WebCore::WebKitMediaSource::activeRanges):
        * Modules/mediasource/WebKitMediaSource.h:
        * Modules/mediasource/WebKitSourceBufferList.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::scheduledEventTimerFired):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::scheduledEventTimerFired):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCStatsResponse.h:
        (WebCore::RTCStatsResponse::result):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::getVoices):
        * Modules/speech/SpeechSynthesis.h:
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeOutput.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::setAudioFormat):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::origins):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::origins):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::shutdown):
        * Modules/webdatabase/SQLTransactionCoordinator.h:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryDataCallback):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveBinaryData):
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processFrame):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didReceiveBinaryData):
        * Modules/websockets/WebSocketExtensionDispatcher.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerGlobalScopeDidReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::ariaLabeledByText):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityText::AccessibilityText):
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::toRefPtrNativeArray):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSMutationCallback.h:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * bindings/objc/ObjCNodeFilterCondition.h:
        * bridge/objc/objc_class.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        * bridge/runtime_root.h:
        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShapePolygon::values):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontFace):
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/CSSGroupingRule.h:
        * css/CSSImageGeneratorValue.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::adoptSelectorVector):
        * css/CSSParserValues.h:
        * css/CSSPropertySourceData.h:
        * css/CSSRuleList.h:
        (WebCore::StaticCSSRuleList::rules):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontLoaded):
        * css/CSSSegmentedFontFace.h:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):
        * css/CSSSelectorList.h:
        * css/CSSStyleSheet.h:
        * css/CSSValue.h:
        (WebCore::compareCSSValueVector):
        * css/CSSValuePool.h:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets):
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchedRuleList):
        * css/ElementRuleCollector.h:
        * css/FontLoader.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets):
        * css/InspectorCSSOMWrappers.h:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::parse):
        (WebCore::MediaList::item):
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaList.h:
        (WebCore::MediaQuerySet::queryVector):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryMatcher.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
        * css/SelectorFilter.h:
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::analyzeStyleSheet):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::styleRulesForElement):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::resolveVariables):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::loadPendingShaders):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount):
        (WebCore::StyleRuleGroup::StyleRuleGroup):
        (WebCore::StyleRuleMedia::StyleRuleMedia):
        (WebCore::StyleRuleSupports::StyleRuleSupports):
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (WebCore::StyleRule::parserAdoptSelectorVector):
        (WebCore::StyleRulePage::parserAdoptSelectorVector):
        (WebCore::StyleRuleGroup::childRules):
        (WebCore::StyleRuleMedia::create):
        (WebCore::StyleRuleSupports::create):
        (WebCore::StyleRuleRegion::create):
        (WebCore::StyleRuleHost::create):
        (WebCore::StyleRuleHost::StyleRuleHost):
        * css/StyleScopeResolver.h:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parserAppendRule):
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/StyleSheetContents.h:
        (WebCore::StyleSheetContents::childRules):
        (WebCore::StyleSheetContents::importRules):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::styleSheets):
        (WebCore::StyleSheetList::item):
        * css/StyleSheetList.h:
        * css/WebKitCSSKeyframesRule.h:
        (WebCore::StyleRuleKeyframes::keyframes):
        * dom/CheckedRadioButtons.h:
        * dom/ClientRectList.h:
        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::nextNode):
        (WebCore::ChildNodesLazySnapshot::takeSnapshot):
        * dom/CrossThreadTask.h:
        * dom/Document.cpp:
        (WebCore::Document::webkitCancelFullScreen):
        (WebCore::Document::webkitExitFullscreen):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::removeMarkers):
        * dom/DocumentMarkerController.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::injectedUserStyleSheets):
        (WebCore::DocumentStyleSheetCollection::injectedAuthorStyleSheets):
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):
        (WebCore::styleSheetsUseRemUnits):
        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        (WebCore::collectActiveCSSStyleSheetsFromSeamlessParents):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/DocumentStyleSheetCollection.h:
        * dom/Element.cpp:
        (WebCore::Element::attrNodeList):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * dom/Element.h:
        * dom/EventListenerMap.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        * dom/IdTargetObserverRegistry.h:
        * dom/MutationCallback.h:
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::takeRecords):
        (WebCore::MutationObserver::deliver):
        (WebCore::MutationObserver::deliverAllMutations):
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.h:
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::namedFlows):
        * dom/NamedFlowCollection.h:
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/NodeRareData.h:
        * dom/Range.cpp:
        (WebCore::Range::processContents):
        (WebCore::Range::processNodes):
        (WebCore::Range::processAncestorsAndTheirSiblings):
        * dom/Range.h:
        * dom/ScopedEventQueue.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptedAnimationController.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/CompositeEditCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::htmlElementEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement):
        (WebCore::htmlAttributeEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes):
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::styleFromMatchedRulesForElement):
        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):
        * editing/Editor.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::getAncestorsInsideBlock):
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove):
        * editing/SimplifyMarkupCommand.h:
        * editing/SpellChecker.h:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply):
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        * editing/mac/AlternativeTextUIController.h:
        * fileapi/FileList.h:
        * history/BackForwardList.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setRedirectURLs):
        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::setTransientProperty):
        * html/FormController.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::append):
        * html/HTMLCollection.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::checkValidity):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        * html/HTMLFormElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::platformTextTracks):
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):
        * html/MediaController.cpp:
        (MediaController::asyncEventTimerFired):
        * html/MediaController.h:
        * html/MediaFragmentURIParser.h:
        * html/ValidationMessage.h:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLTexture.h:
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        * html/parser/BackgroundHTMLParser.h:
        (WebCore::BackgroundHTMLParser::create):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLMetaCharsetParser.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::TokenPreloadScanner::scanCommon):
        * html/parser/HTMLResourcePreloader.h:
        * html/parser/XSSAuditor.h:
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureInsertionPointList):
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/ContentDistributor.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MediaControlElements.h:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/TextTrackCueList.h:
        * html/track/TextTrackList.cpp:
        (TextTrackList::invalidateTrackIndexesAfterTrack):
        (TextTrackList::remove):
        (TextTrackList::contains):
        * html/track/TextTrackList.h:
        * html/track/TrackListBase.cpp:
        (TrackListBase::asyncEventTimerFired):
        * html/track/TrackListBase.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::getNewCues):
        (WebCore::WebVTTParser::getNewRegions):
        * html/track/WebVTTParser.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::lineEndings):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/DOMPatchSupport.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::getInternalProperties):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::enable):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::UpdateRegionLayoutTask::onTimer):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::onTimer):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHistory.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorState.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::lineEndings):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings):
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorArrayBase::writeJSON):
        * inspector/InspectorValues.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll):
        (WebCore::setAllDefersLoading):
        (WebCore::DocumentLoader::getSubresources):
        * loader/DocumentLoader.h:
        * loader/FormState.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewCues):
        (WebCore::TextTrackLoader::getNewRegions):
        * loader/TextTrackLoader.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerGlobalScopeDidReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::removeResource):
        (WebCore::ApplicationCache::dump):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * loader/archive/Archive.cpp:
        (WebCore::Archive::clearAllSubframeArchives):
        (WebCore::Archive::clearAllSubframeArchivesImpl):
        * loader/archive/Archive.h:
        (WebCore::Archive::subresources):
        (WebCore::Archive::subframeArchives):
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::addAllResources):
        * loader/archive/ArchiveResourceCollection.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/archive/mhtml/MHTMLParser.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::notifyPendingLoadDecisions):
        * loader/icon/IconDatabase.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
        * page/CaptionUserPreferencesMediaAF.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didAssociateFormControls):
        * page/Console.h:
        * page/ContentSecurityPolicy.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/DeviceController.cpp:
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges):
        * page/Page.h:
        * page/PageGroup.h:
        * page/Performance.cpp:
        (WebCore::Performance::webkitGetEntriesByType):
        (WebCore::Performance::webkitGetEntriesByName):
        * page/Performance.h:
        * page/PerformanceEntryList.cpp:
        (WebCore::PerformanceEntryList::appendAll):
        * page/PerformanceEntryList.h:
        * page/SecurityOriginHash.h:
        * page/SecurityPolicy.cpp:
        * page/SpeechInputResult.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/CompositeAnimation.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::appendChild):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::children):
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::appendChild):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::syncChildPositions):
        * platform/CrossThreadCopier.cpp:
        * platform/CrossThreadCopier.h:
        * platform/DragData.h:
        * platform/MainThreadTask.h:
        * platform/PODFreeListArena.h:
        (WebCore::PODFreeListArena::freeObject):
        (WebCore::PODFreeListArena::allocate):
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::PODRedBlackTree):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::voiceList):
        * platform/PlatformSpeechSynthesizer.h:
        * platform/RunLoop.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::frameRectsChanged):
        (WebCore::ScrollView::clipRectChanged):
        (WebCore::ScrollView::setParentVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/ScrollView.h:
        * platform/SharedBuffer.h:
        * platform/Supplementable.h:
        (WebCore::Supplement::provideTo):
        (WebCore::Supplementable::provideSupplement):
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::encodeHostnames):
        * platform/audio/AudioBus.h:
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/AudioResampler.h:
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFKernel.h:
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::copyBufferAndClear):
        (WebCore::SharedBuffer::copySomeDataFromDataArray):
        * platform/graphics/FloatPolygon.cpp:
        (WebCore::FloatPolygon::FloatPolygon):
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::::locatePageSlowCase):
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/PlatformTextTrackMenu.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/WidthCache.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::processNewAndRemovedTextTracks):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        (WebCore::GraphicsLayerCA::fetchCloneLayers):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setValues):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/filters/CustomFilterParameterList.h:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::operations):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::Texture):
        (WebCore::Texture::create):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::operations):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::documentFragmentWithRTF):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        * platform/mediastream/MediaStreamDescriptor.h:
        * platform/mediastream/MediaStreamSource.h:
        * platform/mediastream/RTCConfiguration.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::parseCacheHeader):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::clientCerts):
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForNullKey):
        (WebCore::::createValueForKey):
        (WebCore::cfLocaleCache):
        * plugins/PluginMainThreadScheduler.h:
        * rendering/HitTestResult.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::RenderBlock::removeFromTrackedRendererMaps):
        * rendering/RenderBlock.h:
        * rendering/RenderButton.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator):
        * rendering/RenderGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        * rendering/RenderLayer.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::getRanges):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::setSelection):
        * rendering/RootInlineBox.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::computeShapePaddingBounds):
        (WebCore::computeShapeMarginBounds):
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::createPolygonShape):
        (WebCore::Shape::createShape):
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInterval.h:
        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::create):
        (WebCore::QuotesData::QuotesData):
        * rendering/style/QuotesData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::requireTransformOrigin):
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/StyleGridData.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/SVGResourcesCache.h:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * storage/StorageEventDispatcher.h:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::origins):
        * storage/StorageTracker.h:
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGElementAnimatedProperties::SVGElementAnimatedProperties):
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget):
        (WebCore::SVGDocumentExtensions::addElementReferencingTarget):
        (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGFontElement.h:
        * svg/SVGGlyphMap.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientTypeAnimated):
        * svg/SVGMarkerElement.h:
        * svg/SVGPathSegList.h:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::addBuiltinEffects):
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::create):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::create):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::create):
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        (WebCore::SVGAttributeToPropertyMap::animatedPropertiesForAttribute):
        * svg/properties/SVGAttributeToPropertyMap.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        (WebCore::SVGStaticListPropertyTearOff::create):
        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::create):
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
        (WebCore::SVGTransformListPropertyTearOff::consolidate):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/WorkerMessagingProxy.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::sort):
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XSLStyleSheet.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-10-18  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Cleaning warning messages from StyleResolveTree
        https://bugs.webkit.org/show_bug.cgi?id=123030

        Reviewed by Andreas Kling.

        No new tests needed.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):
        (WebCore::Style::createRendererIfNeeded):

2013-10-18  Brady Eidson  <beidson@apple.com>

        Get rid of IDBFactoryBackendLevelDB and IDBTransactionBackendLevelDB in IDBDatabaseBackendLevelDB.
        https://bugs.webkit.org/show_bug.cgi?id=123039

        Reviewed by Anders Carlsson.

        Add a few concepts to the interfaces to make this work:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        (WebCore::IDBTransactionBackendInterface::id):
        (WebCore::IDBTransactionBackendInterface::IDBTransactionBackendInterface):

        Adapt to using Interface ptr’s instead of LevelDB ptr’s:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::create):
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        (WebCore::IDBDatabaseBackendLevelDB::createObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::deleteObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::createIndex):
        (WebCore::IDBDatabaseBackendLevelDB::deleteIndex):
        (WebCore::IDBDatabaseBackendLevelDB::get):
        (WebCore::IDBDatabaseBackendLevelDB::put):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        (WebCore::IDBDatabaseBackendLevelDB::openCursor):
        (WebCore::IDBDatabaseBackendLevelDB::count):
        (WebCore::IDBDatabaseBackendLevelDB::deleteRange):
        (WebCore::IDBDatabaseBackendLevelDB::clear):
        (WebCore::IDBDatabaseBackendLevelDB::transactionStarted):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinished):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinishedAndCompleteFired):
        (WebCore::IDBDatabaseBackendLevelDB::runIntVersionChangeTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::commit):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

2013-10-18  Dean Jackson  <dino@apple.com>

        Unable to upload <img src="foo.svg"> as WebGL texture
        https://bugs.webkit.org/show_bug.cgi?id=123035

        Reviewed by Tim Horton.

        If the HTMLImageElement passed to texture2D is an SVG
        image, paint it first into a bitmap buffer and upload that.
        Note that the SVG image still needs to have an intrinsic
        or explicit size - see how the test case must set width and
        height.

        I also renamed the cache of ImageBuffers since it is
        no longer only being used for video frames.

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-svg-image.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Rename m_videoCache to m_generatedImageCache.
        (WebCore::WebGLRenderingContext::drawImageIntoBuffer): New method that creates an ImageBuffer
        of the appropriate size and renders into that.
        (WebCore::WebGLRenderingContext::texImage2D): If we see an SVG image, render it first.
        (WebCore::WebGLRenderingContext::videoFrameToImage): Renamed m_generatedImageCache.
        (WebCore::WebGLRenderingContext::texSubImage2D): If we see an SVG image, render it first.
        * html/canvas/WebGLRenderingContext.h: Renaming.

2013-10-18  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackend operations to the IDBTransactionBackend itself..
        https://bugs.webkit.org/show_bug.cgi?id=123028

        Reviewed by Alexey Proskuryakov.

        This gets rid of a big blob of LevelDB specific code from IDBDatabaseBackendLevelDB.cpp,
        bringing us much closer to having it be cross platform.

        * CMakeLists.txt:
        * GNUmakefile.list.am:

        * Modules/indexeddb/IDBTransactionBackendInterface.h: Added.
        (WebCore::IDBTransactionBackendInterface::~IDBTransactionBackendInterface):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::CursorAdvanceOperation::perform): Update for new method signature.
        (WebCore::IDBCursorBackendLevelDB::CursorIterationOperation::perform): Ditto.
        (WebCore::IDBCursorBackendLevelDB::CursorPrefetchIterationOperation::perform): Ditto.

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp: Move all operations into
          IDBTransactionBackendLevelDBOperations, then start scheduling them using the new
          IDBTransactionBackendInterface scheduling methods.
        (WebCore::IDBDatabaseBackendLevelDB::createObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::deleteObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::createIndex):
        (WebCore::IDBDatabaseBackendLevelDB::deleteIndex):
        (WebCore::IDBDatabaseBackendLevelDB::get):
        (WebCore::IDBDatabaseBackendLevelDB::put):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        (WebCore::IDBDatabaseBackendLevelDB::openCursor):
        (WebCore::IDBDatabaseBackendLevelDB::count):
        (WebCore::IDBDatabaseBackendLevelDB::deleteRange):
        (WebCore::IDBDatabaseBackendLevelDB::clear):
        (WebCore::IDBDatabaseBackendLevelDB::createTransaction):
        (WebCore::IDBDatabaseBackendLevelDB::runIntVersionChangeTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h: Move definitions of PendingOpenCall and
          PendingDeleteCall to the header.
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::create):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::callbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::databaseCallbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::version):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::transactionId):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::PendingOpenCall):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::create):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::callbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::PendingDeleteCall):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp: Add a newly required include.
        * Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp: Ditto.

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp: Implement the new interface to
          handle scheduling of operations in a cross platform manner, then rely on the new
          IDBTransactionBackendLevelDBOperations classes for the actual operations.
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCreateObjectStoreOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteObjectStoreOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleVersionChangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCreateIndexOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteIndexOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleGetOperation):
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleSetIndexesReadyOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCountOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleClearOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp: Added.
          Move all the LevelDB transaction operations from IDBDatabaseBackendLevelDB to here.
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h: Added.
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::create):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::VersionChangeAbortOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-18  Beth Dakin  <bdakin@apple.com>

        Rubber-banding is often not smooth on infinitely scrolling websites
        https://bugs.webkit.org/show_bug.cgi?id=122985

        Reviewed by Simon Fraser.

        totalContentsSize is an important part of the calculation for 
        maximumScrollPosition(). This function is called repeatedly throughout the curve 
        of a rubber-band to determine the stretch amount. To keep the rubber-band 
        animation smooth, it should be allowed to finish its animation using the old 
        totalContentsSize. This patch does that by adding a new variable, 
        m_totalContentsSizeForRubberBand. This value should almost always be equivalent to 
        m_totalContentsSize. It will only vary if m_totalContentsSize has changed in the 
        middle of a rubber-band, and in that case, it will stay equivalent to the old 
        totalContentSize value until the rubber band animation finishes.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::totalContentsSizeForRubberBand):
        (WebCore::ScrollingTreeScrollingNode::setTotalContentsSizeForRubberBand):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::stopSnapRubberbandTimer):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):

2013-10-18  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix for --no-svg option.
        m_svgStyle of RenderStyle is guarded with the ENABLE_SVG flag.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):

2013-10-17  Brady Eidson  <beidson@apple.com>

        Cleanup the Modules group in the WebCore.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=123009

        Rubberstamped by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:

2013-10-18  Denis Nomiyama  <d.nomiyama@samsung.com>

        [ATK] Fix invalid signal to set objects to an unknown state "layout-complete"
        https://bugs.webkit.org/show_bug.cgi?id=122970

        Reviewed by Mario Sanchez Prada.

        Removed an invalid signal to set objects to an unknown state
        layout-complete. This signal was originally generated to notify DRT
        and WKTR in case of page load complete.
        It was replaced by ATK:AtkDocument:load-complete, which is already sent
        by AXObjectCache::frameLoadingEventPlatformNotification().

        There is no new test since the changes are covered by existing ones
        (e.g. accessibility/loading-iframe-sends-notification.html).

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Removed an invalid
        signal to set objects to an unknown state layout-complete.

2013-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Generate API documentation for GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=121538

        Reviewed by Gustavo Noronha Silva.

        * bindings/gobject/GNUmakefile.am: Add a explicit rule for all
        .symbols file making them depend on the corresponding header file,
        since the .symbols file is generated by the bindings generator.

2013-10-18  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Simplify implementation of atk_text_get_text
        https://bugs.webkit.org/show_bug.cgi?id=122644

        Reviewed by Chris Fleizach.

        Simplified code so we only call textUnderElement() directly once
        and only when needed. Also, moved the specific code for ColorWell
        objects up to the beginning of that function, so we don't do any
        additional efforts like computing text ranges in those cases.

        No new tests are needed, just to make sure that the current layout
        and unit tests are still passing, which they are.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (textForObject): Fixed a issue that got detected while working on
        this patch, which was causing a '\n' to be artificially appended
        at the end of text controls all the time.
        (webkitAccessibleTextGetText): Simplified function.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAXStringForRange): Removed
        the check that prevents from pass ranges exceeding the limits of
        the element's text, since those will be checked anyway when
        calling String::substring().

2013-10-18  Brendan Long  <b.long@cablelabs.com>

        [GStreamer][GTK] Add GRefPtr::outPtr()
        https://bugs.webkit.org/show_bug.cgi?id=122996

        Reviewed by Philippe Normand.

        No new tests because this is just simplifying existing code.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Add GRefPtr specialization for GstToc.
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Same.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Use GRefPtr::outPtr() to simplify code.
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        (WebCore::GStreamerGWorld::removePlatformVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Same.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        (WebCore::MediaPlayerPrivateGStreamer::newTextSample):
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: Same.
        (WebCore::MediaPlayerPrivateGStreamerBase::currentVideoSinkCaps):
        * platform/network/soup/ResourceHandleSoup.cpp: Same.
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-10-17  Alexey Proskuryakov  <ap@apple.com>

        Don't add an include for return type of a [Custom] function in generated bindings code
        https://bugs.webkit.org/show_bug.cgi?id=122972

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm: (GenerateImplementation): Don't.

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLSpace always has a MathMLTextElement.
        <https://webkit.org/b/122992>

        The renderer is never anonymous and always has a corresponding
        MathMLTextElement. Overload element() with a tighter return type.

        Also marked the class FINAL and made most methods private.

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::RenderMathMLSpace):
        (WebCore::RenderMathMLSpace::updateFromElement):
        * rendering/mathml/RenderMathMLSpace.h:

2013-10-17  Tim Horton  <timothy_horton@apple.com>

        PlatformCALayer constructor should take layer type as an argument
        https://bugs.webkit.org/show_bug.cgi?id=122915

        Reviewed by Anders Carlsson.

        No new tests, just restoring old code.

        Un-do part of the patch for bug 122915; we can't early-return
        in the constructor, there's still more work to do.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):

2013-10-17  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: [CSS Regions] Crash when highlighting a node of a flow with no regions
        https://bugs.webkit.org/show_bug.cgi?id=122993

        Reviewed by Joseph Pecoraro.

        Test: inspector-protocol/dom/highlight-flow-with-no-region.html

        Even if a named flow has no regions the content of the flow will still have renderer objects created.
        Removed the assumption that all renderers inside a RenderFlowThread will always have an enclosing RenderRegion.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRendererFragments):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLOperator always has a MathMLElement.
        <https://webkit.org/b/122988>

        Reviewed by Antti Koivisto.

        The renderer is never anonymous and always has a corresponding
        MathMLElement. Overload element() with a tighter return type.

        Also marked the class FINAL and made most methods private.

2013-10-17  Nico Weber  <thakis@chromium.org>

        Fix three bugs in the equals() implementations for css gradients.
        https://bugs.webkit.org/show_bug.cgi?id=122987

        Reviewed by Andreas Kling.

        1. Linear gradients were considered equal if the first gradient has no x and y
           position and the second has no x but does have y.
        2. Same as 1, for radial gradients. (This doesn't happen in practice as
           CSSParser::parseRadialGradient rejects such input, so no test for this case.)
        3. Radial gradients without x and y position weren't considered equal even if
           they were.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::equals):
        (WebCore::CSSRadialGradientValue::equals):

2013-10-17  Antoine Quint  <graouts@apple.com>

        Web Inspector: allow front-end to trigger the system beep sound to signal an error
        https://bugs.webkit.org/show_bug.cgi?id=122955

        Reviewed by Timothy Hatcher.

        New beep() method exposed on InspectorFrontendHost calling into WebCore's systemBeep().

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::beep):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2013-10-17  Anders Carlsson  <andersca@apple.com>

        Remove PlatformCAAnimation::supportsValueFunction()
        https://bugs.webkit.org/show_bug.cgi?id=122990

        Reviewed by Tim Horton.

        PlatformCAAnimation::supportsValueFunction always returns true now, so there's no need for it to exist anymore.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLFenced always has a MathMLInlineContainerElement.
        <https://webkit.org/b/122986>

        This renderer is never anonymous and always has a corresponding
        MathMLInlineContainerElement. Overload element() with a tighter
        return type.

        Also marked the class FINAL and made most methods private.

        Reviewed by Anders Carlsson.

2013-10-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Comment AffineTransform::xScale() and yScale() to make their meanings clearer
        https://bugs.webkit.org/show_bug.cgi?id=122981

        Reviewed by Simon Fraser.

        * platform/graphics/transforms/AffineTransform.h:

2013-10-17  Vivek Galatage  <vivek.vg@samsung.com>

        Remove unnecessary check for RenderLayer and rename ensureLayer to createLayer in RenderLayerModelObject.
        https://bugs.webkit.org/show_bug.cgi?id=122928

        Reviewed by Darin Adler.

        No new tests due to code refactoring.

        RenderLayerModelObject::styleDidChange invokes the ensureLayer() only in case of !layer().
        Again checking for layer existence would be deemed redundant in ensureLayer.
        Replacing it with an ASSERT(!m_layer) and also renaming it to createLayer.

        Blink review URL: https://codereview.chromium.org/27246003/

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::createLayer):
        (WebCore::RenderLayerModelObject::styleDidChange):
        * rendering/RenderLayerModelObject.h:

2013-10-17  Tim Horton  <timothy_horton@apple.com>

        Remove PlatformCALayerMac workaround for <rdar://problem/7390716>
        https://bugs.webkit.org/show_bug.cgi?id=122983

        Reviewed by Simon Fraser.

        Remove a workaround for a bug fixed in Lion.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setSublayers):
        (PlatformCALayerMac::removeAllSublayers):
        (PlatformCALayerMac::adoptSublayers):

2013-10-17  Robert Hogan  <robert@webkit.org>

        "border-collapse: collapse;" for table removes part of its border (was: Border disappears when close to some elements)
        https://bugs.webkit.org/show_bug.cgi?id=8914

        Reviewed by David Hyatt.

        The table section's side of a collapsed border won't get painted if there are no cells there to paint it. So instead
        of relying solely on cells to paint the collapsed border paint the appropriate section of the border if there's no
        cell to take care of it.

        Tests: fast/table/paint-section-borders-without-cells-rtl.html
               fast/table/paint-section-borders-without-cells-vertical-lr-rtl.html
               fast/table/paint-section-borders-without-cells-vertical-lr.html
               fast/table/paint-section-borders-without-cells-vertical-rl.html
               fast/table/paint-section-borders-without-cells.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintRowGroupBorder):
        (WebCore::RenderTableSection::offsetLeftForRowGroupBorder):
        (WebCore::RenderTableSection::offsetTopForRowGroupBorder):
        (WebCore::RenderTableSection::verticalRowGroupBorderHeight):
        (WebCore::RenderTableSection::horizontalRowGroupBorderWidth):
        (WebCore::RenderTableSection::paintRowGroupBorderIfRequired):
        (WebCore::physicalBorderForDirection):
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderTableSection.h:

2013-10-17  Andreas Kling  <akling@apple.com>

        StyleRuleFoo::mutableProperties() should return a reference.
        <https://webkit.org/b/122962>

        The mutableProperties() functions always return objects, so make
        them return MutableStylePropertySet&.

        Also tweaked the StyleRuleCSSStyleDeclaration constructor to take
        references to both the properties and the owner rule since both
        are required.

        Reviewed by Antti Koivisto.

2013-10-17  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Improve the performance of image valued shapes with large shape-margins
        https://bugs.webkit.org/show_bug.cgi?id=122613

        Reviewed by Andreas Kling.

        The cost of computing the shape-margin boundary of an image-valued shape-outside
        is now proportional to (2 * shape-margin + image.height) rather than
        (2 * shape-margin * image.height). The performance improvement comes from skipping
        sequences of rounded-rectangle intervals that will not contribute to the final
        result. Each non-empty row in the original image contributes one rounded-rectangle
        whose corner radius is shape-margin, height is 2 * shape-margin, and width is
        2 * shape-margin plus the width of the limits of the intervals on the row.

        Renamed private method RasterShape::getIntervals() to intervalsAt() to be a little
        more consistent with WebKit naming conventions.

        There are no new tests since is just an internal refactoring.

        * rendering/shapes/RasterShape.cpp:
        (WebCore::MarginIntervalGenerator::set): Changed the x1,x2 parameters to an IntShapeInterval.
        (WebCore::RasterShapeIntervals::contains): Refactor for the getIntervals() => intervalsAt() rename.
        (WebCore::RasterShapeIntervals::getIntervalX1Values): Ditto.
        (WebCore::RasterShapeIntervals::getIncludedIntervals): Ditto.
        (WebCore::RasterShapeIntervals::getExcludedIntervals): Ditto.
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals): Performance tuning.
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::intervalsAt): Renamed getIntervals().
        (WebCore::RasterShapeIntervals::limitIntervalAt): Return the min/max limits of the intervals at Y.
        * rendering/shapes/ShapeInterval.h:
        (WebCore::ShapeInterval::isEmpty): Added.

2013-10-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Add URLMediaStream in the build
        https://bugs.webkit.org/show_bug.cgi?id=122833

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Add mediastream/gstreamer in include directories list.
        * GNUmakefile.list.am: Add DOMURLMediaStream files in the build.

2013-10-17  Andreas Kling  <akling@apple.com>

        Use PassRef for constructing StylePropertySets.
        <https://webkit.org/b/122948>

        Make functions that construct StylePropertySets return PassRef
        instead of PassRefPtr. Since they never return null, this gets rid
        of the extra branch in ~PassRefPtr everywhere.

        Also StyleRule* classes now hold a Ref<StylePropertySet>, codifying
        the fact that they always have a property set.

        Reviewed by Antti Koivisto.

2013-10-17  Andreas Kling  <akling@apple.com>

        DataRef<T> should use Ref<T> internally.
        <https://webkit.org/b/122953>

        DataRef is used to hold RenderStyle substructures, and due to the
        way style inheritance is implemented, DataRef will always point to
        a live object.

        Codify this by making DataRef::m_data a Ref, and making all methods
        that create substructure objects return PassRef.

        Reviewed by Antti Koivisto.

2013-10-17  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Anonymous nested regions
        https://bugs.webkit.org/show_bug.cgi?id=119135

        Reviewed by David Hyatt.

        Tests: fast/regions/table-caption-as-region.html
               fast/regions/table-cell-as-region.html

        This patch allows any non-replaced block to behave like a region. When an element is styled with the
        -webkit-flow-from property, instead of making the renderer a RenderRegion, we let the original
        renderer be created the same way and we add a region as an anonymous child for the renderer.
        The anonymous block child, modeled by the new RenderNamedFlowFragment class, will be responsible
        for the fragmentation of the named flow thread content.

        A RenderBlockFlow object will keep a reference to a RenderNamedFlowFragment(RenderRegion) inside its
        rare data structures.

        Contains code contributed by Catalin Badea.
 
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp: Changed to take the anonymous region into account.
        (WebCore::Element::renderRegion):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * dom/WebKitNamedFlow.cpp: Ditto.
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        * inspector/InspectorOverlay.cpp: Take into account the new model for regions, with an anonymous region inside a block.
        (WebCore::buildObjectForRegionHighlight):
        (WebCore::buildObjectForElementInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeShapeSize): For a render named flow fragment, there is no need to recompute the shape inside
        we can take it from the parent.
        (WebCore::RenderBlock::renderName): Make the block that contains a render named flow fragment (region) report RenderRegion.
        A future patch that will change this will need to rebase a lot of tests.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertedIntoTree): Create the anonymous region if needed (change of -webkit-flow-from determines Node reattach).
        (WebCore::RenderBlockFlow::willBeDestroyed): Clean-up the anonymous region if necessary.
        (WebCore::RenderBlockFlow::clearFloats): Small style change to make sure that check-webkit-style reports 0 failures on RenderBlockFlow.cpp.
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::styleDidChange): Update the style of the anonymous region too.
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded): Helper function to create the anonymous region
        and to add it as a child to the block.
        (WebCore::RenderBlockFlow::canHaveChildren):
        (WebCore::RenderBlockFlow::canHaveGeneratedChildren):
        (WebCore::RenderBlockFlow::namedFlowFragmentNeedsUpdate): Force a layout of the anonymous region if the
        parent block has percentage height (similar to RenderBlock::updateBlockChildDirtyBitsBeforeLayout)
        (WebCore::RenderBlockFlow::updateLogicalHeight): Update the logical height of anonymous region when the height of parent is updated.
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::renderNamedFlowFragment):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor): Remove the direct creation of RenderRegion objects since they will be
        created as anonymous children of block flow objects.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement): Account for anonymous region if necessary.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent): Take anonymous region into account
        and use the anonymous region parent offset/border.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly): Check for style instead of isRenderRegion since
        the parent of the anonymous region will get the layer.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertedIntoTree): Call RenderBlockFlow method instead.
        * rendering/RenderNamedFlowFragment.cpp: Added. Model the behaviour of the anonymous region.
        Has RenderRegion as a base class.
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::~RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::setStyleForNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::shouldHaveAutoLogicalHeight):
        (WebCore::RenderNamedFlowFragment::maxPageLogicalHeight):
        * rendering/RenderNamedFlowFragment.h: Added.
        (WebCore::RenderNamedFlowFragment::isPseudoElementRegion):
        (WebCore::RenderNamedFlowFragment::renderName):
        (WebCore::toRenderNamedFlowFragment):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isRenderNamedFlowFragmentContainer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderNamedFlowFragment):
        * rendering/RenderRegion.h:
        * rendering/RenderTableCaption.cpp: Call RenderBlockFlow method instead.
        (WebCore::RenderTableCaption::insertedIntoTree):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeRenderRegionList):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::shapeSize):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):

2013-10-17  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Properly expose tables in accessibility
        https://bugs.webkit.org/show_bug.cgi?id=122894

        Reviewed by Chris Fleizach.

        All tables should exposed as tables.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::computeAccessibilityIsIgnored):

2013-10-17  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Too many arguments for format in WebKitWebAudioSourceGStreamer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=122932

        Reviewed by Philippe Normand.

        No new tests because this just fixes a build warning.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop): Add another %s for the second part of the pad name.

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Attempt to fix the Windows build after http://trac.webkit.org/changeset/157547.

        The relevant conversion doesn't happen implicitly.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Attempt to fix the Windows build after http://trac.webkit.org/changeset/157547.

        Apparently some Windows code uses setFrame and I missed it.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Complete support for simple layer properties
        https://bugs.webkit.org/show_bug.cgi?id=122933

        Reviewed by Anders Carlsson.

        No new tests, not yet testable.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        Don't dump the CALayer pointer if we own a PlatformCALayerRemote.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        Fix the visible tile wash (my fault!), and make it use setPosition and
        setBounds instead of setFrame; while more convenient, it is the only
        caller of setFrame, so we'll remove it.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::isRemote): Added.

        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (nullActionsDictionary):
        (toCAFilterType):
        (PlatformCALayerMac::synchronouslyDisplayTilesInRect):
        (PlatformCALayerMac::playerLayer):
        Remove setFrame, fix some pointer sides.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Remove setFrame.

2013-10-16  Andreas Kling  <akling@apple.com>

        Take RenderObjects out of the arena.
        <https://webkit.org/b/122895>

        Reviewed by Antti Koivisto.

        Stop arena-allocating renderers so we can move forward on improving
        render tree memory management. This will also allow rendering code
        to take advantage of malloc optimizations.

        Line boxes and BiDi runs remain in the arena for now.

2013-10-16  Roger Fong  <roger_fong@apple.com>

        [Windows] Speculative fix for test, media/video-canvas-drawing-output.html.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createImageForTimeInRect):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        PlatformCALayer constructor should take layer type as an argument
        https://bugs.webkit.org/show_bug.cgi?id=122915

        Reviewed by Simon Fraser.

        No new tests, just a minor refactoring.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::PlatformCALayer):
        Add a LayerType argument.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        Use the new LayerType argument, and early-return in the case where we
        are wrapping a custom PlatformLayer.
        Drive-by un-indent the switch in the Mac version.

2013-10-15  Brady Eidson  <beidson@apple.com>

        Flesh out the DatabaseProcess (and launch it!)
        https://bugs.webkit.org/show_bug.cgi?id=122884

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings: Add a localizable string.
        * WebCore.xcodeproj/project.pbxproj: Export some more headers.

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        RemoteLayerTree: Add support for more layer properties and transform layers
        https://bugs.webkit.org/show_bug.cgi?id=122906

        Reviewed by Anders Carlsson.

        No new tests, this code is not yet testable.

        * WebCore.exp.in:
        Export some TextStream and TransformationMatrix stuff.

2013-10-16  KyungTae Kim  <ktf.kim@samsung.com>

        During editing, merge inline style with overriding other author styles
        https://bugs.webkit.org/show_bug.cgi?id=122874

        Reviewed by Ryosuke Niwa.

        Inline styles need to override other author styles even on DoNotOverrideValues mode.
        So, merge and override inline styles to other author styles before merging them to m_mutableStyle.

        Test: editing/deleting/merge-div-with-inline-style.html

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

2013-10-16  peavo@outlook.com  <peavo@outlook.com>

        Emphasis marks has wrong color.
        https://bugs.webkit.org/show_bug.cgi?id=122829

        Reviewed by Antti Koivisto.

        Tests: fast/text/text-emphasis.html.
               fast/text/text-emphasis-expected.html.

        Emphasis color should be set as fill color, not stroke color.

        * rendering/TextPaintStyle.cpp:
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:

2013-10-16  Antti Koivisto  <antti@apple.com>

        Move code for finding rendered character offset to RenderTextLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=122892

        Reviewed by Andreas Kling.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::countRenderedCharacterOffsets):
        (WebCore::RenderText::containsRenderedCharacterOffset):
        
            Renamed for consistency.

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::countCharacterOffsets):
        
            This used to be Position::renderedPosition.

2013-10-16  Andreas Kling  <akling@apple.com>

        RenderElement::removeChild() should take child as a reference.
        <https://webkit.org/b/122888>

        We can't remove a child without a child to remove.

        Reviewed by Antti Koivisto.

2013-10-16  Antti Koivisto  <antti@apple.com>

        Move test for contained caret offset to RenderTextLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=122887

        Reviewed by Andreas Kling.

        * dom/Position.cpp:
        (WebCore::Position::renderedOffset):
        (WebCore::Position::isCandidate):
        
            Remove isRenderedText, call RenderText::containsCaretOffset instead.

        (WebCore::Position::isRenderedCharacter):
        (WebCore::Position::rendersInDifferentPosition):
        * dom/Position.h:
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::containsCharacterOffset):
        (WebCore::RenderText::containsCaretOffset):
        * rendering/RenderText.h:
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::containsOffset):
        
            Combined implementations of Position::isRenderedCharacter and Position::isRenderedText.

        * rendering/RenderTextLineBoxes.h:
        
            Remove containsCaretOffset(), functionality is now in RenderTextLineBoxes::containsOffset.

2013-10-16  Andreas Kling  <akling@apple.com>

        RenderElement::isChildAllowed() should take const references.
        <https://webkit.org/b/122870>

        Reviewed by Anders Carlsson.

        The isChildAllowed() functions expect non-null values to be passed,
        so enforce this at compile-time.

        Reordered some checks to do bit tests before virtual calls.

2013-10-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] video info unset if upstream doesn't query allocation
        https://bugs.webkit.org/show_bug.cgi?id=122834

        Reviewed by Gustavo Noronha Silva.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender): If the sink didn't process any allocation
        query then use the configured source pad caps and don't rely on
        invalid video info.

2013-10-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] move Logging.h include to GStreamerUtilities.h
        https://bugs.webkit.org/show_bug.cgi?id=122886

        Reviewed by Gustavo Noronha Silva.

        Include Logging.h from GStreamerUtilities.h so the modules using
        the LOG_MEDIA macros don't need to bother, especially for Debug builds.

        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

2013-10-16  Mark Rowe  <mrowe@apple.com>

        Fix the build after r157478.

        Rubber-stamped by Tim Horton.

        Due to the way WebCore.exp.in is used, it can't be used to export a differing set of symbols
        for different architectures. We often work around this by tweaking code slightly to avoid
        needing to export different symbols. However, in this case the symbol name itself encodes an
        architecture-specific detail and there's no clear way to avoid the requirement to export it.

        To deal with this case we turn to ld's support for wildcards in the symbol export list.

        * WebCore.exp.in: Use wildcards in place of the number that represents by how much "this"
        should be adjusted when calling through the vtable thunk. Also sort the remainder of the file.
        * make-export-file-generator: Don't attempt to verify symbol names that contain wildcard characters.

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Two more exports for 32-bit build fix.
        The duality of CGFloat means that we use a different
        version of getRGBA (and the cast operator)
        on 32-bit systems.

        * WebCore.exp.in:

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Another shot at a build fix; apparently these
        do need exporting for some reason, but are different
        on 32-bit.

        * WebCore.exp.in:

2013-10-15  Alexey Proskuryakov  <ap@apple.com>

        GenerateIsReachable=ImplContext is confusing
        https://bugs.webkit.org/show_bug.cgi?id=122864

        Reviewed by Geoffrey Garen.

        Renamed to ImplWebGLRenderingContext.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/EXTTextureFilterAnisotropic.idl:
        * html/canvas/OESElementIndexUint.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESTextureHalfFloat.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLCompressedTextureATC.idl:
        * html/canvas/WebGLCompressedTexturePVRTC.idl:
        * html/canvas/WebGLCompressedTextureS3TC.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLDepthTexture.idl:
        * html/canvas/WebGLLoseContext.idl:

        * WebCore.xcodeproj/project.pbxproj: While at it, added OESElementIndexUint.idl
        to Xcode project.

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix; I don't know how to export.
        This may not help.

        * WebCore.exp.in:

2013-10-15  Dean Jackson  <dino@apple.com>

        Add ENABLE_WEB_ANIMATIONS flag
        https://bugs.webkit.org/show_bug.cgi?id=122871

        Reviewed by Tim Horton.

        Eventually might be http://dev.w3.org/fxtf/web-animations/
        but this is just engine-internal work at the moment.

        * Configurations/FeatureDefines.xcconfig:

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Add a PlatformCALayer subclass that proxies its property changes across the process boundary
        https://bugs.webkit.org/show_bug.cgi?id=122773

        Reviewed by Anders Carlsson.

        No new tests, the new drawing area is not yet testable.

        * WebCore.exp.in:
        Export lots of GraphicsLayerCA stuff so we can inherit from it in WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        Make PlatformCAFilters.h a private header.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::initialize):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::initialize):
        * platform/graphics/ca/GraphicsLayerCA.h:
        Defer creation of the main PlatformCALayer until just after the constructor is finished
        so that GraphicsLayerCA subclasses can successfully override createPlatformCALayer.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::platformLayer):
        Make platformLayer virtual so that subclasses which don't have PlatformLayers can override.

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: Crash in XMLDocumentParser::startElementNs
        https://bugs.webkit.org/show_bug.cgi?id=122817

        Reviewed by Darin Adler.

        Exit early in startElementNs when listeners and handlers of synchronous events such as load event
        removes the inserted node inside parserAppendChild.

        Test: fast/parser/xhtml-synchronous-detach-crash.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2013-10-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove old frontend localizedStrings.js
        https://bugs.webkit.org/show_bug.cgi?id=122846

        Reviewed by Timothy Hatcher.

        * Configurations/WebCore.xcconfig:
        * English.lproj/localizedStrings.js: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        Remove the file and references to it. We no longer need to exclude
        localizedString.js from some builds.

2013-10-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Windows old front-end related code
        https://bugs.webkit.org/show_bug.cgi?id=122845

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd:

2013-10-15  Morten Stenshorne  <mstensho@opera.com>

        Add support for the column-fill property
        https://bugs.webkit.org/show_bug.cgi?id=117693

        Reviewed by David Hyatt.

        This is only supported in the (new) region based multicol implementation.

        With column-fill support, a lot of multicol tests needed an update.
        The old implementation behaved as if column-fill were 'auto', but the
        initial value is 'balance', so now we need to be explicit about that.
        For auto-height tests it doesn't really matter - such multicols are always
        balanced anyway.

        Tests: fast/multicol/newmulticol/fixed-height-fill-auto.html
               fast/multicol/newmulticol/fixed-height-fill-balance.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColumnFill):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * rendering/RenderMultiColumnBlock.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        * rendering/style/StyleMultiColData.h:

2013-10-15  Andreas Kling  <akling@apple.com>

        Skip unnecessary null check in RenderText::textLength().
        <https://webkit.org/b/122841>

        Reviewed by Antti Koivisto.

        RenderText will never have a null String in m_text, so textLength()
        can grab at the StringImpl directly, avoiding a null check.

2013-10-15  Andreas Kling  <akling@apple.com>

        FontGenericFamilies should not be ref-counted.
        <https://webkit.org/b/122835>

        Reviewed by Anders Carlsson.

        FontGenericFamilies is singly-owned by Settings.

2013-10-15  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Move RenderBlock::layoutShapeInsideInfo into RenderBlock.cpp
        http://bugs.webkit.org/show_bug.cgi?id=122843

        Reviewed by Oliver Hunt.

        Historically, layoutShapeInsideInfo was a static function in RenderBlockLineLayout, then it has changed to be a member of RenderBlock,
        but at that time it hasn't been moved to RenderBlock.cpp. This patch moves it into RenderBlock.cpp next to the Shapes functions. I removed
        an unnecessary CSS_SHAPES #ifdef as well from RenderBlock.cpp.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markShapeInsideDescendantsForLayout):
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockLineLayout.cpp:

2013-10-15  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Build fails.
        https://bugs.webkit.org/show_bug.cgi?id=122830

        Reviewed by Brent Fulgham.

        * platform/network/NetworkStorageSessionStub.cpp:
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession): Update to new return type.

2013-10-15  Andreas Kling  <akling@apple.com>

        FileIconLoader should not be ref-counted.
        <https://webkit.org/b/122827>

        FileIconLoader is singly-owned by FileInputType.

        Reviewed by Antti Koivisto.

2013-10-15  Andreas Kling  <akling@apple.com>

        RenderText should cache RenderStyle in locals more.
        <https://webkit.org/b/122823>

        Reviewed by Antti Koivisto.

        Now that fetching the RenderStyle has to go through the parent,
        we should avoid unnecessary loads by caching style() in a local.

2013-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Remove redundant Document::getElementById
        https://bugs.webkit.org/show_bug.cgi?id=122813

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/4e8f1c5316415614b84370c602beae4a1008299f

        This function simply calls virtual TreeScope::getElementById and Document inherits from TreeScope.

        * WebCore.exp.in:
        * dom/Document.cpp:
        * dom/Document.h:

2013-10-14  Santosh Mahto  <santosh.ma@samsung.com>

        in safari,the background-color of input[type="search"] can't work
        https://bugs.webkit.org/show_bug.cgi?id=119967

        Reviewed by Ryosuke Niwa.

        When input type=search is styled with css background property then
        it does not change the background-color of field. Its happening becasue
        search field is not counted as styled control. Thus theme ignores the 
        css background property. With this patch search field is also counted as 
        styled control so background property reflects on search field.

        Test: fast/forms/search/search-field-background-color.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):Now search field is also
        a styled control.

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        EventPath::updateTouchLists traverses through EventPath thrice
        https://bugs.webkit.org/show_bug.cgi?id=122804

        Reviewed by Benjamin Poulain.

        Instead of traversing through EventPath for each TouchList, traverse through TouchList for every EventContext.
        This paves our way to have one-pass traversal over EventPath, and evetually to remove EventContext altogether.

        This change should also improve the cache hit rate since all Touch objects tend to be allocated at the same time
        but this performance improvement is probably not observable.

        * dom/EventContext.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::EventRelatedNodeResolver): Added a new constructor that takes Touch and
        and TouchListType. We need to store these two values in order to update EventContext later.
        (WebCore::EventRelatedNodeResolver::touch): Added,
        (WebCore::EventRelatedNodeResolver::touchListType): Added.
        (WebCore::addRelatedNodeResolversForTouchList): Extracted from updateTouchListsInEventPath.
        (WebCore::EventPath::updateTouchLists): Moved the loop over m_path here. Notice that the outer loop iterates
        over m_path instead of touchList as done in updateTouchListsInEventPath. The inner loop goes through resolvers
        and adds Touch objects each EventContext as needed.

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        Don't generate a wasteful isObservable check in isReachableFromOpaqueRoots
        https://bugs.webkit.org/show_bug.cgi?id=122802

        Reviewed by Mark Hahnenberg.

        * bindings/scripts/CodeGeneratorJS.pm: (GenerateImplementation): Don't.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        Updated results.

2013-10-14  Samuel White  <samuel_white@apple.com>

        AX: fieldset should have GroupRole and legend should be description.
        https://bugs.webkit.org/show_bug.cgi?id=122534

        Reviewed by Chris Fleizach.

        Changes fieldset to derive AXDescription from legend if one is available. Added
        convenience method to AccessibilityObject to fetch element if available.

        Test: accessibility/fieldset-element.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::element):
        (WebCore::AccessibilityObject::isARIAHidden):
        (WebCore::AccessibilityObject::isDOMHidden):
        (WebCore::AccessibilityObject::defaultObjectInclusion):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isHidden):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::getAttribute):
        (WebCore::AccessibilitySlider::valueForRange):
        (WebCore::AccessibilitySlider::maxValueForRange):
        (WebCore::AccessibilitySlider::minValueForRange):
        (WebCore::AccessibilitySlider::setValue):
        (WebCore::AccessibilitySlider::inputElement):
        * accessibility/AccessibilitySlider.h:
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::legend):
        * html/HTMLFieldSetElement.h:

2013-10-14  Roger Fong  <roger_fong@apple.com>

        Windows select element doesn't draw RTL properly.
        https://bugs.webkit.org/show_bug.cgi?id=122785.

        Reviewed by Brent Fulgham.

        Covered by fast/text/international/pop-up-button-text-alignment-and-direction.html.

        Problems include the popup items not drawing on the right hand side and 
        not respecting the direction or the directional override styling of the option.
        The selected element (drawn in the actual select element) also doesn't respect 
        the style settings of the selected menu option.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):

2013-10-14  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix.

        * WebCore.vcxproj/WebCoreCommon.props:

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>::createBidiRunsForLine
        https://bugs.webkit.org/show_bug.cgi?id=122776

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/aca89bc4d984705a1f94b623dae0ab03e239a248

        Fix modification of whitespace endpoints to not assume it's operating on RenderTexts

        During line layout, we use midpoints to identify RenderObjects, or parts of
        RenderObjects, that don't need InlineBoxes, usually because of collapsed whitespace.

        Prior to actually creating BidiRuns (the precursor to InlineBoxes), we use
        checkMidpoints to fix up our lineMidpointState to handle the case where we start
        ignoring spaces in our line, but don't stop until somewhere on the following line.
        Previously, this function assumed that the final midpoint (called an endpoint)
        was a RenderText, but this assumption is wrong if we have a beginning midpoint
        created by shouldSkipWhitespaceAfterStartObject (which handles inlines and list
        markers) and no endpoint on that line. In that case, we'd instead adjust the
        position backwards on the beginning midpoint, which would cause us to fail to
        create an InlineBox for the inline or list marker. In the new test added, this
        would actually trigger a crash due to an assumption when visually re-ordering
        BidiRuns that a non-empty line would actually contain at least one such run.

        Test: fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::checkMidpoints):

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure in Range::processContentsBetweenOffsets
        https://bugs.webkit.org/show_bug.cgi?id=122777

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/c15de182774c7859c20d97126eb844ae97b792a4

        This patch changes ASSERT statements for checking |endOffset| inbound in Range::processContentsBetweenOffsets()
        to limit |endOffset|. This is necessary when DOMNodeRemovedFromDocument event handler splits text nodes,
        Range::insertNode() on text node, in the range calling Range::deleteContents().

        Test: fast/dom/Range/range-delete-contents-mutation-event-crash.html

        * dom/Range.cpp:
        (WebCore::Range::processContentsBetweenOffsets):

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        Add an empty window.crypto.webkitSubtle
        https://bugs.webkit.org/show_bug.cgi?id=122778

        Reviewed by Mark Hahnenberg.

        Tests: security/crypto-subtle-gc-2.html
               security/crypto-subtle-gc-3.html
               security/crypto-subtle-gc.html

        * DerivedSources.make: Process SubtleCrypto.idl.

        * crypto: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

        * bindings/js/JSSubtleCryptoCustom.cpp: Added. Empty for now, but we'll certainly
        need custom bindings code here.

        * crypto/SubtleCrypto.cpp: Added.
        (WebCore::SubtleCrypto::SubtleCrypto):
        (WebCore::SubtleCrypto::document):
        * crypto/SubtleCrypto.h: Added.        
        * crypto/SubtleCrypto.idl: Added.
        * page/Crypto.cpp:
        (WebCore::Crypto::subtle):
        * page/Crypto.h:
        * page/Crypto.idl:

2013-10-14  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove GestureEvent leftovers from WebCore
        <https://webkit.org/b/122780>

        Reviewed by Anders Carlsson.

        - Removed some remaining references to PlatformGestureEvent, supposed to
          be removed by r157316
        - TOUCH_ADJUSTMENT should be reworked after GestureEvent feature
          removal

        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/EventHandler.h:
        * platform/PlatformEvent.h:
        * platform/ScrollAnimatorNone.cpp:
        * platform/ScrollableArea.h:

2013-10-14  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Build fix after r157366
        http://bugs.webkit.org/show_bug.cgi?id=122783

        When TOUCH_AJUSTMENT is enabled build fails due to some
        refactors in TextRender functions.

        Reviewed by Anders Carlsson.

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::appendContextSubtargetsForNode):

2013-10-14  Alexandru Chiculita  <achicu@adobe.com>

        The content of the DOM panel for iframes is not updated until the "onload" event
        https://bugs.webkit.org/show_bug.cgi?id=122653

        Reviewed by Darin Adler.

        Test: http/tests/inspector-protocol/loading-iframe-document-node.html

        Renamed InspectorDOMAgent::loadEventFired to InspectorDOMAgent::didCommitLoad and moved the call site
        from InspectorInstrumentation::loadEventFiredImpl to InspectorInstrumentation::didCommitLoadImpl.
        This is to make sure that it will invalidate the content of the iframe as soon as the frame navigates
        to a different page. This way the new node can be retrieved as soon as the page has some content, and
        not just when the page is fully loaded.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCommitLoad): Renamed from loadEventFired, as it is now called from
        didCommitLoadImpl instead.
        (WebCore::InspectorDOMAgent::frameDocumentUpdated): Updated comment to point to the new function name.
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::loadEventFiredImpl): Removed call do InspectorDOMAgent.loadEventFired.
        (WebCore::InspectorInstrumentation::didCommitLoadImpl): Added call to InspectorDOMAgent.didCommitLoad.

2013-10-14  Roger Fong  <roger_fong@apple.com>

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

        Reviewed by Brent Fulgham.

        Add a field to keep track of hovered over index.
        Use index to determine whether or not to use the existing selected index on the mouse down event.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWin):
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h:

2013-10-14  Tim Horton  <timothy_horton@apple.com>

        Virtualize PlatformCALayer
        https://bugs.webkit.org/show_bug.cgi?id=122672

        Reviewed by Anders Carlsson.

        No new tests, just a refactoring.

        * WebCore.exp.in:
        setGeometryFlipped is on PlatformCALayerMac now.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Add PlatformCALayer.cpp, PlatformCALayerWin.h, and let VS do its
        thing with some other files.

        * WebCore.xcodeproj/project.pbxproj:
        Add PlatformCALayer.cpp and PlatformCALayerMac.h.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::platformLayer):
        Make a PlatformCALayerWin explicitly.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCALayer):
        Added. Decide whether to make a PlatformCALayer{Mac, Win} based on the platform.
        Later, we will decide between other subclasses based on other things.

        (WebCore::GraphicsLayerCA::filtersCanBeComposited):
        Do the same thing for filtersCanBeComposited.

        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::setContentsToMedia):
        (WebCore::GraphicsLayerCA::setContentsToCanvas):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        Use createPlatformCALayer instead of PlatformCALayer::create.

        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        For now, use the PlatformCALayerMac version of filtersCanBeComposited,
        since this code is heavily tied to having CALayers in the Web process.

        * platform/graphics/ca/GraphicsLayerCA.h:
        Include PlatformCALayer.h here so we can get the LayerType enum.
        (NOTE-to-be-removed: if there's a better way to do this, I'm open to
        suggestions; I couldn't puzzle out nested 'enum class' stuff).

        Add the createPlatformCALayers.

        * platform/graphics/ca/PlatformCAAnimation.h:
        Friend the subclasses too.

        * platform/graphics/ca/PlatformCALayer.cpp: Added.
        (WebCore::PlatformCALayer::~PlatformCALayer):
        Pull the shared part of the PlatformCALayer destructor out.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::platformLayer):
        (WebCore::PlatformCALayer::setOwner):
        (WebCore::PlatformCALayer::PlatformCALayer):
        Virtualize all the things. Move platform specific members to their new subclasses.

        * platform/graphics/ca/mac/PlatformCALayerMac.h: Added.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        Move the PLATFORM(MAC) implementations from PlatformCALayer to PlatformCALayerMac.

        (PlatformCALayer::platformCALayer):
        The platformCALayer lookup function is static on PlatformCALayer, so it can't
        be moved to the subclasses. It might be a good idea in the future to move towards
        a platform-independent mechanism for looking up PlatformCALayers from PlatformLayers,
        and to avoid needing to do this as often as we do now.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::CACFLayerTreeHost):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        Move the PLATFORM(WIN) implementations from PlatformCALayer to PlatformCALayerWin.

        (PlatformCALayerWin::create):
        (PlatformCALayer::platformCALayer):

        * platform/graphics/ca/win/PlatformCALayerWin.h: Added.

        * platform/graphics/win/GraphicsContext3DWin.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
        Include PlatformCALayerWin.h and explicitly make PlatformCALayerWins here.

2013-10-14  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [cmake] MediaControlsApple is used only by Efl port and is on CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=122772

        Reviewed by Anders Carlsson.

        * CMakeLists.txt: Removed MediaControlsApple.cpp
        * PlatformEfl.cmake: Added MediaControlsApple.cpp

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        window.crypto doesn't preserve custom properties
        https://bugs.webkit.org/show_bug.cgi?id=122770

        Reviewed by Mark Hahnenberg.

        Test: security/crypto-gc.html

        Generate isReachableFromOpaqueRoots that makes Crypto live as long as the document
        lives (because that's when it's observable through window object).

        * page/Crypto.cpp:
        (WebCore::Crypto::Crypto):
        (WebCore::Crypto::~Crypto):
        (WebCore::Crypto::document):
        * page/Crypto.h:
        (WebCore::Crypto::create):
        Made Crypto a ContextDestructionObserver, so that it can report its document to bindings.
        Removed ScriptWrappable, because it seems to have served no purpose in this class.

        * page/Crypto.idl: Added GenerateIsReachable. Removed ImplementationLacksVTable,
        because the class now has a vtable, and can be checked for bindings integrity.

        * page/DOMWindow.cpp: (WebCore::DOMWindow::crypto): Pass a document when creating
        crypto.

2013-10-14  Andreas Kling  <akling@apple.com>

        CTTE: NamedNodeMap always has a corresponding Element.
        <https://webkit.org/b/122769>

        Reviewed by Anders Carlsson.

        Made NamedNodeMap::m_element a reference and remove an assertion
        that it's never null.

2013-10-14  Andreas Kling  <akling@apple.com>

        REGRESSION(r157408): Crashes in RenderFullScreen::wrapRenderer().

        Unreviewed crash fix for these two tests:

        - fullscreen/full-screen-restrictions.html
        - fullscreen/empty-anonymous-block-continuation-crash.html

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::wrapRenderer):

            Get the RenderArena from Document like we did before this patch.

2013-10-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape-outside shapes should update the layout after the image has been loaded
        https://bugs.webkit.org/show_bug.cgi?id=122340

        Reviewed by Simon Fraser.

        Ensure that the an image-valued shape-outside layout is updated after the image has
        been loaded.

        Test: http/tests/css/css-image-valued-shape.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::imageChanged): Added code for the shape-outside case.
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange): Ditto.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement): Ditto.
        (WebCore::RenderElement::setStyle): Ditto.

2013-10-14  Andreas Kling  <akling@apple.com>

        Remove some silly null checks in Element/NamedNodeMap.
        <https://webkit.org/b/122767>

        Reviewed by Darin Adler.

        Make shouldIgnoreAttributeCase() take a const Element&, exposing
        some unnecessary null checks.

2013-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r122737.

        * dom/Node.h: Add explicit WebCore namespace to macro definition to work around
        Visual Studio bug.

2013-10-14  Andreas Kling  <akling@apple.com>

        Pass Document directly to anonymous renderer constructors.
        <https://webkit.org/b/122752>

        Reviewed by Antti Koivisto.

        Added separate constructors for creating anonymous renderers that
        take a Document& instead of a null Element*/Text*.

        Removed setDocumentForAnonymous() and all createAnonymous() helpers.
        ...and RenderObject::m_node is now a Node&, wohoo!

2013-10-13  Sam Weinig  <sam@webkit.org>

        CTTE: Add more node conversion helpers
        https://bugs.webkit.org/show_bug.cgi?id=122737

        Reviewed by Darin Adler.

        - Factor NODE_TYPE_CASTS into TYPE_CASTS_BASE(ToClassName, FromClassName)
          to allow for DOCUMENT_TYPE_CASTS.
        - Replace more static_casts<>.

2013-10-14  Zan Dobersek  <zdobersek@igalia.com>

        Reintroduce PassRefPtr<Event> copy in ScopedEventQueue::dispatchEvent
        https://bugs.webkit.org/show_bug.cgi?id=122742

        Reviewed by Alexey Proskuryakov.

        This is a follow-up to r157219 which introduced a workaround for the GCC's quirky behavior that
        was resulting in crashes due to the PassRefPtr<Event> object passed to EventDispatcher::dispatchEvent
        being copied and nullified first before retrieving the EventTarget of the Event object wrapped in that
        PassRefPtr.

        The implementation is now adjusted to first retrieve the pointer to the Event's EventTarget and store
        it in a local variable. That variable is then passed as the first parameter to EventDispatcher::dispatchEvent,
        and the PassRefPtr<Event> passed directly as the second parameter. Previously the pointer of that PassRefPtr
        object was passed in, with a new PassRefPtr being created which would increase the reference count of the
        ref-counted object. Passing in the original PassRefPtr avoids the unnecessary reference count increase by creating
        a copy. That still nullifies the original PassRefPtr, but that's not a problem anymore.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent):

2013-10-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Shape-Margin should be animatable
        https://bugs.webkit.org/show_bug.cgi?id=122524

        Reviewed by Darin Adler.

        Mark content for relayout after shape-margin changes, and add shape-margin
        to the list of animatable properties.

        Tests: fast/shapes/shape-outside-floats/shape-outside-dynamic-shape-margin.html
               fast/shapes/shape-outside-floats/shape-outside-shape-margin-animation.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Add
        shape-margin to the map of animatable CSS properties.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateShapeOutsideInfoAfterStyleChange): Compare shape-margins,
        and mark dependent content for relayout if they have changed.

2013-10-14  Arvid Nilsson  <anilsson@blackberry.com>

        Don't crash after OpenGL robustness reset
        https://bugs.webkit.org/show_bug.cgi?id=122750

        Reviewed by George Staikos.

        JIRA 517132.
        Just log the incident and pretend like nothing happened.

        No new tests, we don't have repeatable steps to reproduce a robustness
        reset.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::makeContextCurrent):

2013-10-14  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Buildfix after r157393
        https://bugs.webkit.org/show_bug.cgi?id=122749

        Reviewed by Andreas Kling.

        Buildfix with error enumeration value 'CSS_FR' not handled in switch.

        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):

2013-10-14  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Present replaced objects with 0xFFFC character
        https://bugs.webkit.org/show_bug.cgi?id=122744

        Reviewed by Mario Sanchez Prada.

        Replaced elements should be emitted in GTK/EFL and
        marked their presence with the replacement character.

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

2013-09-16  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Implement support for <flex>
        https://bugs.webkit.org/show_bug.cgi?id=115362

        Reviewed by Andreas Kling.

        From Blink r149134, r149480, r149532, r150287 and r156127 by <jchaffraix@chromium.org>
        From Blink r157820 by <svillar@igalia.com>

        Added support for flexible lengths ('fr' unit) in CSS Grid Layout
        code. This requires the addition of GridLength class to
        encapsulate the knowledge of <flex> to the grid layout code.

        Also updated the algorithm that computes the layout. It increases
        the value of 1fr based on the grid tracks' usedBreath to fraction
        ratio (called normalizedFractionValue). This enables increasing
        the fraction value while updating the available space to account
        for processed grid tracks. The algorithm stops when we run out of
        grid tracks or available space (one grid item has an intrinsic
        size too big). This matches the specs to the letter for the known
        available space case (both the unknown case and the interaction
        with 'span' are left out of this patch).

        Tests: fast/css-grid-layout/flex-and-minmax-content-resolution-columns.html
               fast/css-grid-layout/flex-and-minmax-content-resolution-rows.html
               fast/css-grid-layout/flex-content-resolution-columns.html
               fast/css-grid-layout/flex-content-resolution-rows.html

        * GNUmakefile.list.am: Added GridLength.h to the build system.
        * Target.pri: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackBreadth): Replace Length by GridLength.
        * css/CSSGrammar.y.in: Added FR support.
        * css/CSSParser.cpp: Ditto.
        (WebCore::CSSParser::parseGridBreadth):
        (WebCore::CSSParser::detectNumberToken):
        * css/CSSParserValues.cpp: Added FR support.
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        (WebCore::CSSParserString::operator[]):
        (WebCore::CSSParserString::equalIgnoringCase):
        * css/CSSPrimitiveValue.cpp: Added FR support.
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h: Added a couple of missing const.
        (WebCore::CSSPrimitiveValue::isFlex):
        * css/StyleResolver.cpp: Added FR support.
        (WebCore::createGridTrackBreadth):
        (WebCore::createGridTrackSize):
        * rendering/RenderGrid.cpp:
        (WebCore::GridTrackForNormalization::GridTrackForNormalization):
        New helper struct to ease the computation of track breadths with
        flexible lengths.
        (WebCore::GridTrackForNormalization::operator=):
        (WebCore::RenderGrid::computePreferredTrackWidth): Replaced Length by GridLength.
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): Grow grid lines
        having a fraction as the MaxTrackSizingFunction.
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength): Replaced Length by GridLength.
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength): Ditto.
        (WebCore::sortByGridNormalizedFlexValue):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth): Increase
        the fraction value while updating the available space to account
        for processed grid tracks.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::distributeSpaceToTracks): Never shrink track sizes.
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        * rendering/RenderGrid.h:
        * rendering/style/GridLength.h: Added.
        (WebCore::GridLength::GridLength):
        (WebCore::GridLength::isLength):
        (WebCore::GridLength::isFlex):
        (WebCore::GridLength::length):
        (WebCore::GridLength::flex):
        (WebCore::GridLength::setFlex):
        (WebCore::GridLength::operator==):
        * rendering/style/GridTrackSize.h: Replaced Length by GridLength.
        (WebCore::GridTrackSize::length):
        (WebCore::GridTrackSize::setLength):
        (WebCore::GridTrackSize::minTrackBreadth):
        (WebCore::GridTrackSize::maxTrackBreadth):
        (WebCore::GridTrackSize::setMinMax):
        (WebCore::GridTrackSize::hasMinOrMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMinOrMaxContentMaxTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMaxTrackBreadth):

2013-10-14  peavo@outlook.com  <peavo@outlook.com>

        Broken text rendering when input field has selection.
        https://bugs.webkit.org/show_bug.cgi?id=122716

        Reviewed by Antti Koivisto.

        Tests: fast/text/text-rendering-with-input-selection.html.
               fast/text/text-rendering-with-input-selection-expected.html.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Check that text has selection.

2013-10-14  Zalan Bujtas  <zalan@apple.com>

        Unexpected word wrapping for wrapped content then raw content.
        https://bugs.webkit.org/show_bug.cgi?id=121130

        Reviewed by Antti Koivisto.

        When deciding whether a line is considered empty, we need to check if the current
        object is fully responsible for the currently uncommitted width. It helps differentiating
        <span></span><span>abcd</span> from <span>a</span><span>bcd</span>, where in the first
        case when we hit the second <span> the line is still considered empty, as opposed to the
        second example.

        Test: fast/css/unexpected-word-wrapping-with-non-empty-spans.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineBreaker::nextSegmentBreak):

2013-10-14  Andreas Kling  <akling@apple.com>

        Be more efficient about passing RenderStyle to attachRenderTree().
        <https://webkit.org/b/122743>

        Reviewed by Antti Koivisto.

        Have attachRenderTree() and createRendererTreeIfNeeded() pass the
        RenderStyle in a PassRefPtr to avoid churning the ref count.

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] 2 span positions are not resolved correctly
        https://bugs.webkit.org/show_bug.cgi?id=119717

        Reviewed by Andreas Kling.

        From Blink r155397 by <jchaffraix@chromium.org>

        Test: fast/css-grid-layout/grid-item-bad-resolution-double-span.html

        Two opposite 'span' or 'auto' positions should be resolved using
        the auto placement algorithm. We were only checking for the 'auto'
        case. This also covers the case of other positions that, according
        to the spec, should be treated as 'auto'.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionsFromStyle):

2013-10-13  Andreas Kling  <akling@apple.com>

        Use RenderElement instead of RenderObject in more places.
        <https://webkit.org/b/122734>

        Reviewed by Antti Koivisto.

        Convert some sites to use RenderElement (or type inference) instead
        of RenderObject for less branchy code.

2013-10-13  Darin Adler  <darin@apple.com>

        Deprecate or remove deleteAllValues functions; there are only a few call sites left
        https://bugs.webkit.org/show_bug.cgi?id=122738

        Reviewed by Anders Carlsson.

        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::deleteAllCookiesAndDomains):
        * platform/network/blackberry/rss/RSSParserBase.cpp:
        (WebCore::RSSFeed::clear):
        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::~WCDataObject):
        Renamed deleteAllValues to deprecatedDeleteAllValues.

2013-10-13  Sam Weinig  <sam@webkit.org>

        Merge NODE_TYPE_CASTS and ELEMENT_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=122735

        Reviewed by Antti Koivisto.

        NODE_TYPE_CASTS and ELEMENT_TYPE_CASTS are identical. Let them become one
        with one another.

2013-10-13  Andreas Kling  <akling@apple.com>

        Uncrashify Document::head() too. (Why am I even awake?)

2013-10-13  Andreas Kling  <akling@apple.com>

        REGRESSION(r157381): Make Document::body() crash less when there is no documentElement.

        Unreviewed.

2013-10-13  Darin Adler  <darin@apple.com>

        Rewrite Document::body and Document::head in modern style, way clearer and shorter
        https://bugs.webkit.org/show_bug.cgi?id=122717

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::body): Use iterator to make this way easier to read.
        (WebCore::Document::head): Ditto.

        * html/HTMLTagNames.in: Added generateTypeHelpers for body and head.

== Rolled over to ChangeLog-2013-10-13 ==
